ITSkillsCenter
Bureautique & Productivité

VBA Excel : automatiser ses tâches répétitives

10 دقائق للقراءة
VBA Excel : automatiser ses tâches répétitives

Ce que vous saurez faire à la fin

  1. Installer et configurer VBA en 5 minutes
  2. Enregistrer, lire et modifier votre première macro
  3. Écrire du code propre avec Option Explicit, variables typées, gestion d’erreurs
  4. Automatiser la consolidation de 12 fichiers Excel en 1 clic
  5. Créer une UserForm simple pour rendre vos macros utilisables par des non-techniciens

Durée : 3 heures. Pré-requis : Excel 2019 ou Microsoft 365. Aucune connaissance VBA requise.

Étape 1 — Activer l’onglet Développeur

  1. Ouvrez Excel. Menu Fichier > Options > Personnaliser le ruban.
  2. Colonne de droite : cochez Développeur. OK.
  3. Vous voyez maintenant l’onglet Développeur entre Révision et Affichage.
  4. Raccourcis essentiels à mémoriser :
    • Alt+F11 : ouvrir/fermer l’éditeur VBA
    • F5 : exécuter la macro en cours d’édition
    • F8 : exécuter ligne par ligne (debug)
    • Ctrl+G : afficher la fenêtre Exécution (Immediate)
  5. Ouvrez l’éditeur VBA avec Alt+F11. Vous découvrez :
    • À gauche : l’Explorateur de projets (VBAProject et ses modules)
    • Au centre : la fenêtre de code
    • En bas à gauche : Propriétés
    • En bas à droite : Exécution

Étape 2 — Activer Option Explicit partout

Cette option force à déclarer toutes les variables : prévient 80 % des bugs typiques.

  1. Dans l’éditeur VBA : Outils > Options > Éditeur.
  2. Cochez Déclaration des variables obligatoires. OK.
  3. Tous les nouveaux modules commenceront par Option Explicit.
  4. Pour les modules existants : ajoutez manuellement Option Explicit à la toute première ligne.

Étape 3 — Enregistrer votre première macro

  1. Revenez sur Excel. Ouvrez un fichier de ventes simple (A1:F100 avec en-têtes).
  2. Onglet Développeur > Enregistrer une macro.
  3. Dialogue :
    • Nom de la macro : FormaterEntete (pas d’espaces)
    • Touche de raccourci : laissez vide
    • Enregistrer dans : Ce classeur
    • Description : « Formate l’en-tête en bleu, gras, blanc »
  4. OK. Excel enregistre TOUT ce que vous faites désormais.
  5. Actions à enregistrer :
    • Sélectionnez A1:F1 (la ligne d’en-tête)
    • Accueil > Gras (Ctrl+G)
    • Couleur du texte : blanc
    • Couleur de fond : bleu (4e bleu dans la palette)
    • Taille : 12
    • Alignement : centré
  6. Arrêter l’enregistrement (le bouton au même endroit qu’avant).

Étape 4 — Lire le code généré

  1. Alt+F11 pour ouvrir l’éditeur.
  2. Dans l’Explorateur de projets, dépliez VBAProject > Modules > Module1.
  3. Vous voyez votre code :
Sub FormaterEntete()
'
' FormaterEntete Macro
' Formate l'en-tête en bleu, gras, blanc
'
    Range("A1:F1").Select
    Selection.Font.Bold = True
    With Selection.Font
        .Color = -4210753
        .TintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .Color = 15773696
    End With
    Selection.Font.Size = 12
    With Selection
        .HorizontalAlignment = xlCenter
    End With
End Sub
  1. Test : positionnez le curseur dans la macro, appuyez F5. Excel exécute les étapes.
  2. Retour sur Excel : l’en-tête est formaté.

Étape 5 — Nettoyer le code généré

Le code enregistré est verbeux. On va le simplifier.

  1. Supprimez toutes les lignes .Select et Selection.xxx. Préférez manipuler directement les objets.
  2. Version nettoyée :
Option Explicit

