C’est l’une des questions les plus posées dans les entretiens VBA. Dans cet article, nous allons apprendre quelle est la différence entre les arguments ByVal et ByRef dans Excel VBA.

Définitions:

Argument ByRef: C’est la forme courte littérale de par référence. Lorsqu’un argument est passé en tant qu’argument ByRef à un autre sous ou fonction, la référence de la variable réelle est envoyée. Toutes les modifications apportées à la copie de la variable seront reflétées dans l’argument d’origine.

Nous pouvons dire que, au lieu de value, l’emplacement de value est envoyé à la fonction en utilisant ByRef vers une fonction.

Il s’agit de l’argument par défaut dans VBA. Nous n’avons pas besoin d’écrire ByRef avant l’argument.

Syntaxe:

Sous x (a comme variante)

«Ou Sub x (ByRef a as Variant)

Argument ByVal: C’est une forme courte littérale de par valeur. Lorsqu’un argument est passé en tant qu’argument ByVal à un autre sous ou fonction, seule la valeur de l’argument est envoyée. L’argument d’origine est laissé intact. Les modifications apportées à la fonction étrangère ou au sous ne seront pas reflétées dans l’argument d’origine.

Pour déclarer un argument comme ByVal, vous devez utiliser le mot clé ByVal avant l’argument.

Syntaxe:

Sub x (ByVal a as Variant)

Maintenant, nous connaissons les définitions. Voyons un exemple et finissons-en.

Exemple ByRef Voici un programme simple.

Sub X(ByRef a As Variant)

a = 20

Debug.Print "in sub X value of a = " & a

End Sub

Sub Y()

a = 10

Call X(a)

Debug.Print "in sub Y value of a = " & a

End Sub

Donc, ici, nous avons deux sous-programmes. Le premier sous est X qui prend un argument variant comme ByRef. (Vous pouvez omettre le mot-clé ByRef. C’est la valeur par défaut.)

Ensuite, il définit la valeur de a = 20 end puis imprime la valeur de a.

Le sous-programme Y est le sous-programme principal qui appelle le sous-programme X. Il définit la valeur de a = 10, puis appelle le sous-programme X et passe un argument.

Ensuite, il imprime la valeur de a dans Y.

Maintenant, lorsque vous exécutez Sub Y, c’est la sortie que vous obtenez.

en sous X valeur de a = 20 en sous Y valeur de a = 20

0046

Conclusion: La valeur de l’original a est modifiée par le sous-X et fixée à 20 pour les deux sous-marins. vous pouvez voir que lorsque Sub Y s’exécute, la valeur initiale de a était de 10. Y appelle X (a). X définit la valeur de a = 20. Il imprime «dans la valeur sous X de a = 20».

Le contrôle revient à y et imprime dans la valeur sub Y de a = 20.

C’est l’effet de l’argument ByRef.

Exemple ByVal:

Ceci est un exemple ByVal

Sub X(ByVal a As Variant)

a = 20

Debug.Print "in sub X value of a = " & a

End Sub

Sub Y()

a = 10

Call X(a)

Debug.Print "in sub Y value of a = " & a

End Sub

Les deux exemples sont les mêmes avec la seule différence de passage des arguments.

Ici, dans X, les arguments sont déclarés comme ByVal. Lorsque vous exécutez le sous-programme Y cette fois, la sortie est:

en sous X valeur de a = 20 en sous Y valeur de a = 10

0047

Conclusion: La valeur de l’original a n’est PAS modifiée par le sous-X. Elle est de 20 pour X et 10 pour Y. Lorsque Y appelle X avec a, il n’envoie que la valeur de a et non l’adresse de a.

Par conséquent, toute modification apportée à a n’est pas reflétée dans la variable d’origine.

Pour le test, si vous imprimez la valeur de a dans X avant de le définir sur 20, il affichera 10. Parce que le 10 est passé à un dans X en utilisant byVal. En utilisant ByRef, vous avez envoyé un de Y à un de X.

0048

C’est une question facile, mais beaucoup d’entre nous confondent cela, dans la question d’entrevue vba. La raison en est que nous ne l’utilisons pas beaucoup. La plupart du temps, nous copions la valeur dans une variable différente. * Alors oui les gars, c’est la différence entre les arguments ByRef et ByVal dans Excel VBA. Faites-moi savoir, si vous avez le moindre doute concernant ce sujet ou tout autre sujet VBA ou Excel. La section des commentaires est à vous.

Articles liés:

link: / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [Supprimer les feuilles sans invites de confirmation en utilisant VBA dans Microsoft Excel]

link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Ajouter et enregistrer un nouveau classeur à l’aide de VBA dans Microsoft Excel 2016]

link: / menus-toolbars-status bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Afficher un message sur la barre d’état Excel VBA]

lien: / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Désactiver les messages d’avertissement à l’aide de VBA dans Microsoft Excel 2016]

Articles populaires:

link: / formulas-and-functions-introduction-of-vlookup-function [La fonction RECHERCHEV dans Excel]

lien: / tips-countif-in-microsoft-excel [COUNTIF dans Excel 2016]

link: / excel-formule-et-fonction-excel-sumif-function [Comment utiliser la fonction SUMIF dans Excel]