Automatiser Excel avec VBA : 10 macros simples qui font gagner un temps fou
VBA (Visual Basic for Applications) est le langage intégré à Excel depuis 30 ans. Méconnu des utilisateurs courants, il permet pourtant d'automatiser en quelques lignes des tâches qui prenaient des heures. Voici 10 macros prêtes à l'emploi, du nettoyage de données à l'envoi automatique d'emails, qui vont vous donner envie de vous y mettre.
💡 Pourquoi apprendre VBA en 2026 ?
Power Query et les nouvelles fonctions matricielles couvrent beaucoup de besoins qui demandaient autrefois du VBA. Faut-il pour autant l'abandonner ? Non, et voici pourquoi :
- Actions sur l'environnement : envoyer un email, renommer un fichier, ouvrir Outlook, créer un PDF — Power Query ne sait pas faire
- Logique conditionnelle complexe : VBA exprime des « si A alors B sinon C avec boucle sur D » plus naturellement
- Interaction avec l'utilisateur : boîtes de dialogue, validation, formulaires
- Compatibilité historique : VBA marche partout depuis Excel 97
- Performance : sur les manipulations massives, VBA bien écrit reste très rapide
À retenir : VBA n'est plus l'outil universel d'automatisation Excel. Mais sur les 20 % de cas que Power Query ne couvre pas, il reste imbattable.
⚙️ Comment activer et accéder à VBA
- Activez l'onglet Développeur : Fichier → Options → Personnaliser le ruban → cochez « Développeur »
- Onglet Développeur → Visual Basic (ou Alt + F11)
- L'éditeur VBE s'ouvre. Insertion → Module pour créer un module standard
- Copiez/collez le code, puis F5 pour exécuter
Pour conserver les macros, enregistrez le fichier au format .xlsm (avec macros). Le format .xlsx ne les conserve pas.
🔧 Macro 1 — Nettoyer une colonne de données importées
Supprime les espaces, normalise la casse, retire les caractères spéciaux.
Sub NettoyerColonne()
Dim cel As Range
Dim colonne As Range
Set colonne = Selection
Application.ScreenUpdating = False
For Each cel In colonne
If Not IsEmpty(cel) Then
cel.Value = Application.WorksheetFunction.Trim(cel.Value)
cel.Value = Application.WorksheetFunction.Proper(cel.Value)
End If
Next cel
Application.ScreenUpdating = True
MsgBox colonne.Count & " cellules nettoyées."
End Sub
Usage : sélectionnez votre colonne, lancez la macro. Espaces parasites supprimés, première lettre de chaque mot en majuscule.
🔧 Macro 2 — Sauvegarder une feuille en PDF d'un clic
Sub ExporterPDF()
Dim chemin As String
chemin = ThisWorkbook.Path & "\Export_" & Format(Now, "yyyy-mm-dd") & ".pdf"
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=chemin, _
Quality:=xlQualityStandard, _
OpenAfterPublish:=True
MsgBox "PDF généré : " & chemin
End Sub
Usage : un clic, votre feuille active est exportée en PDF horodaté dans le même dossier que le classeur, puis le PDF s'ouvre.
🔧 Macro 3 — Envoyer un email via Outlook avec le PDF en pièce jointe
Sub EnvoyerEmail()
Dim OutlookApp As Object, OutlookMail As Object
Dim chemin As String
' Générer le PDF
chemin = ThisWorkbook.Path & "\Rapport_" & Format(Now, "yyyy-mm-dd") & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin
' Préparer l'email
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = "destinataire@example.com"
.Subject = "Rapport hebdomadaire " & Format(Now, "dd/mm/yyyy")
.Body = "Bonjour," & vbNewLine & vbNewLine & _
"Veuillez trouver ci-joint le rapport de la semaine." & vbNewLine & vbNewLine & _
"Cordialement"
.Attachments.Add chemin
.Display ' Utilisez .Send pour envoyer directement
End With
End Sub
Usage : génère le rapport PDF, prépare un brouillon d'email Outlook. À adapter selon vos destinataires.
🔧 Macro 4 — Renommer en masse les fichiers d'un dossier
Sub RenommerFichiers()
Dim chemin As String, fichier As String, nouveau As String
Dim compteur As Integer
chemin = "C:\Users\Documents\AFichiers\"
fichier = Dir(chemin & "*.xlsx")
compteur = 1
Do While fichier <> ""
nouveau = "Export_" & Format(compteur, "000") & ".xlsx"
Name chemin & fichier As chemin & nouveau
compteur = compteur + 1
fichier = Dir
Loop
MsgBox compteur - 1 & " fichiers renommés."
End Sub
Usage : renomme tous les .xlsx d'un dossier en « Export_001.xlsx », « Export_002.xlsx », etc. Modifiez le chemin et le pattern selon votre besoin. Pratique pour normaliser des fichiers issus de scans, photos, etc.
🔧 Macro 5 — Fusionner plusieurs feuilles en une seule
Sub FusionnerFeuilles()
Dim feuilleSource As Worksheet, feuilleDest As Worksheet
Dim derniereLigne As Long, ligneDest As Long
' Créer la feuille de destination
On Error Resume Next
Application.DisplayAlerts = False
ThisWorkbook.Sheets("Consolide").Delete
Application.DisplayAlerts = True
On Error GoTo 0
Set feuilleDest = ThisWorkbook.Sheets.Add
feuilleDest.Name = "Consolide"
ligneDest = 1
' Boucler sur toutes les feuilles sauf Consolide
For Each feuilleSource In ThisWorkbook.Sheets
If feuilleSource.Name <> "Consolide" Then
derniereLigne = feuilleSource.Cells(feuilleSource.Rows.Count, 1).End(xlUp).Row
feuilleSource.Range("A1:Z" & derniereLigne).Copy _
Destination:=feuilleDest.Cells(ligneDest, 1)
ligneDest = ligneDest + derniereLigne
End If
Next feuilleSource
MsgBox "Fusion terminée."
End Sub
Usage : Fusionne toutes les feuilles du classeur dans une nouvelle feuille « Consolide ». Pratique pour les fichiers où chaque feuille = un mois ou une région.
🔧 Macro 6 — Créer un bouton qui lance une macro
Pour rendre vos macros accessibles aux non-techniciens :
- Onglet Développeur → Insérer → Bouton (contrôle de formulaire)
- Dessinez le bouton sur la feuille
- Excel demande quelle macro associer → sélectionnez votre macro
- Clic droit sur le bouton → Modifier le texte pour changer le libellé
Désormais, vos utilisateurs cliquent sur « Exporter PDF » sans avoir à connaître VBA.
🔧 Macro 7 — Insérer la signature de l'utilisateur
Sub InsererSignature()
Dim cel As Range
Set cel = ActiveCell
cel.Value = Environ("USERNAME") & " — " & Format(Now, "dd/mm/yyyy hh:mm")
End Sub
Usage : insère dans la cellule active votre identifiant Windows + la date/heure. Pratique pour les workflows de validation où chaque action doit être horodatée.
🔧 Macro 8 — Supprimer toutes les lignes vides d'une plage
Sub SupprimerLignesVides()
Dim derniereLigne As Long, i As Long
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For i = derniereLigne To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then
Rows(i).Delete
End If
Next i
Application.ScreenUpdating = True
MsgBox "Lignes vides supprimées."
End Sub
Usage : nettoie un tableau qui contient des lignes vides éparpillées (typique des copier-coller multiples).
🔧 Macro 9 — Sauvegarder le fichier avec horodatage
Sub SauvegardeHoraire()
Dim chemin As String, nom As String
nom = Replace(ThisWorkbook.Name, ".xlsx", "")
nom = Replace(nom, ".xlsm", "")
chemin = ThisWorkbook.Path & "\Backups\"
' Créer le dossier Backups s'il n'existe pas
If Dir(chemin, vbDirectory) = "" Then MkDir chemin
chemin = chemin & nom & "_" & Format(Now, "yyyy-mm-dd_hh-nn") & ".xlsx"
ThisWorkbook.SaveCopyAs chemin
MsgBox "Sauvegarde créée : " & chemin
End Sub
Usage : crée une copie horodatée du fichier dans un sous-dossier Backups. À programmer en automatique au moment de l'ouverture du fichier.
🔧 Macro 10 — Mettre en forme automatiquement un rapport
Sub MiseEnFormeRapport()
Dim derniereLigne As Long, derniereColonne As Long
Dim plage As Range
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
derniereColonne = Cells(1, Columns.Count).End(xlToLeft).Column
Set plage = Range(Cells(1, 1), Cells(derniereLigne, derniereColonne))
' Bordures
plage.Borders.LineStyle = xlContinuous
plage.Borders.Weight = xlThin
' Entête en gras + fond vert
With Rows(1)
.Font.Bold = True
.Font.Color = RGB(255, 255, 255)
.Interior.Color = RGB(33, 115, 70)
End With
' Largeurs auto
plage.EntireColumn.AutoFit
' Figer la première ligne
ActiveWindow.SplitRow = 1
ActiveWindow.FreezePanes = True
End Sub
Usage : Applique en un clic une mise en forme professionnelle (bordures, entête, largeurs ajustées, figeage). Gain de 5 minutes à chaque nouveau rapport.
✅ Bonnes pratiques VBA
Toujours désactiver l'affichage pendant l'exécution
Application.ScreenUpdating = False en début, True en fin. Accélère par 5 à 10× les macros qui modifient massivement la feuille.
Désactiver les recalculs automatiques sur les gros traitements
Application.Calculation = xlCalculationManual
' ... votre code ...
Application.Calculation = xlCalculationAutomatic
Ne jamais utiliser Select/Activate
Manipulez directement les objets. Range("A1").Value = "X" au lieu de Range("A1").Select : Selection.Value = "X".
Toujours gérer les erreurs
On Error Resume Next
' ... code risqué ...
On Error GoTo 0
Sinon, une erreur plante l'utilisateur sans explication.
Commenter ses macros
Une ligne de commentaire (' Ce code fait X) au-dessus de chaque section. Pour vous et vos successeurs.
Préférer les références par nom plutôt que par cellule
Si la structure du fichier change, les macros par référence absolue cassent.
🔒 Sécurité : ce qu'il faut savoir
VBA peut potentiellement exécuter du code malveillant. C'est pour ça qu'Excel demande de « Activer les macros » à l'ouverture des fichiers .xlsm. Quelques règles :
- N'activez jamais les macros d'un fichier reçu d'un inconnu
- Inspectez le code avant d'activer (Alt + F11)
- Signez vos macros pour les distributions internes (certificat d'éditeur)
- Sauvegardez avant de lancer une macro qui modifie
❓ FAQ : VBA Excel
VBA va-t-il être abandonné par Microsoft ?
Réponse : non à court ou moyen terme. Microsoft a annoncé Office Scripts (TypeScript) comme alternative pour Excel Online, mais VBA reste maintenu pour les versions desktop.
Faut-il apprendre VBA ou Office Scripts ?
Réponse : VBA si vous êtes sur Excel desktop, Office Scripts si vous êtes sur Excel Online / Microsoft 365 enrichi. Pour l'instant, VBA reste plus mûr et plus universellement supporté.
Comment partager une macro avec mon équipe ?
Réponse : enregistrez le fichier en .xlsm et envoyez-le. Ou créez un complément (.xlam) qui ajoute les macros à tous les Excel de votre équipe.
Combien de temps pour devenir productif en VBA ?
Réponse : 10 à 20 heures pour faire des macros simples comme celles ci-dessus. 100 heures pour des applications complexes avec interfaces utilisateurs.
L'enregistreur de macro est-il utile ?
Réponse : oui, comme point de départ pour comprendre le code généré. Mais le code produit est verbeux et inefficace. À nettoyer avant production.
Peut-on déboguer pas à pas une macro ?
Réponse : oui. Placez le curseur dans la macro, F8 pour avancer ligne par ligne. F9 pour placer un point d'arrêt.
Une macro VBA marche-t-elle sur Mac ?
Réponse : oui pour la plupart des macros simples. Mais les interactions avec d'autres logiciels (Outlook, navigateur, système de fichiers) ont des différences. Testez impérativement.
Les macros ralentissent-elles Excel ?
Réponse : les macros bien écrites sont rapides. Les mal écrites (avec Select, sans ScreenUpdating False) peuvent prendre des minutes là où il faudrait des secondes.
🏁 Conclusion
VBA n'est plus l'outil unique d'automatisation Excel, mais il garde un domaine de pertinence très large : tout ce qui touche à l'environnement (fichiers, emails, autres applications), aux interactions utilisateur et aux logiques conditionnelles complexes. Les 10 macros ci-dessus couvrent 80 % des cas d'usage quotidiens d'un utilisateur intermédiaire.
Commencez par les copier dans votre fichier, exécutez-les, modifiez-les. Le meilleur apprentissage en VBA, c'est l'expérimentation. Une fois que vous avez gagné 2 heures sur une tâche récurrente grâce à une macro, vous êtes accroché — et vous deviendrez naturellement le « collègue qui connaît VBA » dans votre équipe.