Différence entre ByREf - ByVal

Bonjour,

Je suis débutant en VBA et essaie de me former en autodidacte via des livres sur le sujet.

Je suis en train d'étudier les déclarations de Variables et Fonctions.

Je découvre que l'on peut inclure deux paramètres ByRef et ByVal avant le nom de la procédure ou de fonction.

Je pense avoir compris que:

ByRef met à jour la valeur concernée durant la "vie" du code

ByVal garde la valeur d'origine en mémoire même après un traitement.

C'est bien cela ?

Dans ce cas ma question devient:

A quoi cela peut servir l'option ByVal ? Je n'y "vois" pas un intérêt, un cas d'utilisation qui serait pertinent ?

Quelqu'un peut-il m'éclairer sur ce point car je n'aime pas ne pas comprendre

Merci par avance.

Noxou

Bonjour

La différence entre ByRef et ByVal concerne la manière dont les arguments sont passés à une fonction ou une procédure dans certains langages de programmation, comme Visual Basic.

  • ByVal (par valeur) : Lorsque vous passez un argument par valeur, une copie de la valeur est faite. Cela signifie que toute modification apportée à cet argument à l'intérieur de la fonction ou de la procédure n'affectera pas la variable d'origine. En d'autres termes, vous travaillez sur une copie, et la variable d'origine reste inchangée.
  • ByRef (par référence) : En revanche, lorsque vous passez un argument par référence, vous passez un pointeur vers la variable d'origine. Cela signifie que toute modification apportée à cet argument à l'intérieur de la fonction ou de la procédure affectera directement la variable d'origine. Ainsi, les changements sont visibles en dehors de la fonction.

En résumé, utilisez ByVal si vous souhaitez protéger la variable d'origine des modifications, et ByRef si vous souhaitez que les modifications soient reflétées dans la variable d'origine

Ah Ok merci Beaucoup, c'est très clair comme explication "théorique".

Cependant, auriez un exemple ou thème concret pour m'expliquer dans quel cas il est pertinent d'utiliser ByVal pluôt que ByRef ? ou inversement.

Merci

Bonsoir Fabinox, Joco7915,

A quoi cela peut servir l'option ByVal ? Je n'y "vois" pas un intérêt, un cas d'utilisation qui serait pertinent ?

Pour faire suite à la réponse précédente et à ton questionnement. Tu avais déjà posé l'intérêt. En effet si l'on prend un taux d'intérêt minimum donné, donc ByVal et que l'on lui applique une incrémentation découlant d'une fonction on peut constater l'évolution d'un montant, investissement par exemple... Etc.. Sans que ce taux minimum de base soit ainsi affecté par la fonction construite.

Super, Merci beaucoup Cellus

Votre exemple est bien pertinent pour comprendre l'intérêt (c'est la cas de le dire) de ByVal

Merci

Bonjour à tous,

Pour compléter tout ce qui à déjà été dis, si l'on considère cette déclaration :

Function MaFunction( _
         Variable1, _
         ByVal Variable2, _
         ByVal Variable3 As Long, _
         Optional ByRef Variable4 As Boolean = True _
         )

    'Blablabla
    'Blablabla
    'Blablabla
    Set MaFunction = Feuil1.Range("A1")
End Function
  • MaFunction sera publique et de type Variant. Dans ce cas elle retourne un objet Plage.
  • Variable1 sera passée par référence, et sera de type Variant.
  • Variable2 sera passée par valeur, et sera de type Variant.
  • Variable3 sera passée par valeur, et sera de type Long.
  • Variable4 sera optionnelle, passé par référence, de type Booléenne, et égale à Vrai à son initialisation, ou si omise.

Voilà tout cela pour dire qu'il faut prendre le temps de bien déclarer non seulement, les variables, mais aussi les procédures et fonction ainsi que leurs paramètres.

Une mine d'informations sur le site de Crosoft :

Bonne programmation.

Rechercher des sujets similaires à "difference entre byref byval"