Public Sub FormaterEntete()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Ventes")
    
    With ws.Range("A1:F1")
        .Font.Bold = True
        .Font.Color = vbWhite
        .Font.Size = 12
        .Interior.Color = RGB(30, 136, 229)   ' bleu ITSC
        .HorizontalAlignment = xlCenter
        .RowHeight = 24
    End With
End Sub
  1. Testez avec F5. Même résultat, code 3x plus court et plus lisible.

Étape 6 — Déclarer les variables avec le bon type

  1. Types courants à connaître :
    • Long : entier jusqu’à 2 milliards (numéros de ligne, compteurs)
    • Double : nombre décimal (montants, pourcentages)
    • String : texte
    • Boolean : Vrai/Faux
    • Date : date
    • Range : plage Excel
    • Worksheet, Workbook : objets Excel
  2. Exemple typé :
Option Explicit

Public Sub CalculerMoyennePonderee()
    Dim ws As Worksheet
    Dim derniere As Long
    Dim i As Long
    Dim caTotal As Double
    Dim margeTotal As Double
    Dim moyenne As Double
    
    Set ws = ThisWorkbook.Worksheets("Ventes")
    derniere = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    For i = 2 To derniere
        caTotal = caTotal + ws.Cells(i, 5).Value
        margeTotal = margeTotal + ws.Cells(i, 5).Value * ws.Cells(i, 6).Value
    Next i
    
    If caTotal > 0 Then
        moyenne = margeTotal / caTotal
        MsgBox "Marge pondérée: " & Format(moyenne, "0.00%"), vbInformation
    Else
        MsgBox "Aucune donnée", vbExclamation
    End If
End Sub
  1. Pourquoi typer ? Excel aide à l’auto-complétion (tape ws., liste des méthodes/propriétés), alerte sur les erreurs avant exécution, accélère le code de 10 à 50 %.

Étape 7 — Boucler sur les lignes

Structure For/Next la plus utilisée en VBA.

  1. Colorer en vert chaque CA > 1 000 000 :
Public Sub ColorierGrosCA()
    Dim ws As Worksheet
    Dim i As Long, derniere As Long
    
    Set ws = ThisWorkbook.Worksheets("Ventes")
    derniere = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    For i = 2 To derniere
        If ws.Cells(i, 5).Value > 1000000 Then
            ws.Cells(i, 5).Interior.Color = RGB(39, 174, 96)   ' vert
        End If
    Next i
End Sub
  1. Position du curseur dans la macro, F5. Toutes les cellules correspondantes deviennent vertes.
  2. Pour supprimer des lignes, parcourez de la fin vers le début :
Public Sub SupprimerLignesVides()
    Dim ws As Worksheet
    Dim i As Long, derniere As Long
    
    Set ws = ThisWorkbook.Worksheets("Ventes")
    derniere = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    For i = derniere To 2 Step -1
        If Application.WorksheetFunction.CountA(ws.Rows(i)) = 0 Then
            ws.Rows(i).Delete
        End If
    Next i
End Sub

Étape 8 — Gestion d’erreurs

  1. Structure type :
Public Sub ImporterFichier()
    On Error GoTo GestionErreur
    
    Application.ScreenUpdating = False
    
    ' ... code principal ...
    
    Application.ScreenUpdating = True
    Exit Sub
    
GestionErreur:
    Application.ScreenUpdating = True
    MsgBox "Erreur " & Err.Number & ": " & Err.Description, vbCritical
End Sub
  1. Toujours réactiver ScreenUpdating, Calculation, EnableEvents en cas d’erreur. Sinon l’utilisateur reste avec un Excel dans un état bizarre.

Étape 9 — Consolider 12 fichiers mensuels

L’exemple qui justifie d’apprendre VBA. 12 fichiers fournisseurs à fusionner, 1 clic.

  1. Placez vos 12 fichiers Ventes_2026_01.xlsx à Ventes_2026_12.xlsx dans C:\Rapports\Ventes\.
  2. Structure identique supposée : colonnes A à E, en-tête ligne 1.
  3. Code complet :
