Excel VBA ByRef et ByVal
Vous pouvez passer des arguments à une procédure (fonction ou sous) par référence ou par valeur. Par défaut, Excel VBA transmet des arguments par référence. Comme toujours, nous utiliserons un exemple simple pour rendre les choses plus claires.
Placez un bouton de commande sur votre feuille de calcul et ajoutez les lignes de code suivant:
Dim x As Integer x = 10 MsgBox Triple(x) MsgBox x
Le code appelle la fonction Triple. Il est le résultat de la deuxième MsgBox qui nous intéressent. Les fonctions doivent être placés dans un module.
-
Ouvrez l’éditeur Visual Basic et cliquez sur Insérer, Module.
-
Ajoutez les lignes de code suivantes:
Function Triple(ByRef x As Integer) As Integer x = x 3 Triple = x End Function
Lorsque vous cliquez sur le bouton de commande sur la feuille:
-
Remplacez ByRef avec ByVal.
Function Triple(ByVal x As Integer) As Integer x = x 3 Triple = x End Function
Lorsque vous cliquez sur le bouton de commande sur la feuille:
Explication: Lors du passage des arguments par référence, nous faisons référence à la valeur d’origine. La valeur de x (la valeur initiale) est modifié dans la fonction. En conséquence, la deuxième affiche MsgBox une valeur de 30. Lors du passage des arguments par valeur, nous passons une copie à la fonction. La valeur d’origine ne change pas. En conséquence, le deuxième MsgBox affiche une valeur de 10 (la valeur initiale).