PaliSkill
Introduction au VBA

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