Chapitre 4 · Expert · Leçon 23 / 26
VBA & Macros
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'imprimes, tu l'ouvres dans Excel, tu supprimes trois colonnes inutiles, tu formates le tableau, tu appliques un filtre, tu l'envoies par email au responsable. Vingt minutes de travail répétitif. Avec une macro, cette 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 comprendre quelques bases du VBA te permet de modifier les macros enregistrées et de les rendre vraiment puissantes.
D'abord, le gain de temps est immédiat. Une tâche de 20 minutes faite chaque lundi devient une exécution de 3 secondes. Sur une année, c'est plusieurs heures récupérées, et l'effet se cumule à chaque fichier que tu automatises.
Ensuite, la répétabilité est parfaite. Une macro fait exactement la même chose à chaque exécution, sans fatigue ni erreur d'inattention. C'est précisément ce que tu veux pour les rapports récurrents, là où une faute de manipulation passe facilement inaperçue.
Et tu n'as besoin d'aucune connaissance pour démarrer. L'enregistreur de macro capture tes actions sans la moindre ligne de code. Tu peux créer ta première macro utile en moins de 5 minutes, puis ouvrir le code généré pour comprendre ce qu'Excel a écrit à ta place.
Enfin, ta logique métier devient documentée. Une macro écrite en VBA est un code lisible que tu peux commenter ligne par ligne. Ton collègue peut reprendre ton travail et comprendre la logique, 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 emails 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 l'outil le plus sous-utilisé d'Excel. Il regarde tout ce que tu fais et traduit chaque action en code VBA. Pas besoin de savoir programmer.
Avant de commencer : activer l'onglet Développeur
L'onglet Développeur n'est pas visible par défaut. Pour l'afficher, fais un clic droit sur n'importe quel onglet du ruban, puis clique sur Personnaliser le ruban. Dans la liste de droite, coche Développeur et valide.
L'onglet Développeur apparaît maintenant dans ton ruban. Il regroupe tout ce dont tu as besoin : enregistreur de macro, éditeur VBA, boutons de formulaire. Tu n'auras à faire cette manipulation qu'une seule fois.
Étape 1 : lancer l'enregistreur
Dans l'onglet Développeur, clique sur Enregistrer une macro. Une boîte de dialogue s'ouvre. Tu dois renseigner :
- Nom de la macro : Sans espace ni caractère spécial. Par exemple : FormatRapportHebdo. Excel refuse les espaces dans les noms de macros.
- Touche de raccourci (optionnel) : Ctrl + une lettre pour déclencher ta macro au clavier. Évite les raccourcis courants comme Ctrl+C ou Ctrl+V.
- Enregistrer dans : Choisis "Ce classeur" pour l'instant. Plus tard, "Classeur de macros personnelles" te permettra d'utiliser la macro dans tous tes classeurs.
- Description (optionnel) : Une phrase qui explique ce que fait la macro. Utile quand tu auras 20 macros et que tu ne sais plus laquelle fait quoi.
Clique sur OK. L'enregistrement démarre immédiatement. Le bouton dans le ruban s'est transformé en Arrêter l'enregistrement et un petit carré apparaît dans la barre d'état en bas de l'écran.
Étape 2 : effectuer les actions à enregistrer
Maintenant, tout ce que tu fais dans Excel est enregistré. Fais un exemple concret : sélectionne les colonnes A à D, clique sur l'onglet Accueil, applique un fond vert clair sur l'en-tête, mets le texte en gras, applique un filtre automatique. Chaque clic, chaque sélection, chaque raccourci clavier est capturé et traduit en VBA.
Inutile d'aller vite, l'enregistreur ne mesure pas le temps. Il enregistre les actions, pas la durée.
Étape 3 : arrêter l'enregistrement
Quand tu as terminé tes actions, clique sur Arrêter l'enregistrement (l'onglet Développeur ou le carré dans la barre d'état). Ta macro est maintenant sauvegardée.
Rappel important : sauvegarde ton fichier au format .xlsm (Classeur Excel avec macros). Si tu enregistres en .xlsx, Excel te prévient qu'il va supprimer les macros. Clique Non pour conserver le format .xlsm.
Exécuter et modifier ta macro
Trois façons d'exécuter une macro
Via le menu Macros
Onglet Développeur > Macros. Sélectionne le nom de ta macro dans la liste et clique sur Exécuter. Cette méthode est utile pour tester et déboguer.
Via le raccourci clavier
Si tu as défini un raccourci à l'enregistrement (par exemple Ctrl+Maj+F), utilise-le directement. La macro s'exécute immédiatement.
Via un bouton dans la feuille
Onglet Développeur > Insérer > Bouton (contrôle de formulaire). Dessine le bouton sur ta feuille, assigne-lui ta macro, renomme-le. Un bouton visible est idéal pour partager le fichier avec des collègues qui ne connaissent pas VBA.
Modifier une macro : l'éditeur VBA (Alt+F11)
Appuie sur Alt+F11 pour ouvrir l'éditeur VBA (Visual Basic Editor, ou VBE). C'est l'environnement de développement intégré à Excel. Pas de panique face à l'interface sobre : elle est fonctionnelle et tu l'apprendras vite.
Dans le panneau gauche (Explorateur de projets), développe ton classeur. Tu vois les modules. Double-clique sur Module1 pour afficher le code de ta macro. Elle 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 peut sembler abscons au premier abord, mais il est lisible ligne par ligne. Sub FormatRapportHebdo() : début de la procédure. Rows("1:1").Select : sélectionne la ligne 1. End Sub : fin de la procédure.
Les commentaires (lignes qui commencent par une apostrophe ') sont ignorés par Excel. Tu peux en ajouter autant que tu veux pour documenter ton code.
Introduction au VBA : l'éditeur, les bases, les variables, les boucles
L'enregistreur te donne un point de départ. Le VBA te donne les outils pour aller au-delà de ce que tu peux enregistrer. La bonne nouvelle : les bases du VBA s'apprennent en quelques heures. Il suffit de connaître quelques concepts fondamentaux.
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. Cela force 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.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 SubQuelques techniques utilisées ici : Set ws = ThisWorkbook.Sheets("Données") crée une référence à la feuille pour ne pas répéter le nom à chaque ligne. Application.ScreenUpdating = False désactive l'affichage pendant l'exécution : la macro va 3 à 5 fois plus vite. On le remet à True à la fin.
Variante pour aller plus loin
Tu peux ajouter à cette macro une étape qui copie l'onglet récapitulatif dans un nouveau classeur, l'enregistre avec la date du jour dans le nom de fichier, et envoie un email Outlook en pièce jointe. Tout cela en VBA, en moins de 15 lignes supplémentaires.
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 et malwares qui se propagent par email utilisent souvent des macros VBA piégées dans des fichiers Word ou Excel. Il faut donc comprendre quand activer les macros et quand ne pas le faire.
Pourquoi le format .xlsm est obligatoire
Microsoft a introduit le format .xlsx (Open XML) en 2007 pour standardiser les fichiers Excel. Par conception, ce format ne peut pas contenir de code VBA : c'est une mesure de sécurité. Les macros sont stockées uniquement 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 :
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 avec le message « Les macros ont été désactivées » et un bouton « Activer le contenu ». Clique sur ce bouton uniquement si :
- Tu as créé le fichier toi-même.
- Tu l'as reçu d'un collègue de confiance dans ton entreprise.
- La source est un éditeur de logiciel que tu connais.
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.
Paramètre : Fichier > Options > Centre de gestion de la confidentialité > Paramètres du Centre de gestion de la confidentialité > Emplacements approuvés. Ajoute le chemin de ton dossier. Attention : n'ajoute jamais ton bureau ni ton dossier Téléchargements comme emplacement de confiance.
Enregistreur de macro vs écrire du VBA : quand utiliser quoi ?
Les deux approches sont complémentaires. L'enregistreur est rapide mais limité. VBA est puissant mais demande de l'apprentissage. Voici comment choisir selon ton 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 stratégie la plus efficace pour apprendre : utilise l'enregistreur pour capturer des actions, puis lis le code généré dans l'éditeur VBA. Tu vas rapidement reconnaître les patterns et comprendre comment les adapter. C'est comme lire un traducteur automatique pour apprendre une langue.
Astuce : le mode pas à pas
Dans l'éditeur VBA, appuie sur F8 pour exécuter le code ligne par ligne. Excel met en surbrillance la ligne en cours d'exécution. Idéal pour comprendre ce que fait chaque instruction et déboguer les erreurs.
Quand préférer Power Query aux macros ?
Power Query et les macros VBA semblent faire la même chose : automatiser du travail dans Excel. Mais ils répondent à des besoins différents. Choisir le bon outil te fait gagner du temps et évite des maintenances douloureuses.
Utilise Power Query si...
- Tu importes des données externes (CSV, bases de données, fichiers Excel, web scraping).
- Tu dois nettoyer des données de façon répétable (supprimer des doublons, fractionner des colonnes, pivoter ou dépivoter).
- Tu veux que la transformation soit visible et modifiable par quelqu'un sans connaissances en VBA.
- Tu consolides plusieurs fichiers d'un même dossier chaque mois.
- La logique est un pipeline de transformation linéaire (étape 1, puis étape 2, puis résultat).
Utilise les macros VBA si...
- Tu dois interagir avec d'autres applications (Outlook, Word, SharePoint, navigateur).
- Tu as besoin de logique conditionnelle complexe (calculs entre feuilles, alertes).
- Tu veux créer une interface utilisateur (boutons, formulaires, menus personnalisés).
- Tu traites des actions Excel pures (mise en forme, protection, gestion de feuilles).
- Ta tâche ne peut pas être décrite comme une transformation de données.
Dans la vraie vie, Power Query et les macros se complètent souvent : Power Query importe et nettoie les données, puis une macro formate et distribue le rapport final. Les deux outils ensemble couvrent 95 % 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 problèmes. Les connaître à l'avance t'évite des heures de débogage.
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.
Une règle générale pour éviter ces erreurs
Toujours tester ta macro sur un fichier de test avec 10 lignes avant de la lancer sur le vrai fichier avec 10 000 lignes. Les bugs sont rares sur les petits jeux de données et catastrophiques sur les grands.
Questions fréquentes sur les macros Excel et le VBA
Une macro est une série d'actions enregistrées (ou écrites en VBA) qu'Excel peut rejouer en un clic. Concrètement, tout ce que tu fais à la main dans Excel peut être automatisé avec une macro : formater un tableau, générer un rapport, envoyer des données vers une autre feuille.
Non pour commencer. L'enregistreur de macro capte tes actions sans écrire une seule ligne de code. En revanche, pour aller plus loin (boucles, conditions, boîtes de dialogue), les bases du VBA s'apprennent en quelques heures de pratique.
Une macro est le résultat : une séquence d'actions automatisées. VBA (Visual Basic for Applications) est le langage de programmation utilisé pour l'écrire. Quand tu utilises l'enregistreur, Excel génère du VBA à ta place. Tu peux ensuite lire et modifier ce code.
Le format .xlsx standard ne peut pas stocker de code VBA pour des raisons de sécurité. Dès que tu crées une macro, Excel te demande d'enregistrer en .xlsm (classeur Excel avec macros). Si tu enregistres en .xlsx, toutes tes macros sont supprimées.
Oui, avec des limites. Le VBA fonctionne sur Excel Mac mais certaines fonctions Windows (comme Shell pour lancer des programmes externes) ne sont pas disponibles. Les macros liées à l'interface Windows (boîtes de dialogue système, API Windows) peuvent planter. Tout le reste fonctionne normalement.
Power Query est fait pour importer, nettoyer et transformer des données de façon répétable. Les macros VBA sont faites pour tout le reste : automatiser des actions Excel, générer des rapports, interagir avec d'autres applications. Si ton besoin est uniquement de transformer un fichier CSV importé chaque semaine, Power Query est plus adapté et plus robuste.
N'active les macros que dans des fichiers que tu as créés toi-même ou reçus d'une source de confiance que tu connais. Pour les fichiers internes à ton entreprise, paramètre Excel pour activer les macros de sources de confiance (emplacements approuvés). Ne clique jamais sur « Activer le contenu » dans un fichier reçu par email d'un inconnu.
Tu veux maîtriser les macros avec des cas réels ?
Le Dojo Club te donne accès à des formations complètes sur les macros et le VBA, des exercices pratiques sur des données réelles et une communauté pour débloquer tes questions.
Rejoindre le Dojo