Ce que vous saurez faire à la fin
- Installer et configurer VBA en 5 minutes
- Enregistrer, lire et modifier votre première macro
- Écrire du code propre avec Option Explicit, variables typées, gestion d’erreurs
- Automatiser la consolidation de 12 fichiers Excel en 1 clic
- 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
- Ouvrez Excel. Menu Fichier > Options > Personnaliser le ruban.
- Colonne de droite : cochez Développeur. OK.
- Vous voyez maintenant l’onglet Développeur entre Révision et Affichage.
- Raccourcis essentiels à mémoriser :
Alt+F11: ouvrir/fermer l’éditeur VBAF5: exécuter la macro en cours d’éditionF8: exécuter ligne par ligne (debug)Ctrl+G: afficher la fenêtre Exécution (Immediate)
- 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.
- Dans l’éditeur VBA : Outils > Options > Éditeur.
- Cochez Déclaration des variables obligatoires. OK.
- Tous les nouveaux modules commenceront par
Option Explicit. - Pour les modules existants : ajoutez manuellement
Option Explicità la toute première ligne.
Étape 3 — Enregistrer votre première macro
- Revenez sur Excel. Ouvrez un fichier de ventes simple (A1:F100 avec en-têtes).
- Onglet Développeur > Enregistrer une macro.
- 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 »
- Nom de la macro :
- OK. Excel enregistre TOUT ce que vous faites désormais.
- 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é
- Arrêter l’enregistrement (le bouton au même endroit qu’avant).
Étape 4 — Lire le code généré
Alt+F11pour ouvrir l’éditeur.- Dans l’Explorateur de projets, dépliez VBAProject > Modules > Module1.
- 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
- Test : positionnez le curseur dans la macro, appuyez
F5. Excel exécute les étapes. - 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.
- Supprimez toutes les lignes
.SelectetSelection.xxx. Préférez manipuler directement les objets. - 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
- Testez avec
F5. Même résultat, code 3x plus court et plus lisible.
Étape 6 — Déclarer les variables avec le bon type
- Types courants à connaître :
Long: entier jusqu’à 2 milliards (numéros de ligne, compteurs)Double: nombre décimal (montants, pourcentages)String: texteBoolean: Vrai/FauxDate: dateRange: plage ExcelWorksheet,Workbook: objets Excel
- 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
- 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.
- 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
- Position du curseur dans la macro,
F5. Toutes les cellules correspondantes deviennent vertes. - 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
- 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
- Toujours réactiver
ScreenUpdating,Calculation,EnableEventsen 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.
- Placez vos 12 fichiers
Ventes_2026_01.xlsxàVentes_2026_12.xlsxdansC:\Rapports\Ventes\. - Structure identique supposée : colonnes A à E, en-tête ligne 1.
- 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
- Créez dans votre classeur une feuille Consolide.
- Insérez le code dans un module. F5.
- En 5-10 secondes, votre feuille Consolide contient les 12 fichiers fusionnés + le nom du fichier source.
- Testez : ajoutez le 13ᵉ fichier dans le dossier et relancez la macro. Il est automatiquement intégré.
Étape 10 — UserForm : interface graphique
- Dans l’éditeur VBA : menu Insertion > UserForm.
- Une fenêtre vide
UserForm1apparaît, ainsi qu’une Toolbox avec les contrôles. - Renommez la UserForm : panneau Propriétés (F4) > Name :
frmConsolider. Caption : « Consolidation Ventes ». - Déposez sur la form :
- Label : texte « Dossier source : »
- TextBox :
txtDossier, valeur par défautC:\Rapports\Ventes\ - CheckBox :
chkInclureMontants, caption « Inclure colonnes calculées » - CommandButton :
btnLancer, caption « Lancer » - Second bouton :
btnAnnuler, caption « Annuler »
- 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
- Pour afficher la UserForm, ajoutez dans un module :
Public Sub AfficherUI()
frmConsolider.Show
End Sub
- Sur Excel, créez un bouton : Développeur > Insérer > Bouton de formulaire. Affectez la macro
AfficherUI. - Clic utilisateur : l’interface s’ouvre, il choisit son dossier, coche les options, clique Lancer.
Étape 11 — Optimisations de performance
- 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
- Toujours réactiver à la fin, et dans le bloc GestionErreur.
- 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
- Posez un point d’arrêt : clic dans la marge à gauche d’une ligne de code. Un point rouge apparaît.
- F5 : le code s’arrête au point d’arrêt.
- F8 : avance ligne par ligne.
- Survol d’une variable : affiche sa valeur courante.
- Fenêtre Variables locales (Affichage > Variables locales) : liste toutes les variables et leur valeur.
- Fenêtre Exécution (Ctrl+G) : tapez
? nomVariablepour afficher sa valeur, ounomVariable = 42pour forcer une valeur. Debug.Printdans le code : écrit un message dans la fenêtre Exécution sans bloquer l’exécution.
Étape 13 — Sauvegarder en .xlsm
- Un fichier Excel avec macros DOIT être enregistré en format
.xlsm, pas.xlsx. - Fichier > Enregistrer sous > choisir Classeur Excel (prenant en charge les macros) *.xlsm.
- Sinon, à la prochaine ouverture, Excel supprime silencieusement les macros.
- 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 ».
- 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.
- Ouvrez un nouveau classeur vierge.
- Insérez vos macros réutilisables dans un module.
- Fichier > Enregistrer sous > Format Complément Excel (*.xlam).
- Sauvegardez à l’emplacement par défaut proposé (dossier Add-ins).
- Fichier > Options > Compléments > Atteindre (en bas) > cochez votre add-in. OK.
- Vos macros sont disponibles depuis n’importe quel classeur Excel, accessibles via
Developer > Macrosou raccourci clavier.
Étape 15 — Bonnes pratiques professionnelles
- Un module par thème : modFormatage, modImport, modReporting. Pas tout dans Module1.
- Nommage clair des macros :
ImporterFichiersVentes, pasMacro1. - 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