Public Sub ConsoliderVentes()
    On Error GoTo GestionErreur
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    Dim dossier As String
    dossier = "C:\Rapports\Ventes\"
    
    Dim wsCible As Worksheet
    Set wsCible = ThisWorkbook.Worksheets("Consolide")
    wsCible.Cells.Clear
    wsCible.Range("A1:F1").Value = Array("Date", "Client", "Region", "Produit", "CA", "Fichier")
    
    Dim fichier As String
    Dim wbSource As Workbook
    Dim ligneCible As Long
    ligneCible = 2
    
    fichier = Dir(dossier & "*.xlsx")
    Do While Len(fichier) > 0
        Set wbSource = Workbooks.Open(dossier & fichier, ReadOnly:=True)
        
        Dim derniere As Long
        derniere = wbSource.Worksheets(1).Cells(wbSource.Worksheets(1).Rows.Count, 1).End(xlUp).Row
        
        If derniere >= 2 Then
            Dim nbLignes As Long
            nbLignes = derniere - 1
            wbSource.Worksheets(1).Range("A2:E" & derniere).Copy _
                Destination:=wsCible.Cells(ligneCible, 1)
            wsCible.Range("F" & ligneCible & ":F" & ligneCible + nbLignes - 1).Value = fichier
            ligneCible = ligneCible + nbLignes
        End If
        
        wbSource.Close SaveChanges:=False
        fichier = Dir
    Loop
    
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    
    MsgBox (ligneCible - 2) & " lignes consolidées depuis 12 fichiers.", vbInformation
    Exit Sub
    
GestionErreur:
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    MsgBox "Erreur: " & Err.Description, vbCritical
End Sub
  1. Créez dans votre classeur une feuille Consolide.
  2. Insérez le code dans un module. F5.
  3. En 5-10 secondes, votre feuille Consolide contient les 12 fichiers fusionnés + le nom du fichier source.
  4. Testez : ajoutez le 13ᵉ fichier dans le dossier et relancez la macro. Il est automatiquement intégré.

Étape 10 — UserForm : interface graphique

  1. Dans l’éditeur VBA : menu Insertion > UserForm.
  2. Une fenêtre vide UserForm1 apparaît, ainsi qu’une Toolbox avec les contrôles.
  3. Renommez la UserForm : panneau Propriétés (F4) > Name : frmConsolider. Caption : « Consolidation Ventes ».
  4. Déposez sur la form :
    • Label : texte « Dossier source : »
    • TextBox : txtDossier, valeur par défaut C:\Rapports\Ventes\
    • CheckBox : chkInclureMontants, caption « Inclure colonnes calculées »
    • CommandButton : btnLancer, caption « Lancer »
    • Second bouton : btnAnnuler, caption « Annuler »
  5. Double-clic sur btnLancer. Code :
Private Sub btnLancer_Click()
    Dim dossier As String
    dossier = Me.txtDossier.Value
    
    If Len(Dir(dossier, vbDirectory)) = 0 Then
        MsgBox "Dossier introuvable", vbExclamation
        Exit Sub
    End If
    
    ' Lance la consolidation (appel Sub existante avec paramètres)
    Me.Hide
    ConsoliderVentes2 dossier, Me.chkInclureMontants.Value
    Unload Me
End Sub

Private Sub btnAnnuler_Click()
    Unload Me
End Sub
  1. Pour afficher la UserForm, ajoutez dans un module :
Public Sub AfficherUI()
    frmConsolider.Show
End Sub
  1. Sur Excel, créez un bouton : Développeur > Insérer > Bouton de formulaire. Affectez la macro AfficherUI.
  2. Clic utilisateur : l’interface s’ouvre, il choisit son dossier, coche les options, clique Lancer.

Étape 11 — Optimisations de performance

  1. Sur traitements > 1000 lignes :
Application.ScreenUpdating = False       ' n'affiche pas les mises à jour
Application.Calculation = xlCalculationManual  ' pas de recalcul à chaque ligne
Application.EnableEvents = False          ' n'exécute pas les événements Worksheet_Change
Application.DisplayAlerts = False         ' pas de popup confirmation
  1. Toujours réactiver à la fin, et dans le bloc GestionErreur.
  2. Lire/écrire en masse plutôt que cellule par cellule :
