Leçon 5 / 9 — Chapitre 4: Interaction, fonctions et automatisation
Passer des arguments à une Sub ou une Function
Une Sub ou une Function peut recevoir des valeurs en entrée, appelées arguments (ou paramètres), qui rendent le code réutilisable avec des données différentes à chaque appel, plutôt que de coder une seule valeur en dur.
Déclarer et utiliser un argument
Sub AfficherBienvenue(role As String)
MsgBox "Bienvenue, " & role
End Sub
Appelée avec AfficherBienvenue "Responsable", cette Sub affiche "Bienvenue, Responsable" ; appelée avec AfficherBienvenue "Stagiaire", elle affiche un message différent, sans qu'une seule ligne du code n'ait changé.
ByRef et ByVal : deux façons de transmettre un argument
Par défaut, VBA transmet un argument ByRef ("par référence") : la Sub reçoit un accès direct à la variable d'origine, et toute modification à l'intérieur de la Sub modifie AUSSI la variable dans le code appelant.
Sub Ajouter(ByRef valeur As Integer)
valeur = valeur + 5
End Sub
À l'inverse, ByVal ("par valeur") transmet une COPIE de la variable : la modifier à l'intérieur de la Sub n'a aucun effet sur la variable d'origine une fois la Sub terminée.
Sub AjouterSansEffet(ByVal valeur As Integer)
valeur = valeur + 5 ' n'affecte que la copie locale
End Sub
Pourquoi cette distinction compte : un code qui modifie par erreur une variable partagée via ByRef, sans s'en rendre compte, produit un bug difficile à tracer — préciser ByVal explicitement quand aucune modification de l'original n'est voulue rend le code plus prévisible.
Exemple concret : une Sub AppliquerBonus(ByRef salaire As Double) est volontairement écrite en ByRef car son objectif est justement de modifier la variable salaire d'origine ; une Sub AfficherApercu(ByVal salaire As Double) est volontairement en ByVal pour garantir qu'un simple aperçu ne modifie jamais la valeur réelle.
À vous de jouer : écrivez une Sub avec un argument ByRef qui double la valeur reçue, puis vérifiez avec un MsgBox que la variable d'origine a bien changé après l'appel.
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 76 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès