Chapitre 4 · Expert · Leçon 20 / 22
Macros VBA
C'est quoi une macro Excel, et pourquoi en créer une ?
Une macro Excel est une séquence d'actions automatisées : au lieu de cliquer sur les mêmes boutons dans le même ordre chaque semaine, tu enregistres cette séquence une seule fois et Excel la rejoue à la demande.
Le cas d'usage classique : tu reçois chaque lundi un export CSV de ton outil de gestion, tu l'ouvres dans Excel, tu supprimes trois colonnes inutiles, tu formates le tableau, tu appliques un filtre et tu l'envoies par e-mail au responsable. Vingt minutes de travail répétitif. Avec une macro, cette même séquence prend 4 secondes.
Les macros sont écrites en VBA (Visual Basic for Applications), le langage de programmation intégré à toute la suite Office. Tu n'as pas besoin de connaître VBA pour créer ta première macro utile grâce à l'enregistreur, mais en comprendre quelques bases te permet de modifier les macros enregistrées et de les rendre vraiment puissantes.
Le gain de temps est immédiat : une tâche de 20 minutes faite chaque lundi devient une exécution de 3 secondes, et l'effet se cumule à chaque fichier que tu automatises, si bien que sur une année tu récupères plusieurs heures. La répétabilité est parfaite, parce qu'une macro fait exactement la même chose à chaque exécution sans fatigue ni erreur d'inattention, là où une faute de manipulation dans un rapport récurrent passe facilement inaperçue.
Pour démarrer, tu n'as besoin d'aucune connaissance : l'enregistreur de macro capture tes actions sans la moindre ligne de code, et tu peux créer ta première macro utile en moins de 5 minutes, puis ouvrir le code généré pour voir ce qu'Excel a écrit à ta place. Et une fois que tu passes au VBA, ta logique métier devient documentée : ton collègue peut reprendre ton travail et comprendre la logique ligne par ligne, au lieu de redécouvrir une suite de clics dans ta tête.
Concrètement, les macros Excel s'utilisent pour générer des rapports récurrents, formater automatiquement des imports de données, envoyer des e-mails depuis Excel, consolider plusieurs fichiers, créer des interfaces simples avec des boutons et valider des données avant envoi. Presque tout ce que tu fais manuellement peut être automatisé.
Les macros Excel en vidéo
Voir une macro se construire en direct, c'est souvent plus parlant que de le lire. Cette vidéo montre comment créer une macro Excel de A à Z.
Enregistrer ta première macro Excel pas à pas
L'enregistreur de macro est sans doute l'outil le plus sous-utilisé d'Excel, alors qu'il fait tout le travail à ta place : il regarde ce que tu fais et traduit chaque action en code VBA, sans que tu aies la moindre ligne à écrire.
Une seule chose à régler avant de te lancer, c'est l'onglet qui héberge l'outil.
Affiche d'abord l'onglet DéveloppeurIl n'est pas visible par défaut, mais tu ne le débloques qu'une fois. Fais un clic droit sur n'importe quel onglet du ruban, choisis Personnaliser le ruban, coche Développeur dans la liste de droite et valide. L'onglet apparaît aussitôt et regroupe tout ce dont tu auras besoin, à savoir l'enregistreur de macro, l'éditeur VBA et les boutons de formulaire.

Une fois l'onglet en place, la création d'une macro tient en trois temps que tu vas répéter à chaque fois.
Lance l’enregistreur
Dans l'onglet Développeur, clique sur Enregistrer une macro. Une boîte de dialogue s'ouvre et te demande quatre choses, dont deux seulement comptent vraiment au début. Le nom ne tolère ni espace ni caractère spécial, donc tape par exemple FormatRapportHebdo. La touche de raccourci reste optionnelle, Ctrl + une lettre pour déclencher la macro au clavier, en évitant les classiques déjà pris comme Ctrl+C. Pour Enregistrer dans, garde « Ce classeur » pour l'instant, le « Classeur de macros personnelles » viendra plus tard quand tu voudras la macro partout. La description enfin t'aidera à t'y retrouver le jour où tu en auras vingt.
Clique sur OK et l'enregistrement démarre aussitôt, le bouton du ruban devient Arrêter l'enregistrement et un petit carré s'allume dans la barre d'état en bas de l'écran.
Effectue tes actions normalement
Tout ce que tu fais est désormais capté. Prends un cas concret pour t'entraîner, sélectionne les colonnes A à D, applique un fond vert clair sur l'en-tête, mets le texte en gras, puis pose un filtre automatique. Chaque clic, chaque sélection, chaque raccourci se retrouve traduit en VBA.
Inutile d'aller vite, l'enregistreur ne mesure pas le temps, seulement les actions, donc prends-les dans l'ordre et sans te précipiter.
Arrête l’enregistrement et enregistre en .xlsm
Quand tu as terminé, clique sur Arrêter l'enregistrement, depuis l'onglet Développeur ou via le carré de la barre d'état, et ta macro est sauvegardée. Pense alors à enregistrer le fichier au format .xlsm (classeur Excel avec macros), parce qu'un classeur Excel standard ne sait pas stocker de code. Si Excel te propose le format sans macros, réponds Non pour rester en .xlsm et garder ton travail.

Exécuter et modifier ta macro
Une macro enregistrée ne sert à rien tant que tu ne sais pas la relancer à volonté, puis l'ajuster quand le besoin évolue.
La bonne nouvelle, c'est qu'Excel te laisse plusieurs portes d'entrée pour la déclencher, de la plus technique à la plus accessible, et qu'une fois la macro lancée tu peux toujours rouvrir son code pour le retoucher.
Par le menu Macros, pour testerVa dans Développeur > Macros , sélectionne ta macro dans la liste et clique sur Exécuter. C'est la voie idéale pendant la mise au point, quand tu lances la macro plusieurs fois de suite pour vérifier qu'elle se comporte comme prévu.

Par le raccourci clavier, pour la vitesseSi tu as associé une combinaison à l'enregistrement, comme Ctrl+Maj+F, elle déclenche la macro sur-le-champ. C'est le réflexe pour les macros que tu utilises tous les jours, sans jamais quitter ton clavier.
Par un bouton sur la feuille, pour partagerDans Développeur > Insérer > Bouton (contrôle de formulaire), dessine un bouton sur ta feuille, assigne-lui ta macro et renomme-le clairement. Un bouton visible est parfait quand tu transmets le fichier à des collègues qui ne connaissent rien au VBA, car ils n'ont plus qu'à cliquer.

Pour modifier une macro, ouvre l’éditeur VBA avec Alt+F11Ce raccourci ouvre le Visual Basic Editor (le VBE), l'environnement de développement intégré à Excel. L'interface est sobre mais tu t'y repères vite. Dans le panneau de gauche, l'Explorateur de projets, développe ton classeur pour voir tes modules, puis double-clique sur Module1 pour afficher le code de ta macro. Il ressemble à ceci.