' Lent: boucle cellule par cellule
For i = 1 To 10000
    ws.Cells(i, 1).Value = ws.Cells(i, 1).Value * 1.18
Next i

' Rapide: lecture/écriture en bloc
Dim arr As Variant
arr = ws.Range("A1:A10000").Value
For i = 1 To UBound(arr, 1)
    arr(i, 1) = arr(i, 1) * 1.18
Next i
ws.Range("A1:A10000").Value = arr

Gain : 50 à 200× plus rapide sur de grosses plages.

Étape 12 — Déboguer efficacement

  1. Posez un point d’arrêt : clic dans la marge à gauche d’une ligne de code. Un point rouge apparaît.
  2. F5 : le code s’arrête au point d’arrêt.
  3. F8 : avance ligne par ligne.
  4. Survol d’une variable : affiche sa valeur courante.
  5. Fenêtre Variables locales (Affichage > Variables locales) : liste toutes les variables et leur valeur.
  6. Fenêtre Exécution (Ctrl+G) : tapez ? nomVariable pour afficher sa valeur, ou nomVariable = 42 pour forcer une valeur.
  7. Debug.Print dans le code : écrit un message dans la fenêtre Exécution sans bloquer l’exécution.

Étape 13 — Sauvegarder en .xlsm

  1. Un fichier Excel avec macros DOIT être enregistré en format .xlsm, pas .xlsx.
  2. Fichier > Enregistrer sous > choisir Classeur Excel (prenant en charge les macros) *.xlsm.
  3. Sinon, à la prochaine ouverture, Excel supprime silencieusement les macros.
  4. Les utilisateurs recevant un .xlsm voient un bandeau « Avertissement de sécurité – Les macros ont été désactivées ». Ils doivent cliquer « Activer le contenu ».
  5. Pour les déploiements en entreprise : signez la macro avec un certificat pour éviter cet avertissement.

Étape 14 — Distribuer comme .xlam (complément)

Si vos macros doivent être disponibles dans TOUS vos classeurs, packagez-les en add-in.

  1. Ouvrez un nouveau classeur vierge.
  2. Insérez vos macros réutilisables dans un module.
  3. Fichier > Enregistrer sous > Format Complément Excel (*.xlam).
  4. Sauvegardez à l’emplacement par défaut proposé (dossier Add-ins).
  5. Fichier > Options > Compléments > Atteindre (en bas) > cochez votre add-in. OK.
  6. Vos macros sont disponibles depuis n’importe quel classeur Excel, accessibles via Developer > Macros ou raccourci clavier.

Étape 15 — Bonnes pratiques professionnelles

  • Un module par thème : modFormatage, modImport, modReporting. Pas tout dans Module1.
  • Nommage clair des macros : ImporterFichiersVentes, pas Macro1.
  • Commentaires avant chaque Sub : rôle, paramètres, exemple d’appel.
  • Pas de chemin en dur : demander à l’utilisateur ou utiliser des variables configurables.
  • Tester sur des COPIES : les macros VBA peuvent modifier/supprimer des données sans retour en arrière.
  • Git pour versionner : exportez les modules .bas (clic droit dans l’explorateur VBA > Exporter un fichier), stockez-les dans un dépôt Git.
  • Documenter dans un README : première feuille du classeur avec liste des macros, raccourcis, auteur, date.

Checklist finale

✓ Onglet Développeur activé
✓ Option Explicit dans chaque module
✓ Variables typées explicitement (Long, String, Worksheet...)
✓ Gestion d'erreurs On Error GoTo dans chaque Sub publique
✓ ScreenUpdating/Calculation désactivés dans traitements longs
✓ Pas de .Select / Selection inutiles
✓ Lecture/écriture en tableau plutôt que cellule par cellule
✓ Fichier .xlsm pour préserver les macros
✓ Signature numérique si distribution externe
✓ Documentation : README + commentaires Sub
Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité