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

  1. Activez l'onglet Développeur : Fichier → Options → Personnaliser le ruban → cochez « Développeur »
  2. Onglet Développeur → Visual Basic (ou Alt + F11)
  3. L'éditeur VBE s'ouvre. Insertion → Module pour créer un module standard
  4. 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 :

  1. Onglet Développeur → Insérer → Bouton (contrôle de formulaire)
  2. Dessinez le bouton sur la feuille
  3. Excel demande quelle macro associer → sélectionnez votre macro
  4. 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.

Power Query : 10 automatisations Catalogue des formules