Sub FormatRapportHebdo()
'
' FormatRapportHebdo Macro
' Formate l'en-tête du rapport hebdomadaire
'
Rows("1:1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 13434828
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Font
.Bold = True
.Size = 12
End With
Selection.AutoFilter
End SubCe code paraît abscons au premier abord, et pourtant il se lit ligne par ligne. La ligne Sub FormatRapportHebdo() ouvre la procédure, Rows("1:1").Select sélectionne la première ligne, le bloc With applique la couleur et le gras d'un coup, et End Sub referme le tout.
Les lignes qui commencent par une apostrophe ' sont des commentaires, ignorés par Excel à l'exécution. N'hésite pas à en ajouter autant que tu veux pour expliquer ce que fait chaque bloc, c'est ce qui rend une macro maintenable des mois plus tard.
Introduction au VBA : l'éditeur, les bases, les variables, les boucles
L'enregistreur te donne un point de départ, tandis que le VBA te donne les moyens d'aller bien au-delà de ce qu'on peut seulement enregistrer.
La bonne nouvelle, c'est que les bases s'apprennent en quelques heures, puisqu'il suffit de maîtriser une poignée de concepts fondamentaux que tu retrouveras ensuite dans toutes tes macros.
La structure d'une Sub
En VBA, une procédure s'appelle une Sub (pour Subroutine). Elle commence par Sub NomDeLaProcedure() et se termine par End Sub. Tout le code entre ces deux lignes s'exécute dans l'ordre, ligne par ligne.
Sub DireBonjour()
MsgBox "Bonjour depuis Excel !"
End SubMsgBox affiche une boîte de dialogue avec un message. C'est la façon la plus simple de communiquer avec l'utilisateur. Place ce code dans un module, appuie sur F5 (ou Exécuter > Exécuter Sub), et la boîte apparaît.
Les variables : stocker des valeurs temporairement
Une variable est une boîte nommée qui stocke une valeur pendant l'exécution de la macro. Tu la déclares avec Dim, tu lui assignes une valeur avec =.
Sub ExempleVariables()
Dim prenom As String
Dim age As Integer
Dim chiffreAffaires As Double
prenom = "Marie"
age = 32
chiffreAffaires = 47850.50
MsgBox prenom & " a " & age & " ans. CA : " & chiffreAffaires & " €"
End SubLes types de variables courants en VBA : String pour du texte, Integer pour des entiers (-32768 à 32767), Long pour les grands entiers, Double pour les décimaux, Boolean pour Vrai/Faux, Date pour les dates.
Option Explicit en haut de chaque module pour forcer Excel à signaler les variables non déclarées. Sans cette ligne, les fautes de frappe dans les noms de variables passent inaperçues et créent des bugs silencieux, très pénibles à retrouver.Les conditions avec If...Then...Else
VBA suit une logique conditionnelle similaire à la fonction SI d'Excel, mais en plusieurs lignes et avec plus de possibilités.
Sub EvaluerNote()
Dim note As Integer
note = Range("B2").Value ' Lit la valeur de la cellule B2
If note >= 90 Then
Range("C2").Value = "Excellent"
ElseIf note >= 70 Then
Range("C2").Value = "Bien"
ElseIf note >= 50 Then
Range("C2").Value = "Passable"
Else
Range("C2").Value = "Insuffisant"
End If
End SubCette macro lit la valeur de la cellule B2, la compare à des seuils et écrit un libellé correspondant en C2. Range("B2").Value est la façon de lire une cellule en VBA. Range("C2").Value = "texte" écrit dans une cellule.
Les boucles : répéter une action sur plusieurs lignes
C'est là que le VBA devient vraiment puissant. Au lieu d'appliquer une action sur chaque ligne manuellement, tu demandes à VBA de parcourir toutes les lignes automatiquement. La boucle For...Next est la plus utilisée.
Sub ColorigerLignesSuperieures()
Dim i As Long
Dim derniereLigne As Long
' Trouve la dernière ligne avec des données en colonne A
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To derniereLigne ' Commence à 2 pour ignorer l'en-tête
If Cells(i, 2).Value > 1000 Then ' Si la colonne B > 1000
Rows(i).Interior.Color = RGB(198, 239, 206) ' Fond vert clair
Else
Rows(i).Interior.ColorIndex = xlNone ' Supprime la couleur
End If
Next i
MsgBox "Mise en forme terminée. " & (derniereLigne - 1) & " lignes traitées."
End SubDécryptage : Cells(Rows.Count, 1).End(xlUp).Row est l'équivalent VBA de Ctrl+Fin : il trouve la dernière ligne non vide de la colonne A. La boucle For i = 2 To derniereLigne parcourt chaque ligne de la ligne 2 jusqu'à la dernière. Cells(i, 2).Value lit la valeur de la cellule en ligne i, colonne 2 (colonne B).
Ce pattern (trouver la dernière ligne + boucle For) est le plus répété en VBA. Tu peux l'adapter à presque tous tes besoins : calculer, formater, filtrer, déplacer des données ligne par ligne.
Un exemple d'automatisation réel : le rapport hebdomadaire
Voici un exemple concret qui combine tout ce qu'on vient de voir. Imagine que tu travailles en contrôle de gestion et que tu reçois chaque lundi un export des ventes de la semaine. Ton travail : nettoyer le fichier, calculer les totaux par région, colorier les lignes hors objectif, puis exporter un onglet récapitulatif.
Sans macro, ce travail prend 25 minutes. Avec la macro ci-dessous, 8 secondes.
Sub TraiterRapportVentes()
Dim ws As Worksheet
Dim derniereLigne As Long
Dim i As Long
Dim totalVentes As Double
' Référence à la feuille "Données"
Set ws = ThisWorkbook.Sheets("Données")
' Désactive le rafraîchissement écran pour aller plus vite
Application.ScreenUpdating = False
' Trouve la dernière ligne
derniereLigne = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' Parcourt chaque ligne de données (sans l'en-tête)
For i = 2 To derniereLigne
' Calcule le total (quantité × prix unitaire)
ws.Cells(i, 5).Value = ws.Cells(i, 3).Value * ws.Cells(i, 4).Value
' Colorie en rouge si le total est inférieur à l'objectif
If ws.Cells(i, 5).Value < ws.Cells(i, 6).Value Then
ws.Rows(i).Interior.Color = RGB(255, 199, 199) ' Rouge clair
Else
ws.Rows(i).Interior.ColorIndex = xlNone
End If
Next i
' Recalcule toutes les formules
Application.Calculate
' Réactive le rafraîchissement écran
Application.ScreenUpdating = True
MsgBox "Rapport traité. " & (derniereLigne - 1) & " lignes analysées.", _
vbInformation, "Traitement terminé"
End SubDeux techniques méritent qu'on s'y arrête. La ligne Set ws = ThisWorkbook.Sheets("Données") crée une référence à la feuille pour ne pas répéter son nom à chaque appel, ce qui allège tout le reste du code. Et Application.ScreenUpdating = False gèle l'affichage le temps de l'exécution, si bien que la macro tourne 3 à 5 fois plus vite, avant qu'on le repasse à True à la toute fin.
Sécurité des macros : .xlsm, activer les macros, les risques réels
Les macros sont bloquées par défaut dans Excel, et c'est une mesure de sécurité légitime : les ransomwares qui se propagent par e-mail utilisent souvent des macros VBA piégées dans des fichiers Word ou Excel, d'où l'importance de comprendre quand activer les macros et quand ne pas le faire.
Pourquoi le format .xlsm est obligatoire
Microsoft a introduit le format Open XML (.xlsx) en 2007 pour standardiser les fichiers Excel, et par conception ce format ne peut pas contenir de code VBA. C'est une mesure de sécurité assumée, si bien que les macros ne se stockent que dans les formats .xlsm (classeur avec macros) et .xlsb (format binaire).
Si tu partages un .xlsm avec quelqu'un qui l'enregistre en .xlsx, les macros sont définitivement supprimées. Pour éviter ça, tu peux ajouter en début de macro un test qui vérifie le format du fichier et avertit l'utilisateur le cas échéant :
Sub VerifierFormatFichier()
If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
MsgBox "Attention : ce fichier n'est pas au format .xlsm." & Chr(10) & _
"Les macros ne seront pas disponibles après la prochaine sauvegarde.", _
vbExclamation, "Format de fichier incorrect"
End If
End SubActiver les macros de façon sécurisée
Quand tu ouvres un fichier .xlsm, Excel affiche une barre jaune sous le ruban, « Les macros ont été désactivées », avec un bouton « Activer le contenu ». Ne clique sur ce bouton que dans trois cas, à savoir un fichier que tu as créé toi-même, un fichier reçu d'un collègue de confiance dans ton entreprise, ou un fichier qui vient d'un éditeur de logiciel que tu connais. Dans le moindre doute, garde les macros désactivées, tu ne perds rien à pouvoir lire le fichier sans les exécuter.
Régler le niveau de sécurité
Pour choisir toi-même comment Excel traite les macros à l'ouverture, va dans Développeur > Sécurité des macros (ou Fichier > Options > Centre de gestion de la confidentialité). La boîte s'ouvre sur « Paramètres des macros » : le réglage recommandé est « Désactiver les macros VBA avec notification », qui bloque les macros par défaut tout en affichant la barre jaune pour les activer au cas par cas.

