OVH Cloud OVH Cloud

VBA & ByVal , ByRef

3 réponses
Avatar
sceptic
Bonjour,

Autant je comprends le passage par référence, où la fonction va modifier une
ou des variables, autant je ne vois pas l'intérêt par valeur puisque la
variable n'est pas modifiée dans la fonction.

Merci

3 réponses

Avatar
Jessy Sempere [MVP]
Bonjour

Ben justement, en déclarant byVal, tu garantis que cet argument
ne sera pas modifier par ta procédure...

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"sceptic" a écrit dans le message de
news:43943be5$1$20164$
Bonjour,

Autant je comprends le passage par référence, où la fonction va modifier
une

ou des variables, autant je ne vois pas l'intérêt par valeur puisque la
variable n'est pas modifiée dans la fonction.

Merci




Avatar
Guy DETIENNE
Salut ;O)

Mieux vaut un exemple simple :

Dim Toto as Long

Toto = 1
Call MyFunctionWithByRef(Toto)
Msgbox Toto '-> Toto vaut 2 car Toto a été modifié dans le fonction
MyFunctionWithByRef -> paramètre ByRef

Toto = 1
Call MyFunctionWithByVal(Toto)
Msgbox Toto '-> Toto vaut toujours 1 car inchangé -> paramètre ByVal

Public Function MyFunctionWithByRef(ByRef MonChiffre as Long) as Long

'LA variable MonChiffre est en fait la même variable que Toto. Elle
pointe sur la même référence mémoire.
'Donc si MonChiffre est modifié, Toto l'est aussi puisque c'est une
seule et unique zone mémoire.
MonChiffre = 2

End Function

Public Function MyFunctionWithByVal(ByVal MonChiffre as Long) as Long

MonChiffre = 2

End Function

L'utilisation de ByRef et ByVal aura bcp d'incidence dans le cas
d'utilisation des API's.

ByVal => Cela signifie que l'on passe notre argument par 'valeur' , c'est à
dire que la fonction appelée ne travaillera pas directement sur la variable
que tu lui passes en paramètre mais sur un clone de celle-ci.
Cela signifie que si le cas écheant la variable est modifiée par la
fonction,cela n'aura pas de repercussion sur la variable originale de votre
programme. -> voir MyFunctionWithByVal

ByRef=> Ce coup-ci la variable est passée par Référence.
La fonction appelée reçoit l'adresse de la variable utilisée dans le
programme (un genre de pointeur en C). Par conséquence si la fonction
modifie la variable elle sera aussi modifiée dans le programme si tu la
réutilises. -> MyFunctionWithByRef

Guy


"sceptic" a écrit dans le message de
news:43943be5$1$20164$
Bonjour,

Autant je comprends le passage par référence, où la fonction va modifier
une

ou des variables, autant je ne vois pas l'intérêt par valeur puisque la
variable n'est pas modifiée dans la fonction.

Merci




Avatar
Guy DETIENNE
Re ;O)

N'oublions pas que ByVal sera toujours plus gourmand qu'un ByRef car une
copie mémoire de la variable est effectuée. Cela va de soit me direz-vous,
mais d'un point de vue optimisation ca joue beaucoup tant que l'on fait
attention à la manipulation de celle-ci à travers la procédure appelée.

Guy


"sceptic" a écrit dans le message de
news:43943be5$1$20164$
Bonjour,

Autant je comprends le passage par référence, où la fonction va modifier
une

ou des variables, autant je ne vois pas l'intérêt par valeur puisque la
variable n'est pas modifiée dans la fonction.

Merci