Ces mots-clés sont utilisés aussi bien pour les procédures que pour les fonctions.
Par défaut c'est byref qui est utilisé.
Si un paramètre est passé entre parenthèses, alors il est passé par valeur (byval) dans le cas ou la déclaration de ta fonction/procédure ne précise pas le mode d'utilisation.
Amuse-toi avec cet exemple:
sub test_sub(param1 as string, byval param2 as string)
param1 = "coucou"
param2 = "RE coucou"
end sub
sub test()
dim a as string
dim b as string
a = "A"
b = "B"
test_sub a, b
' résultat a = "coucou" et b = "B"
test_sub (a), c
' résultat a = "A" et b = "B"
end sub
Pour ce qui est de l'utilité, voici un autre exemple:
Admettons que tu doives créer une fonction CONNX_DISPO() de connexion à un dispositif quelconque.
Cette connexion initialise des variables qui te servent à utiliser ce dispositif, à l'identifier.
Cette connexion permet aussi d'identifier toutes les erreurs qui ont empêché la connexion.
L'utilisation des paramètres avec ByRef permet de faire ceci
dim id_dispo, lib_dispo, env_dispo, etc_dispo
code_erreur = CONNX_DISPO(id_dispo, lib_dispo, env_dispo, etc_dispo)
if code_erreur then
exit...
else
' utilisation des variables id_dispo,... initialisées par CONNX_DISPO()
...
La fonction peut ainsi renvoyer plusieurs valeurs, plus un éventuel code d'erreur sans utiliser de variables globales (seul autre moyen de récupérer plusieurs valeurs d'une fonction).
Cela permet de limiter l'utilisation mémoire. Surtout en vb où tu n'as le choix qu'entre des variables globales à tout un module, ou restreintes à la procédure en cours.
Cette technique permet dans ce cas de créer des variables restreintes à une procédure, mais utilisables dans les procédures appelées par celle-ci, sans consommer plus de mémoire.
J'espère avoir défriché le problème.
A+