Les emplacements de confiance
Si tu travailles souvent avec des fichiers Excel à macros dans un dossier spécifique (par exemple un dossier partagé réseau de ton entreprise), tu peux définir ce dossier comme emplacement de confiance. Les fichiers de ce dossier s'ouvrent sans avertissement macro.
Règle-le dans Fichier > Options > Centre de gestion de la confidentialité > Paramètres du Centre de gestion de la confidentialité > Emplacements approuvés, où tu ajoutes le chemin de ton dossier. Attention tout de même, n'ajoute jamais ton bureau ni ton dossier Téléchargements comme emplacement de confiance, sinon n'importe quel fichier piégé qui y atterrit s'exécuterait sans le moindre avertissement.
Enregistreur de macro vs écrire du VBA : quand utiliser quoi ?
Les deux approches sont complémentaires : l'enregistreur est rapide mais limité, tandis que le VBA est puissant mais demande un peu d'apprentissage. Voici comment choisir selon le besoin.
| Besoin | Enregistreur | VBA manuel |
|---|---|---|
| Formater un tableau (couleurs, police, bordures) | ✅ Idéal | ⚠️ Surdimensionné |
| Appliquer les mêmes filtres / tris | ✅ Suffisant | ⚠️ Surdimensionné |
| Traiter un nombre variable de lignes | ❌ Références fixes | ✅ Obligatoire |
| Condition sur valeur (si > seuil, alors...) | ❌ Impossible | ✅ Obligatoire |
| Boucle sur des milliers de lignes | ❌ Impossible | ✅ Obligatoire |
| Boîte de dialogue utilisateur (InputBox) | ❌ Impossible | ✅ Nécessaire |
| Interagir avec Outlook ou Word | ⚠️ Partiel | ✅ Recommandé |
| Protéger / déprotéger des feuilles | ✅ Possible | ✅ Plus flexible |
La façon la plus efficace d'apprendre consiste justement à marier les deux, en capturant tes actions avec l'enregistreur, puis en allant lire le code généré dans l'éditeur VBA. Tu repères vite les motifs qui reviennent et tu comprends comment les adapter, un peu comme on lit un traducteur automatique pour apprendre une langue, sans encore l'écrire mais en commençant à la décoder.
Quand préférer Power Query aux macros ?
Power Query et les macros VBA donnent l'impression de faire la même chose, automatiser du travail dans Excel, alors qu'ils répondent en réalité à des besoins assez différents.
Choisir le bon outil dès le départ te fait gagner du temps et t'épargne, des mois plus tard, ces maintenances pénibles où l'on bricole un outil pour lui faire faire ce qui n'est pas son rôle.
Penche pour Power Query quand tu transformes des donnéesC'est l'outil tout indiqué dès que tu importes des sources externes (un CSV, une base de données, d'autres classeurs), que tu les nettoies de façon répétable en supprimant des doublons ou en dépivotant des colonnes, ou que tu consolides chaque mois plusieurs fichiers d'un même dossier. Il brille aussi quand la logique se résume à un pipeline d'étapes successives, et que tu veux que cette transformation reste visible et modifiable par quelqu'un qui ne connaît rien au VBA.
Penche pour les macros VBA quand tu pilotes ExcelElles deviennent indispensables dès que tu dois dialoguer avec d'autres applications comme Outlook ou Word, construire une interface avec des boutons et des formulaires, ou tenir une logique conditionnelle riche qui croise des feuilles et déclenche des alertes. Plus largement, tout ce qui relève d'actions Excel pures, mise en forme, protection, gestion des feuilles, et tout ce qui ne se décrit pas comme une simple transformation de données, est du ressort du VBA.
Dans la vraie vie, les deux se complètent plus qu'ils ne s'opposent, Power Query important et nettoyant les données en amont, puis une macro formatant et distribuant le rapport final. Ensemble, ils couvrent l'immense majorité des besoins d'automatisation Excel d'un professionnel.
Les 5 erreurs les plus fréquentes avec les macros Excel
Chaque débutant en macros rencontre les mêmes écueils, et les connaître à l'avance t'évite des heures de débogage inutile.
Enregistrer en .xlsx et perdre ses macros
Excel te prévient, mais on clique vite sur « Oui » par habitude. Résultat : toutes tes macros sont effacées. Toujours enregistrer en .xlsm dès qu'un classeur contient des macros.
Références absolues au lieu de relatives
L'enregistreur utilise par défaut des références absolues (cellule B2 fixe). Si tu veux que la macro fonctionne quelle que soit la cellule de départ, active « Utiliser les références relatives » avant d'enregistrer.
Macro liée à un classeur spécifique
Par défaut, une macro enregistrée n'est disponible que dans le classeur dans lequel elle a été créée. Pour l'utiliser partout, enregistre-la dans le « Classeur de macros personnelles ».
Ne pas tester sur des données de test
Une macro qui supprime des lignes ou modifie des données agit directement, sans corbeille. Toujours tester sur une copie du fichier, jamais sur les données d'origine.
Oublier de gérer les erreurs en VBA
Si une macro trouve une plage vide ou un nom de feuille incorrect, elle plante sans explication utile. Utilise On Error GoTo pour capturer les erreurs et afficher un message clair à l'utilisateur.
Tu sais maintenant enregistrer une macro, lire le VBA qu'Excel génère et le retoucher pour automatiser tes tâches répétitives.
Reste un cas où une macro n'est pas le meilleur outil, celui où tout ton travail consiste à importer, nettoyer et combiner des données. C'est précisément le terrain de la prochaine leçon sur Power Query, où tu rejoues des transformations complètes d'un simple clic, sans écrire une ligne de code.









