Excel · VBA · A3iformations

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.

Sub, Dim, ‘Structure
Standard, feuille, classeurModules
Open, Change, OnTimeÉvénements
On Error, ErrErreurs
1

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.

Simulateur : cliquez sur une ligne, puis commentez-la

Nommer une macroLettre au début, ni espace ni point, pas de nom de cellule (A1, TVA2025 est refusé). Préférez un verbe : ImprimerFacture, MettreAJourTCD.
Ligne trop longueUn espace suivi d’un tiret bas _ en fin de ligne continue l’instruction sur la ligne suivante. Le deux-points : fait l’inverse et place deux instructions sur une ligne.
2

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.

Simulateur : où placer la procédure ?

    

Code perduUne macro placée dans un module de feuille disparaît si la feuille est supprimée. Gardez les macros générales dans des modules standard.
OrganiserUn module par thème (modImport, modImpression) se renomme par la propriété (Name). Clic droit › Exporter un fichier crée un .bas réutilisable dans un autre classeur.
3

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).

Simulateur : Options Excel › Personnaliser le ruban
Macros
Onglets principaux

Classeur de la macroLe bouton pointe vers la macro d’un classeur précis. Si ce classeur est fermé, Excel l’ouvre au clic ; s’il a été renommé ou déplacé, le bouton ne trouve plus la macro. Pour un bouton toujours disponible, placez la macro dans PERSONAL.XLSB.
Partager la personnalisationImporter/Exporter › Exporter toutes les personnalisations crée un fichier .exportedUI à importer sur un autre poste.
4

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.

Simulateur : déclenchez les événements

    
Journal

Boucle sans finUne macro Worksheet_Change qui modifie une cellule se relance elle-même. Encadrez la modification par Application.EnableEvents = False puis = True.
Emplacement approuvéUn classeur ouvert depuis un emplacement approuvé (Centre de gestion de la confidentialité) exécute ses macros sans barre d’avertissement : pratique pour Workbook_Open.
5

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.

Simulateur : Principale appelle Traiter trois fois

Instruction StopStop dans le code agit comme un point d’arrêt qui reste enregistré avec le classeur. Pensez à le retirer avant de diffuser la macro.
Échap désactivé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.
6

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.

Simulateur : provoquez une erreur

    
    

Resume Next avec prudenceOn 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 avant l’étiquettePlacez Exit Sub juste avant GestionErreur:, sinon le bloc de traitement s’exécute aussi quand tout s’est bien passé.
7

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.

Simulateur : Propriétés de VBAProject (n’utilisez pas un vrai mot de passe)
VBAProject – Propriétés du projet › Protection

Protection légèreCe mot de passe dissuade la curiosité mais ne résiste pas à des outils spécialisés. Ne stockez jamais d’identifiants ou de données sensibles dans le code VBA.
Mot de passe oubliéMicrosoft ne peut pas le récupérer. Conservez une copie non protégée du classeur, ou exportez les modules (.bas), dans un dossier sûr.
8

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.

Simulateur : déclarer et appeler une API

    
Résultat

Une erreur coûte cherUne déclaration fausse (mauvais type, argument manquant) peut faire planter Excel sans message. Enregistrez avant de tester et copiez les déclarations depuis une source fiable.
Sleep ou Application.Wait ?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é)

  1. Enregistrez le classeur en .xlsm. Insérez un module standard modCommandes et collez le code de la feuille « Code VBA » (déclaration de Sleep comprise, en tête de module).
  2. Collez la procédure Workbook_Open dans le module ThisWorkbook, enregistrez, fermez et rouvrez : le message d’accueil s’affiche.
  3. Exécutez CalculerCommandes pas à pas (F8) jusqu’à la ligne Bernard : notez le numéro de l’erreur interceptée.
  4. Ajoutez un onglet « A3I » avec un groupe « Commandes » et un bouton pour CalculerCommandes, avec l’icône de votre choix.
  5. Lancez la macro depuis le bouton : le message doit afficher un total de 7 070 € et 1 erreur. Testez aussi la macro Clignoter.
  6. Protégez le projet par un mot de passe, rouvrez le classeur pour vérifier, puis remplissez la feuille Contrôle.
A3iformations · Organisme certifié Qualiopi · Centre de passage TOSA Interface Excel Microsoft 365 en français