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 :
- Commencer par une lettre : Le nom de la procédure doit toujours commencer par une lettre (AZ, az).
- 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).
- 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.).
- 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.
- 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.
- 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 :
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 :
- 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.
- 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.