Créer une macro Excel : guide complet pour automatiser vos tâches habituelles
Vous répétez chaque semaine les mêmes actions dans Excel : mettre en forme un tableau, supprimer des lignes vides, filtrer des données, créer un export ou préparer un reporting ? Une macro peut s’en charger à votre place en quelques secondes.
Une macro Excel est une série d’instructions enregistrées ou écrites en VBA, le langage de programmation intégré à Excel. Pas besoin d’être développeur pour commencer : l’enregistreur de macros permet déjà d’automatiser de nombreuses tâches courantes. Ensuite, avec quelques notions de VBA, vous pourrez personnaliser vos automatisations et créer de véritables petits outils.
Dans ce guide, nous allons voir comment créer une macro Excel, l’exécuter, la modifier et éviter les erreurs les plus fréquentes. L’objectif : vous faire gagner du temps sans transformer votre classeur en usine à gaz.
Avant de commencer : afficher l’onglet Développeur
L’onglet Développeur contient les principales commandes liées aux macros, au VBA et aux contrôles de formulaire. Il n’est généralement pas visible par défaut dans Excel.
Pour l’afficher :
- Cliquez sur Fichier, puis sur Options.
- Ouvrez la rubrique Personnaliser le ruban.
- Dans la liste située à droite, cochez Développeur.
- Validez avec OK.
Un nouvel onglet apparaît alors dans le ruban. Vous y trouverez notamment les boutons Visual Basic, Enregistrer une macro et Macros.
Petit conseil avant de vous lancer : travaillez sur une copie de votre fichier. Une macro mal conçue peut modifier ou supprimer des données très rapidement. C’est pratique… sauf lorsque les mauvaises lignes sont supprimées.
Créer une première macro avec l’enregistreur
L’enregistreur de macros est la manière la plus simple de créer une macro. Excel observe vos actions et génère automatiquement le code VBA correspondant.
Prenons un exemple concret. Vous recevez chaque jour un tableau de ventes et souhaitez appliquer automatiquement une mise en forme basique :
- mettre les en-têtes en gras ;
- ajouter une couleur de fond ;
- ajuster la largeur des colonnes ;
- ajouter des bordures au tableau.
Pour enregistrer cette série d’actions :
- Allez dans l’onglet Développeur.
- Cliquez sur Enregistrer une macro.
- Donnez-lui un nom, par exemple MettreEnFormeTableau.
- Choisissez éventuellement un raccourci clavier.
- Indiquez où enregistrer la macro.
- Cliquez sur OK, puis effectuez vos actions dans Excel.
- Lorsque vous avez terminé, cliquez sur Arrêter l’enregistrement.
Pour le nom de la macro, évitez les espaces et les caractères spéciaux. Préférez MettreEnFormeTableau à Mise en forme du tableau !. Cette règle peut sembler stricte, mais elle vous évitera des erreurs lorsque vous commencerez à modifier le code.
Où enregistrer une macro ?
Lors de l’enregistrement, Excel vous propose généralement trois emplacements :
- Ce classeur : la macro sera disponible uniquement dans le fichier actuel.
- Nouveau classeur : Excel créera un nouveau fichier contenant la macro.
- Classeur de macros personnelles : la macro sera accessible dans tous vos classeurs Excel.
Pour une macro liée à un fichier précis, choisissez Ce classeur. Par exemple, une macro qui prépare un reporting mensuel n’a pas forcément besoin d’être disponible partout.
Le classeur de macros personnelles, souvent appelé PERSONAL.XLSB, est intéressant pour les outils génériques. Vous pourriez y stocker une macro qui ajuste automatiquement les colonnes, supprime les lignes vides ou convertit une plage en tableau.
Enregistrer le fichier au bon format
Un classeur contenant du VBA ne doit pas être enregistré au format Excel classique .xlsx. Ce format ne conserve pas les macros.
Utilisez plutôt le format :
- Classeur Excel prenant en charge les macros :
.xlsm; - Classeur binaire Excel :
.xlsb, dans certains cas particuliers.
Lorsque vous enregistrez un fichier contenant une macro au format .xlsx, Excel affiche un avertissement. Prenez-le au sérieux : si vous confirmez sans changer le format, votre code VBA sera supprimé.
Découvrir le code VBA généré
Après l’enregistrement, cliquez sur Visual Basic dans l’onglet Développeur. L’éditeur VBA s’ouvre. Dans la partie gauche, vous verrez votre classeur et un dossier nommé Modules. Ouvrez le module contenant votre macro.
Le code ressemble généralement à ceci :
Sub MettreEnFormeTableau() Range("A1:D1").Select Selection.Font.Bold = True Selection.Interior.Color = RGB(221, 235, 247) Columns("A:D").AutoFit Range("A1:D20").Borders.LineStyle = xlContinuousEnd Sub
Une procédure VBA commence par Sub et se termine par End Sub. Le nom de la macro se trouve entre les deux.
L’enregistreur fonctionne, mais il produit souvent du code un peu lourd. Les commandes Select et Selection sont très fréquentes dans les macros enregistrées. Elles indiquent à Excel de sélectionner une cellule ou une plage avant d’agir dessus.
Pour rendre le code plus fiable, on peut généralement éviter les sélections :
Sub MettreEnFormeTableau() With Range("A1:D1") .Font.Bold = True .Interior.Color = RGB(221, 235, 247) End With Columns("A:D").AutoFit Range("A1:D20").Borders.LineStyle = xlContinuousEnd Sub
Le bloc With permet d’appliquer plusieurs instructions au même objet sans répéter son nom. Le code devient plus lisible et s’exécute souvent plus proprement.
Écrire une macro simple à la main
Vous pouvez aussi créer une macro directement dans l’éditeur VBA. Dans le menu Insertion, cliquez sur Module, puis saisissez votre code.
Voici une macro qui efface le contenu de la colonne D à partir de la ligne 2 :
Sub EffacerColonneD() Range("D2:D" & Cells(Rows.Count, "D").End(xlUp).Row).ClearContentsEnd Sub
Cette instruction est plus souple qu’une plage fixe comme D2:D500. Elle repère la dernière cellule remplie de la colonne D et efface uniquement la zone utilisée.
Pour lancer la macro, plusieurs possibilités existent :
- placez le curseur dans la procédure, puis appuyez sur F5 dans l’éditeur VBA ;
- ouvrez l’onglet Développeur, cliquez sur Macros, sélectionnez la macro et cliquez sur Exécuter ;
- associez la macro à un bouton ou à une forme directement dans la feuille.
Créer un bouton pour exécuter une macro
Un bouton rend votre automatisation beaucoup plus accessible. Au lieu de demander aux utilisateurs d’ouvrir la liste des macros, vous leur donnez une commande claire : Actualiser le reporting, Nettoyer les données ou Générer l’export.
Pour ajouter un bouton :
- ouvrez l’onglet Développeur ;
- cliquez sur Insérer ;
- choisissez le bouton dans la section Contrôles de formulaire ;
- dessinez le bouton sur la feuille ;
- sélectionnez la macro à associer ;
- modifiez le texte du bouton si nécessaire.
Les contrôles de formulaire sont souvent suffisants pour commencer. Les contrôles ActiveX offrent davantage d’options, mais ils sont aussi plus sensibles aux problèmes de compatibilité et de sécurité. Pour un simple bouton d’action, inutile de sortir l’artillerie lourde.
Exemple pratique : nettoyer automatiquement un tableau
Imaginons une feuille nommée Import contenant des données copiées depuis un logiciel externe. Vous souhaitez supprimer les lignes vides, ajuster les colonnes et mettre en évidence les en-têtes.
Sub NettoyerImport() Dim ws As Worksheet Dim derniereLigne As Long Dim derniereColonne As Long Set ws = Worksheets("Import") derniereLigne = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row derniereColonne = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column ws.Rows(1).Font.Bold = True ws.Rows(1).Interior.Color = RGB(217, 225, 242) ws.Range(ws.Cells(1, 1), ws.Cells(derniereLigne, derniereColonne)).AutoFilter ws.Columns.AutoFitEnd Sub
Cette macro utilise des variables pour rendre le code adaptable. La dernière ligne et la dernière colonne sont détectées automatiquement. Vous pouvez donc importer 50 lignes aujourd’hui et 5 000 demain sans modifier la plage manuellement.
Dim sert à déclarer une variable. Set permet d’associer une variable à un objet, ici la feuille Import. Prendre l’habitude de déclarer ses variables rend le code plus clair et facilite le débogage.
Ajouter une confirmation avant une action importante
Une macro qui supprime des données devrait rarement se lancer sans avertissement. La fonction MsgBox permet d’afficher une boîte de dialogue et de demander une confirmation.
Sub SupprimerDonnees() Dim reponse As VbMsgBoxResult reponse = MsgBox("Voulez-vous vraiment supprimer les données ?", _ vbYesNo + vbQuestion, _ "Confirmation") If reponse = vbYes Then Range("A2:D1000").ClearContents MsgBox "Les données ont été supprimées.", vbInformation Else MsgBox "Action annulée.", vbInformation End IfEnd Sub
Cette petite précaution peut éviter bien des sueurs froides. Elle est particulièrement utile pour les macros qui suppriment, remplacent ou écrasent des informations.
Les erreurs fréquentes avec les macros Excel
Les premières difficultés sont souvent faciles à corriger. Voici les plus courantes :
- La macro n’apparaît pas : vérifiez que le fichier est enregistré au format
.xlsmet que le code se trouve bien dans un module standard. - Excel bloque les macros : le fichier peut provenir d’Internet ou d’une pièce jointe. Consultez les paramètres de sécurité et n’activez le contenu que si vous faites confiance à la source.
- La macro agit sur la mauvaise feuille : utilisez une référence explicite comme
Worksheets("Import").Range("A1")plutôt queRange("A1"). - Une erreur apparaît sur une plage : vérifiez les noms de feuilles, les références de cellules et les variables utilisées.
- Les résultats changent selon la feuille active : évitez autant que possible
ActiveSheet,ActiveCelletSelection.
Pour identifier une erreur, Excel met en évidence la ligne concernée dans l’éditeur VBA. Vous pouvez également exécuter le code pas à pas avec la touche F8. Cette méthode permet de suivre chaque instruction et de comprendre ce que fait réellement la macro.
Accélérer une macro volumineuse
Lorsque votre macro traite plusieurs milliers de lignes, Excel peut ralentir, voire donner l’impression d’être bloqué. Dans ce cas, vous pouvez désactiver temporairement l’actualisation de l’écran et le recalcul automatique :
Sub TraitementRapide() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual ' Vos instructions de traitement ici Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = TrueEnd Sub
ScreenUpdating évite qu’Excel redessine l’écran après chaque instruction. Le traitement est généralement plus rapide, surtout lorsque la macro modifie de nombreuses cellules.
Attention : pensez toujours à réactiver les options à la fin de la macro. Si vous les laissez désactivées, Excel peut sembler fonctionner étrangement ensuite. Pour une macro plus robuste, prévoyez également une gestion d’erreur afin de restaurer ces paramètres même si un problème survient.
Quelques bonnes pratiques pour un VBA fiable
- Donnez des noms explicites à vos macros et à vos variables.
- Ajoutez des commentaires pour expliquer les étapes importantes.
- Évitez les sélections inutiles et préférez les références directes.
- Testez votre macro sur une copie du fichier.
- Ajoutez une confirmation avant toute suppression ou modification massive.
- Utilisez des plages dynamiques lorsque le nombre de lignes varie.
- Enregistrez régulièrement plusieurs versions de votre classeur.
- Ajoutez
Option Expliciten haut de vos modules pour obliger la déclaration des variables.
La ligne Option Explicit mérite une attention particulière. Elle permet de détecter les fautes de frappe dans les noms de variables. Sans elle, VBA peut créer automatiquement une nouvelle variable à cause d’une simple erreur de saisie. Avec elle, Excel vous avertit immédiatement. Ce n’est pas spectaculaire, mais c’est le genre de détail qui évite une heure de recherche.
Penser à la sécurité des macros
Une macro peut modifier des fichiers, supprimer des données et exécuter des actions sur votre ordinateur. N’activez donc jamais les macros d’un fichier reçu d’une source inconnue.
Pour partager un fichier macro, expliquez clairement son fonctionnement et indiquez les actions qu’il réalise. Évitez également de distribuer un classeur contenant des informations sensibles ou du code dont vous ne maîtrisez pas le contenu.
Dans un environnement professionnel, les paramètres de sécurité peuvent être gérés par le service informatique. Si les macros sont bloquées, il ne s’agit pas forcément d’un dysfonctionnement : c’est parfois une règle de protection normale.
Automatiser, mais garder le contrôle
Créer une macro Excel ne consiste pas uniquement à enregistrer quelques clics. Une bonne automatisation doit être compréhensible, testée et adaptée à la façon dont le fichier évolue.
Commencez par une tâche répétitive et bien définie. Automatisez ensuite une étape à la fois. Une macro qui met en forme un tableau ou prépare un export est un excellent premier projet. Une fois à l’aise, vous pourrez explorer les boucles, les conditions, les formulaires et les interactions avec plusieurs feuilles.
Le plus important est de partir d’un besoin concret. Si vous répétez chaque lundi une opération de dix minutes, cela représente plus de huit heures par an. Une macro bien pensée peut récupérer ce temps en quelques clics. Et contrairement au café, elle ne demande pas de pause entre deux tableaux.