Bureautique & Productivité

Automatiser Excel avec les macros VBA — du code enregistré au code maintenable

8 min de lecture

Vous passez chaque vendredi deux heures à copier les ventes de la semaine, à recalculer la TVA, à mettre en forme le rapport et à l’envoyer par email. Une macro Excel peut faire ce travail en deux secondes, à votre place, indéfiniment. Cet article vous apprend à enregistrer votre première macro, à comprendre le code que VBA génère pour vous, puis à le modifier pour gérer les cas que l’enregistreur ne capture pas. Tous les exemples sont alignés sur les usages d’une PME ouest-africaine (TVA 18 %, FCFA, numérotation de factures), valables sur Excel 2019, 2021, 2024 et Microsoft 365.

1 — Une macro, c’est juste du code écrit pour vous

Quand vous enregistrez une macro, Excel observe ce que vous faites — clics, sélections, frappes — et écrit pour vous le programme VBA qui reproduit ces gestes. Vous n’avez pas besoin de savoir programmer pour démarrer : l’enregistreur fait le premier jet. Ce que vous gagnez à comprendre le code généré, c’est la possibilité de l’améliorer pour gérer des situations variables (un nombre de lignes différent chaque mois, par exemple).

VBA (Visual Basic for Applications) reste pleinement supporté en 2026 sur Excel, même dans la version Microsoft 365. À côté de VBA, Microsoft a introduit Office Scripts (en TypeScript) qui ne fonctionne qu’avec un abonnement Microsoft 365 Business et dans Excel pour le web. Pour une PME qui utilise Excel installé sur Windows et qui veut partager les macros sans dépendance cloud, VBA reste le bon choix.

2 — Activer l’onglet Développeur

Par défaut, l’onglet qui contient les outils de macro est masqué. On l’active une fois pour toute :

  1. Fichier > Options > Personnaliser le ruban.
  2. Dans la liste de droite, cocher « Développeur ».
  3. Valider.

Le nouvel onglet « Développeur » apparaît dans le ruban. C’est de là que vous accédez à l’enregistreur, à l’éditeur VBA (Alt+F11), et au panneau de sécurité des macros.

3 — Enregistrer sa première macro : un nettoyage de tableau

Imaginons un fichier de ventes hebdomadaires que vous recevez de votre caissier. Toutes les semaines, vous faites les mêmes manipulations : supprimer la première ligne (vide), mettre en gras les en-têtes, calculer la TVA, formater les montants en FCFA. On va automatiser ces gestes.

Procédure :

  1. Onglet Développeur > « Enregistrer une macro ».
  2. Nom : NettoyageVentes. Touche de raccourci facultative (par exemple Ctrl+Shift+N). Cliquer OK.
  3. Excel enregistre maintenant tout ce que vous faites. Effectuez vos manipulations habituelles.
  4. Quand c’est terminé, Onglet Développeur > « Arrêter l’enregistrement ».

La macro est créée. Pour la rejouer sur un nouveau fichier de la même structure, ouvrir le fichier et appuyer sur Ctrl+Shift+N (ou Onglet Développeur > Macros > Exécuter).

4 — Lire le code que VBA a écrit pour vous

Alt+F11 ouvre l’éditeur VBA. Dans le panneau « Modules », cliquer sur « Module1 » pour voir le code généré. Vous obtenez quelque chose comme :

Sub NettoyageVentes()
'
' NettoyageVentes Macro
' Raccourci clavier : Ctrl+Maj+N
'
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
    Range("A1:E1").Select
    Selection.Font.Bold = True
    Range("E2:E10").Select
    Selection.NumberFormat = "#,##0 ""FCFA"""
End Sub

Trois choses à noter :

  • Sub NettoyageVentes() ouvre une « subroutine » — un bloc d’instructions exécutables. End Sub ferme le bloc.
  • Les lignes commençant par une apostrophe sont des commentaires (ignorés à l’exécution).
  • Chaque action manuelle correspond à une ou deux lignes de code. Rows("1:1").Select sélectionne la ligne 1, puis Selection.Delete Shift:=xlUp la supprime en remontant les autres.

Le code généré par l’enregistreur fonctionne, mais il est verbeux. Vous pouvez l’améliorer pour qu’il soit plus rapide et plus robuste.

5 — Améliorer le code généré

Trois améliorations courantes pour passer d’un script enregistré à un script de qualité :

Éviter les Select inutiles

Excel n’a pas besoin de sélectionner une cellule avant de la modifier. Range("A1").Value = 100 fonctionne sans Select. Cela rend la macro plus rapide et moins sensible aux erreurs de focus.

Sub NettoyageVentes()
    Rows("1:1").Delete Shift:=xlUp
    Range("A1:E1").Font.Bold = True
    Range("E2:E10").NumberFormat = "#,##0 ""FCFA"""
End Sub

Désactiver l’affichage pendant l’exécution

Sur de gros fichiers, Excel met à jour l’écran à chaque modification, ce qui ralentit considérablement. On le désactive en début de macro et on le réactive à la fin.

Sub NettoyageVentes()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Rows("1:1").Delete Shift:=xlUp
    Range("A1:E1").Font.Bold = True
    Range("E2:E10").NumberFormat = "#,##0 ""FCFA"""

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub

Sur un fichier de 10 000 lignes, ces deux lignes peuvent diviser le temps d’exécution par 20.

Détecter automatiquement la dernière ligne

L’enregistreur a écrit E2:E10 en dur, parce qu’au moment de l’enregistrement vous aviez 10 lignes. Mais la semaine prochaine, vous aurez peut-être 47 lignes. On remplace la valeur fixe par une détection dynamique.

