Apprendre les procédures Sub VBA : Guide pratique avec exemples

Une variable en VBA est un espace mémoire utilisé pour stocker des données qui peuvent changer au cours de l’exécution d’un programme. Par exemple, vous pourriez utiliser une variable pour stocker un nombre, du texte, ou une date.

Découvrez comment optimiser vos sous-procédures pour des macros plus performantes en suivant notre session VBA complète.

Ecriture d’une procédure Sub VBA

Syntaxe de base

La syntaxe de base pour écrire une procédure Sub est simple et se compose de quelques éléments essentiels :

Sub NomDeLaProcedure()
    ' Votre code ici
End Sub
  • Sub : Indique le début de la procédure.
  • NomDeLaProcedure : Représente le nom que vous donnez à votre procédure.
  • End Sub : Marque la fin de la procédure.

Régles de nommage

Les règles de nommage d’une procédure Sub VBA sont :

  1. Commencer par une lettre : Le nom de la procédure doit toujours commencer par une lettre (AZ, az).
  2. Longueur maximale : Le nom d’une procédure ne peut pas dépasser 255 caractères. Toutefois, pour des raisons de lisibilité, il est recommandé d’utiliser des noms beaucoup plus courts (généralement entre 10 et 50 caractères).
  3. Caractères autorisés : Le nom peut contenir des lettres, des chiffres (0-9), et des caractères de soulignement (_). Toutefois, il ne peut pas contenir d’espaces ni de caractères spéciaux (comme @, #, $, etc.).
  4. Pas de mots réservés : Le nom de la procédure ne doit pas être un mot réservé du langage VBA, comme Sub, End, If, Loop, etc. Cela pourrait entraîner des erreurs de compilation.
  5. Nom explicite : Bien que ce ne soit pas une règle technique, il est fortement recommandé d’utiliser des noms explicites et descriptifs qui indiquent clairement ce que fait la procédure. Par exemple, CopierDonnées est plus informatif que simplement Copier.
  6. Cohérence : Essayez de suivre un modèle de nommage cohérent tout au long de votre projet VBA. Par exemple, vous pouvez utiliser des noms comme TraiterDonnées, ImporterFichier, etc., pour indiquer des actions.

Contenu

A l’intérieur d’uen procédure, vous allez l’algorithme qui permet d’avoir le résultat que vous attendez. Pour cela, vous allez utiliser les différents éléments de structuration du code VBA :

  • If Then, pour traiter les conditions
  • Select Case, une autre manère de traiter les conditions
  • Next For, pour réaliser des boucles
  • Next Each, pour réaliser des boucles
  • Do While, pour traiter les boucles

Lancer une procédure

En VBA, il existe plusieurs façons d’exécuter une procédure Sub. Vous pouvez appeler une procédure depuis une autre procédure, l’associer à un élément sur une feuille Excel, ou l’exécuter directement depuis l’éditeur VBA. Voici un détail complet de ces méthodes :

Appeler une procédure depuis une autre procédure

Lorsque vous écrivez le code VBA, il est courant de diviser les tâches en plusieurs petites procédures pour rendre le code plus lisible et maintenable. Vous pouvez appeler une procédure Sub à partir d’une autre de deux manières : avec ou sans le mot-clé Call.

Sans Call

Il vous suffit de taper le nom de la procédure que vous souhaitez appeler.

Sub ProcedurePrincipale()
    SousProcedure
End Sub

Sub SousProcedure()
    MsgBox "Sous-procédure exécutée"
End Sub

Ici, SousProcedure est appelé directement depuis ProcedurePrincipale. Cela exécute le code contenu dans SousProcedure.

Avec Call

Vous pouvez également utiliser le mot-clé Call pour appeler la procédure.

L’utilisation de Call est optionnelle, mais elle peut rendre le code plus lisible, surtout si la procédure appelée prend des arguments.

Exemple avec passage de paramètres

Lorsque vous appelez une procédure qui nécessite des paramètres, vous devez les passer entre parenthèses. Vous pouvez choisir d’utiliser Call ou non.

Sans Call :

Sub ProcedurePrincipale()
    Multiplier 5, 3
End Sub

Sub Multiplier(ByVal a As Integer, ByVal b As Integer)
    MsgBox "Le résultat est : " & (a * b)
End Sub

Ici, Multiplier est appelé avec les arguments 5 et 3, ce qui affiche une boîte de message avec le résultat de leur multiplication.

Avec Call :

Sub ProcedurePrincipale()
    Call Multiplier(5, 3)
End Sub

Sub Multiplier(ByVal a As Integer, ByVal b As Integer)
    MsgBox "Le résultat est : " & (a * b)
End Sub

Dans cet exemple, le mot-clé Call est utilisé pour appeler Multiplieravec les mêmes paramètres. Le comportement est le même, mais l’utilisation de Call est parfois préférée pour une meilleure lisibilité, surtout dans des projets complexes.

Lancer une procédure à partir d’un élément sur une feuille Excel

Vous pouvez également exécuter une procédure VBA en l’associant à un bouton, une image, ou tout autre objet sur une feuille Excel. Voici comment procéder :

  1. Créer un bouton ou insérer une image :
    • Allez dans l’onglet « Insertion » du ruban Excel.
    • Sélectionnez « Formes » et choisissez un bouton ou une autre forme.
    • Dessinez la forme sur votre feuille Excel. Si vous souhaitez utiliser une image, cliquez sur « Image » et insérez l’image de votre choix.
  2. Assigner la procédure au bouton ou à l’image :
    • Faites un clic droit sur le bouton ou l’image que vous venez d’ajouter.
    • Sélectionnez « Assigner une macro ».
    • Dans la fenêtre qui s’ouvre, sélectionnez la procédure Sub VBA que vous voulez exécuter lorsque l’utilisateur clique sur cet élément.
    • Cliquez sur « OK ».

Dès que l’utilisateur cliquera sur ce bouton ou cette image, la procédure VBA associée sera exécutée.

Exécuter une procédure directement depuis l’éditeur VBA

Enfin, il est possible d’exécuter une procédure directement depuis l’éditeur VBA. Voici les différentes méthodes disponibles :

  • Appuyez sur F5 : Lorsque vous êtes dans l’éditeur VBA, appuyez sur la touche F5 pour exécuter la procédure actuellement active dans la fenêtre de code.
  • Utiliser le bouton « Exécuter » : En haut de l’interface de l’éditeur VBA, vous trouverez

Passage de paramètres dans une procédure

Les procédures VBA peuvent accepter des paramètres , ce qui permet de les rendre plus flexibles et réutilisables. Il existe deux façons principales de passer des paramètres : ByVal et ByRef.

Un article spécifique est consacré à ce sujet : différence entre ByVal et ByRef VBA.

ByVal (Par Valeur)

Le paramètre passé est une copie de la valeur originale. Toute modification faite à cette copie n’affectera pas la valeur originale.

Sub Incrementer(ByVal Nombre As Integer)
    Nombre = Nombre + 1
    MsgBox "Nombre dans la procédure : " & Nombre
End Sub

ByRef (Par Référence)

Le paramètre passé est une référence directe à la valeur originale. Toute modification faite à ce paramètre affectera la valeur originale.

Sub Incrementer(ByRef Nombre As Integer)
    Nombre = Nombre + 1
    MsgBox "Nombre dans la procédure : " & Nombre
End Sub

La différence clé se voit lorsque vous appelez la procédure avec un argument : avec ByVal, la variable d’origine reste identique, alors qu’avec ByRef, elle est modifiée.

La portée des procédures en VBA

En VBA, la portée d’une procédure déterminer où et comment cette procédure peut être utilisée dans votre projet. Il est important de comprendre la différence entre les procédures déclarées avec le mot-clé Private et celles sans spécification particulière, afin de bien structurer votre code et de gérer l’accès aux différentes parties de votre programme.

Procédures sans spécification de portée

Lorsque vous déclarez une procédure sans précision à sa portée, celle-ci est automatiquement considérée comme publique . Cela signifie que la procédure est accessible depuis n’importe quel autre module ou procédure au sein du même projet VBA.

Sub ProcedurePublique()
    MsgBox "Je suis une procédure publique"
End Sub

Portée : Cette procédure ProcedurePubliquepeut être appelée depuis n’importe quel module dans le projet. Par exemple, si vous avez plusieurs modules dans votre projet VBA, vous pouvez accéder à cette procédure depuis n’importe laquelle d’entre eux :

' Module 1
Sub AppelDepuisModule1()
    ProcedurePublique
End Sub

' Module 2
Sub AppelDepuisModule2()
    ProcedurePublique
End Sub

Dans ce cas, ProcedurePubliquepeut être utilisé partout dans le projet VBA, ce qui est utile pour des fonctions ou des procédures que vous souhaitez réutiliser dans différents modules.

Procédures déclarées avec Private

Lorsque vous déclarez une procédure avec le mot-clé Private, vous limitez sa portée au module dans lequel elle est définie. Autrement dit, la procédure ne peut être appelée que depuis le même module.

Private Sub ProcedurePrivee()
    MsgBox "Je suis une procédure privée"
End Sub

Portée : Cette procédure ProcedurePriveene peut être appelée que depuis d’autres procédures au sein du même module :

Sub AppelDepuisLeMemeModule()
    ProcedurePrivee
End Sub

Cependant, si vous essayez d’appeler ProcedurePrivee depuis un autre module, vous obtiendrez une erreur de compilation, car la procédure n’est pas accessible en dehors du module où elle a été déclarée.

Quand utiliser Private ?

  • Utilisez Private pour limiter l’accès à une procédure Sub VBA et éviter qu’elle soit appelée depuis d’autres modules. Cela est particulièrement utile pour les procédures d’assistance ou les sous-fonctions internes qui ne devraient pas être utilisées en dehors de leur contexte spécifique.
  • Utilisez une procédure sans spécification de portée (publique par défaut) lorsque vous souhaitez que la procédure soit accessible depuis plusieurs modules ou partout dans le projet. Cela est idéal pour les procédures générales et les fonctions réutilisables.

En résumé, choisissez la portée appropriée pour vos procédures est cruciale pour organiser et sécuriser votre code VBA. Private protège les parties de votre code qui ne devraient pas être accessibles globalement.