Les arguments de valeurs et de références (ByVal et ByRef) de VBA sur Excel

Guide « 108 astuces pour grands débutants sur Excel ! » Offert
Booster votre productivité en téléchargeant gratuitement votre ebook PDF des meilleures astuces pour les débutants et les pros d'Excel
Excel formation - 00 Astuces - 100
 

Pour ce nouveau chapitre de la formation dédiée à l’apprentissage de VBA, nous allons découvrir les types d’arguments que nous pouvons utiliser en VBA. En effet, nous avons déjà eu l’occasion de découvrir à plusieurs reprises comment passer des arguments à une procédure ou une fonction VBA pour lui transmettre des informations. Aujourd’hui, nous allons découvrir deux nouveaux mots-clés qui vont permettre de personnaliser la manière dont ces arguments doivent être utilisés.

 

Téléchargement

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
 

 

Tutoriel Vidéo

 

1. Présentation

Comme vous le savez maintenant, lorsque l’on créé une procédure ou une fonction en VBA, nous pouvons passer très simplement des arguments entre parenthèses, ce qui permettra de personnaliser l’appel à cette macro-commande.

Par contre ce que nous savons déjà beaucoup moins c'est qu'il existe deux méthodes pour passer ses arguments : soit envoyer des arguments par valeur, soit par référence.

Lorsque nous utilisons un argument par valeur, cela signifie que nous souhaitons envoyer une valeur dans une procédure appelée depuis une procédure appelante afin que celles-ci soient utilisés en tant que valeur attribuée à une variable.

D’un autre côté, lorsque nous utilisons un argument par référence alors dans ce cas-là nous envoyons directement la référence à une variable existantes dans la procédure appelante afin que celles-ci soient modifiés dans la fonction appelée.

Il ne fait aucun doute que ce que je viens de vous expliquer peut vous paraitre assez complexe à comprendre, mais pas de panique nous allons revenir sur cette notion dans le détail au cours de ce chapitre

 

2. Les arguments de valeur : ByVal

L’argument par valeur consiste donc à ne prendre que la valeur de l’éventuelle variable passée en argument.

Dans l’exemple suivant, nous appelons la macro calculTVAByVal qui affiche une notification présentant le montant de la TVA correspond à un montant HT et un taux de TVA donné.

Comme le laisse penser le nom de la macro, ces arguments sont définis avec le mot clé ByVal, il s’agit donc d’arguments par valeur :

Sub macroPrincipale()
    Dim HT As Double, taux As Double
    HT = 100
    taux = 0.2
    
    Call calculTVAByVal(HT, taux)
    
End Sub
 
Sub calculTVAByVal(ByVal HT As Double, ByVal  taux As Double)
    Dim TVA As Double
    TVA = HT * taux
    MsgBox "Montant de TVA = " & TVA
End Sub

Dans les faits, lorsque nous utilisons ByVal, une copie de la variable est créée en mémoire, il s’agit donc de deux éléments indépendants l’un de l’autre.

 

3. Les arguments de référence : ByRef

En revanche, l’argument par référence fait appel, non uniquement à une valeur, mais à la référence de l’élément passé en argument.

C’est pourquoi, toute modification impactant l’argument au sein de la macro appelée va également avoir des répercussions sur l’élément lui-même.

Dans ce nouvel exemple, le montant de la TVA est déterminé en utilisant la macro calculTVAByRef, qui utilise cette fois-ci des arguments par référence

Sub macroPrincipale()
    Dim HT As Double, taux As Double
    HT = 100
    taux = 0.2
    
    Call calculTVAByRef(HT, taux)
    
End Sub
 
Sub calculTVAByRef(ByRef HT As Double, ByRef  taux As Double)
    Dim TVA As Double
    TVA = HT * taux
    MsgBox "Montant de TVA = " & TVA
End Sub

Ici, il n’y a aucune différence, la macro récupère les valeurs des arguments et calcul le montant de la TVA.

En revanche, si nous modifions la valeur de l’un de ces arguments, le changement sera également effectif dans la macro appelante.

Pour nous rendre compte, nous commençons par modifier le taux de TVA dans la procédure calculTVAByRef :

Sub calculTVAByRef(ByRef HT As Double, ByRef  taux As Double)
    taux = 0.1 
    …

Ensuite, nous affichons cette valeur dans la procédure appelante :

Sub macroPrincipale()
    …
    Call calculTVAByRef(HT, taux)
    MsgBox "Nouveau taux : " & taux
    
End Sub

Excel nous affiche alors la valeur de la variable taux après que la procédure calculTVAByRef ait été appelée.

Celle-ci est maintenant égale à 0,10 :

Excel formation - vba arguments de valeurs et de références - 01

Il faut également savoir que le type d’argument est l’argument par référence il n’est pas nécessaire de le préciser au niveau de la déclaration des arguments :

Sub calculTVAByRef(HT As Double, taux As Double) 

À l’usage, lorsque l’on souhaite modifier la valeur d’une variable, nous utilisons plus facilement une fonction, mais utiliser des arguments par référence, a pour avantage de pouvoir modifier rapidement plusieurs variables.

Dans les faits, lorsque nous utilisons ByRef, la macro appelée agit directement sur la variable correspondante, à son emplacement dans la mémoire.

L’argument permet donc d’enregistrer uniquement l’adresse de la variable en mémoire.

Par conséquent, pour éviter tout risque d’erreur, il faut veiller à ce que le type donner à l’argument soit compatible avec le type de la variable utilisée !

C’est pourquoi, si nous modifions le type de l’argument taux en Integer, nous aurons alors une erreur :

Sub calculTVAByRef(HT As Double, taux As  Integer)

Excel formation - vba arguments de valeurs et de références - 02

Un autre intérêt d’utiliser une référence à une variable, et non pas une copie de celle-ci sera d’économiser de la mémoire lorsque celle-ci est volumineuse (par exemple s’il s’agit d’un objet composé de nombreux sous objets).

 

 



Articles qui pourraient vous intéresser

Comment connecter Excel sur Internet, sans VBA ?
Comment traduire automatiquement des fonctions Excel dans leur version originale ?
Comment analyser les résultats d’un sondage ou questionnaire avec Excel ?
Comment utiliser la fonction SOMME.SI pour effectuer des recherches sur des textes sur Excel ?
Comment calculer et étudier des écarts budgétaires avec Excel ?
Comment verrouiller et protéger un objet (graphique, image, zone de texte…) sur Excel ?
Comment formater des dates correctement dans Excel ?
Comment protéger le formatage des cellules tout en autorisant la saisie de données dans Excel ?
Comment transformer une photo en tableau Excel ?
Comment créer un publipostage automatique avec Excel ? (sans Word !)
Comment créer un graphique Gaufre sur Excel ?
Comment créer un graphique en cascade dans Excel ?

Contact - Plan du site - À propos - Contact

© Excelformation.fr 2018-2024 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.