Sub NettoyageVentes()
    Application.ScreenUpdating = False

    Rows("1:1").Delete Shift:=xlUp
    Dim derniereLigne As Long
    derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row

    Range("A1:E1").Font.Bold = True
    Range("E2:E" & derniereLigne).NumberFormat = "#,##0 ""FCFA"""

    Application.ScreenUpdating = True
End Sub

L’expression Cells(Rows.Count, 1).End(xlUp).Row part du bas de la colonne A et remonte jusqu’à trouver la première cellule non vide — équivalent à Ctrl+↑ sur le clavier.

6 — Boucler sur des cellules

L’enregistreur ne sait pas faire des boucles. Pour traiter chaque ligne avec une condition, il faut écrire le code à la main. Exemple : ajouter la TVA 18 % uniquement aux lignes dont le montant HT dépasse 5 000 FCFA.

Sub CalculerTVA()
    Dim derniereLigne As Long, i As Long
    derniereLigne = Cells(Rows.Count, 5).End(xlUp).Row

    For i = 2 To derniereLigne
        If Cells(i, 5).Value > 5000 Then
            Cells(i, 6).Value = Cells(i, 5).Value * 0.18
            Cells(i, 7).Value = Cells(i, 5).Value * 1.18
        Else
            Cells(i, 6).Value = 0
            Cells(i, 7).Value = Cells(i, 5).Value
        End If
    Next i
End Sub

Le bloc For i = 2 To derniereLigne ... Next i répète l’opération sur chaque ligne de 2 jusqu’à la dernière. Cells(i, 5) est l’équivalent VBA de la cellule (ligne i, colonne 5 = E).

7 — Interagir avec l’utilisateur

Une macro peut afficher un message ou demander une saisie via MsgBox et InputBox.

Sub DemanderTaux()
    Dim taux As Double
    taux = InputBox("Quel taux de TVA appliquer (en %) ?", "Configuration", 18) / 100
    MsgBox "Taux configuré : " & taux * 100 & " %", vbInformation
End Sub

Cela rend la macro paramétrable sans modifier le code à chaque utilisation.

8 — Sauvegarder le classeur en .xlsm

Excel refuse de sauvegarder du code VBA dans un fichier .xlsx standard. Au premier enregistrement, choisir le format Classeur Excel prenant en charge les macros (.xlsm). Si vous voulez distribuer le fichier sans permettre la modification du code, choisir le format .xlsb (binaire) avec mot de passe sur le projet VBA (Outils > Propriétés du projet VBA > Protection).

9 — Affecter une macro à un bouton

Pour permettre à un utilisateur non technique de lancer la macro, ajouter un bouton dans la feuille :

  1. Onglet Développeur > Insérer > Contrôles de formulaire > Bouton (le premier).
  2. Dessiner le bouton sur la feuille.
  3. Excel propose immédiatement la liste des macros : choisir NettoyageVentes et valider.
  4. Clic droit > Modifier le texte pour renommer le bouton (« Nettoyer les ventes »).

Pour un bouton plus moderne, utiliser un contrôle ActiveX ou une forme à laquelle vous affectez la macro via clic droit > « Affecter une macro ». Attention : les contrôles ActiveX ne fonctionnent pas sur Excel pour Mac.

10 — Sécurité et bonnes pratiques

  • Activer les macros uniquement pour les fichiers de confiance. Excel bloque par défaut les macros provenant d’internet (mention « Marque du Web »). Décocher cette protection seulement après avoir lu le code de la macro.
  • Signer numériquement vos macros avec un certificat de signature de code (~50-150 USD/an). Le destinataire peut alors faire confiance à toutes vos macros automatiquement.
  • Tester sur une copie avant la production. Une macro qui supprime des lignes est définitive (même Ctrl+Z ne fonctionne pas toujours après une macro).
  • Versionner le code VBA dans Git en exportant les modules (File > Export File dans l’éditeur VBA). Permet d’historier les évolutions hors du fichier Excel.

11 — Erreurs fréquentes et leur cause

Symptôme Cause Solution
« Erreur de compilation : Sub ou Function non définie » Faute de frappe dans un nom Vérifier orthographe ; utiliser autocomplétion VBA (Ctrl+Espace)
« Erreur 1004 : Erreur définie par l’application » Plage inexistante ou feuille absente Vérifier le nom exact de la feuille avec Worksheets("Ventes")
Macro lente sur gros fichier ScreenUpdating et calcul automatique actifs Désactiver pendant l’exécution (étape 5)
« Erreur de variable non définie » Variable utilisée sans déclaration Ajouter Option Explicit en haut du module et déclarer chaque variable avec Dim
Bouton qui ne réagit plus Macro renommée mais pas le bouton Clic droit sur bouton > Affecter une macro > sélectionner le nouveau nom

12 — Quand préférer Office Scripts ou Power Automate

VBA est local et autonome. Trois cas où il devient préférable de migrer :

  • Vous travaillez surtout sur Excel pour le web (Microsoft 365 cloud) — VBA ne fonctionne pas, Office Scripts oui.
  • Vous voulez orchestrer plusieurs applications (Excel + Outlook + SharePoint + Teams) — Power Automate est plus adapté que des macros qui pilotent COM.
  • Vous voulez collaborer avec un développeur web — Office Scripts est en TypeScript, plus facile à versionner et à reviewer en pull request.

VBA reste la bonne option pour : fichiers Excel partagés en local sans cloud, automatisations purement Excel, cas où un installateur Office classique (pas Microsoft 365) est imposé.

Références

Service ITSkillsCenter

Application mobile Android et iOS

Création d'application mobile Android et iOS. À partir de 350 000 FCFA.

Démarrer mon projet
Publicité