Macros VBA : structure, modules, bouton du ruban, lancement automatique, erreurs et API Windows
Une macro VBA n’est qu’une procédure Sub rangée dans un module. Cette page couvre tout ce qui l’entoure : où placer le code, comment le lancer depuis le ruban ou automatiquement, comment l’arrêter et l’exécuter pas à pas, lire les messages d’erreur, protéger le projet par mot de passe et appeler les fonctions de Windows. Chaque séquence propose un simulateur. Pour l’éditeur lui-même, voir l’éditeur VBE, les espions et Debug.Print.
Structure d’une macro et commentaires
Une macro commence par Sub NomMacro() et se termine par End Sub. Entre les deux : les déclarations (Dim), les instructions, les structures (If, For, With) et les commentaires. Un commentaire commence par une apostrophe ' (ou Rem) : VBA l’ignore et l’affiche en vert. Pour commenter plusieurs lignes d’un coup : barre d’outils Édition › Commenter bloc / Ne pas commenter bloc.
A1, TVA2025 est refusé). Préférez un verbe : ImprimerFacture, MettreAJourTCD. _ en fin de ligne continue l’instruction sur la ligne suivante. Le deux-points : fait l’inverse et place deux instructions sur une ligne.Les modules : standard, classeur, feuilles
Un projet VBA contient trois sortes de modules. Le module standard (Insertion › Module) reçoit les macros et les fonctions personnalisées. Le module ThisWorkbook reçoit les événements du classeur (ouverture, fermeture, enregistrement). Chaque module de feuille reçoit les événements de sa feuille (modification, sélection, activation). S’y ajoutent les UserForms et les modules de classe. Le mot-clé Private ou Public décide qui voit la procédure.
modImport, modImpression) se renomme par la propriété (Name). Clic droit › Exporter un fichier crée un .bas réutilisable dans un autre classeur.Créer une icône sur le ruban pour exécuter une macro
Fichier › Options › Personnaliser le ruban : créez un Nouvel onglet ou un Nouveau groupe dans un onglet existant, choisissez Macros dans la liste « Choisir les commandes dans les catégories suivantes », sélectionnez la macro puis Ajouter. Renommer permet de choisir l’icône et le texte affiché. Même principe pour la barre d’outils Accès rapide (Personnaliser la barre d’outils Accès rapide).
Lancement automatique de macros
Une procédure événementielle se déclenche seule. Workbook_Open (module ThisWorkbook) s’exécute à l’ouverture, Workbook_BeforeClose avant la fermeture, Worksheet_Change (module de la feuille) à chaque saisie. Pour les créer sans faute de frappe, choisissez l’objet puis l’événement dans les deux listes en haut de la fenêtre de code. L’ancienne macro Auto_Open (module standard) fonctionne encore, et Application.OnTime programme une macro à une heure donnée.
Worksheet_Change qui modifie une cellule se relance elle-même. Encadrez la modification par Application.EnableEvents = False puis = True.Arrêter une macro et l’exécuter pas à pas
Échap (ou Ctrl + Pause) interrompt une macro en cours : Excel propose Continuer, Fin ou Débogage. En mode arrêt, F8 exécute la ligne suivante et entre dans les procédures appelées, Maj + F8 exécute l’appel d’un bloc, Ctrl + Maj + F8 termine la procédure en cours, Ctrl + F8 va jusqu’au curseur. F9 pose un point d’arrêt (pastille rouge), F5 continue jusqu’au suivant. Les espions et la fenêtre Exécution sont détaillés dans l’éditeur VBE, l’explorateur d’objets (F2) aussi.
Stop dans le code agit comme un point d’arrêt qui reste enregistré avec le classeur. Pensez à le retirer avant de diffuser la macro.Application.EnableCancelKey = xlDisabled empêche l’interruption par Échap. À réserver à du code parfaitement testé, sinon seule la fermeture forcée d’Excel arrêtera une boucle infinie.Les messages d’erreur
Les erreurs de compilation sont signalées avant l’exécution (ligne en rouge, instruction mal écrite). Les erreurs d’exécution surviennent pendant la macro et affichent un numéro : Fin arrête tout, Débogage surligne la ligne fautive en jaune. Pour les gérer dans le code : On Error GoTo Etiquette saute vers un bloc de traitement, On Error Resume Next passe à la ligne suivante, Err.Number et Err.Description décrivent l’erreur.
On Error Resume Next masque toutes les erreurs suivantes. Limitez-le à une ligne précise et rétablissez la gestion normale avec On Error GoTo 0.Exit Sub juste avant GestionErreur:, sinon le bloc de traitement s’exécute aussi quand tout s’est bien passé.Sécuriser le code par un mot de passe
Dans l’éditeur : Outils › Propriétés de VBAProject › onglet Protection. Cochez Verrouiller le projet pour l’affichage, saisissez et confirmez le mot de passe. La protection ne prend effet qu’après enregistrement, fermeture et réouverture du classeur : le projet apparaît alors fermé et le mot de passe est demandé pour l’ouvrir. Les macros restent exécutables normalement.
Faire appel aux fonctions API de Windows
Les API Windows sont des fonctions des bibliothèques système (kernel32, user32, shell32…). On les rend utilisables avec une instruction Declare placée en tête de module, avant toute procédure. Dans Office 64 bits, Declare doit porter l’attribut PtrSafe, et les pointeurs ou handles le type LongPtr. La compilation conditionnelle #If VBA7 Then garde un code compatible avec les anciennes versions.
Application.Wait attend au moins une seconde et fige Excel. Sleep 300 attend 300 millisecondes : utile pour une animation ou une temporisation courte.Exercice : une macro de calcul robuste, lancée depuis le ruban
Classeur d’exercice (Énoncé et Corrigé)
- Enregistrez le classeur en .xlsm. Insérez un module standard
modCommandeset collez le code de la feuille « Code VBA » (déclaration de Sleep comprise, en tête de module). - Collez la procédure
Workbook_Opendans le module ThisWorkbook, enregistrez, fermez et rouvrez : le message d’accueil s’affiche. - Exécutez
CalculerCommandespas à pas (F8) jusqu’à la ligne Bernard : notez le numéro de l’erreur interceptée. - Ajoutez un onglet « A3I » avec un groupe « Commandes » et un bouton pour
CalculerCommandes, avec l’icône de votre choix. - Lancez la macro depuis le bouton : le message doit afficher un total de 7 070 € et 1 erreur. Testez aussi la macro
Clignoter. - Protégez le projet par un mot de passe, rouvrez le classeur pour vérifier, puis remplissez la feuille Contrôle.