Excel VBA ByRef et ByVal
Vous pouvez passer des arguments à une procédure (fonction ou sub) par référence ou par valeur. Par défaut, Excel VBA passe les arguments par référence. Comme toujours, nous utiliserons un exemple simple pour clarifier les choses.
Placez un bouton de commande sur votre feuille de calcul et ajoutez les lignes de code suivantes:
x = 10
MsgBox Triple(x)
MsgBox x
Le code appelle la fonction Triple. C’est le résultat de la seconde MsgBox qui nous intéresse. Les fonctions doivent être placées dans un module.
1. Ouvrez Visual Basic Editor et cliquez sur Insérer, Module.
2. Ajoutez les lignes de code suivantes:
x = x * 3
Triple = x
End Function
Résultat lorsque vous cliquez sur le bouton de commande de la feuille:
3. Remplacez ByRef par ByVal.
x = x * 3
Triple = x
End Function
Résultat lorsque vous cliquez sur le bouton de commande de la feuille:
Explication: Lorsque nous transmettons des arguments par référence, nous référons à la valeur d'origine. La valeur de x (la valeur d'origine) est modifiée dans la fonction. En conséquence, le second MsgBox affiche une valeur de 30. Lorsque nous transmettons des arguments par valeur, nous transmettons une copie à la fonction. La valeur d'origine n'est pas modifiée. En conséquence, le deuxième MsgBox affiche une valeur de 10 (la valeur d'origine).