Qu’est-ce qu’une macro Excel ?
Une macro est un programme qui execute automatiquement une serie d’actions dans Excel. Au lieu de repeter les memes 15 clics chaque jour (formater un rapport, trier des donnees, copier des resultats), vous enregistrez la sequence une fois et la rejouez en un clic.
Les macros utilisent le langage VBA (Visual Basic for Applications), integre dans Excel. Vous n’avez pas besoin d’etre programmeur — l’enregistreur de macros fait le code pour vous. Mais comprendre les bases du VBA vous permettra de personnaliser et rendre vos automatisations bien plus puissantes.
Activer l’onglet Developpeur
Par defaut, l’onglet Developpeur est masque. Pour l’activer :
- Fichier → Options → Personnaliser le ruban
- Dans la colonne de droite, cochez « Developpeur »
- Cliquez OK
L’onglet Developpeur apparait dans le ruban avec les outils : Visual Basic, Macros, Enregistrer une macro, Securite des macros.
Format de fichier : Les fichiers .xlsx ne peuvent pas contenir de macros. Sauvegardez en .xlsm (Classeur Excel prenant en charge les macros).
Methode 1 : Enregistrer une macro sans coder
L’enregistreur de macros capture chaque action que vous faites et la convertit en code VBA :
- Onglet Developpeur → « Enregistrer une macro »
- Donnez un nom (sans espaces ni accents) : ex. FormatRapport
- Optionnel : assignez un raccourci clavier (ex: Ctrl+Shift+R)
- Stocker dans : « Ce classeur » (le plus courant) ou « Classeur de macros personnelles » (disponible partout)
- Cliquez OK — l’enregistrement commence
- Effectuez vos actions normalement (formatage, tri, copie…)
- Cliquez « Arreter l’enregistrement »
Exemple — Macro « FormatRapport » :
- Selectionnez A1:H1 (en-tetes)
- Mettez en gras, fond bleu fonce #1A5276, texte blanc
- Selectionnez tout le tableau (Ctrl+Shift+End)
- Ajoutez des bordures (toutes les bordures)
- Ajustez la largeur des colonnes
- Format nombre FCFA sur les colonnes montant : # ##0 « FCFA »
- Arretez l’enregistrement
Desormais, chaque fois que vous importez un nouveau rapport, un Ctrl+Shift+R formate tout instantanement.
Executer une macro
4 facons de lancer une macro :
| Methode | Comment | Ideal pour |
|---|---|---|
| Raccourci clavier | Le raccourci assigne (ex: Ctrl+Shift+R) | Macros frequentes |
| Menu Macros | Developpeur → Macros → selectionner → Executer | Acceder a toutes vos macros |
| Bouton dans la feuille | Insertion → Formes → dessinez un rectangle → clic droit → Affecter une macro | Dashboard avec boutons d’action |
| Icone dans le ruban | Fichier → Options → Barre d’outils Acces rapide → Macros → Ajouter | Macros universelles |
Introduction au VBA : comprendre le code
Appuyez sur Alt+F11 pour ouvrir l’editeur VBA. Votre macro enregistree ressemble a ceci :
Sub FormatRapport()
Range("A1:H1").Select
Selection.Font.Bold = True
Selection.Interior.Color = RGB(26, 82, 118)
Selection.Font.Color = RGB(255, 255, 255)
Range("A1").CurrentRegion.Select
Selection.Borders.LineStyle = xlContinuous
Cells.EntireColumn.AutoFit
End Sub
Vocabulaire VBA essentiel :
| Terme | Signification | Exemple |
|---|---|---|
| Sub…End Sub | Debut et fin d’une macro | Sub MaMacro() … End Sub |
| Range(« A1 ») | Designe une cellule ou plage | Range(« A1:D10 ») |
| Cells(ligne, colonne) | Designe une cellule par position | Cells(1, 1) = cellule A1 |
| .Value | La valeur d’une cellule | Range(« A1 »).Value = « Bonjour » |
| .Font.Bold | Mise en gras | Range(« A1 »).Font.Bold = True |
| .Interior.Color | Couleur de fond | .Interior.Color = RGB(0,0,255) |
| ActiveSheet | La feuille active | ActiveSheet.Name = « Rapport » |
| MsgBox | Afficher un message | MsgBox « Termine ! » |
10 macros utiles pretes a copier
1. Supprimer les lignes vides :
Sub SupprimerLignesVides()
Dim derniereLigne As Long
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
Dim i As Long
For i = derniereLigne To 1 Step -1
If Application.CountA(Rows(i)) = 0 Then
Rows(i).Delete
End If
Next i
MsgBox "Lignes vides supprimees !"
End Sub
2. Proteger toutes les feuilles d’un coup :
Sub ProtegerToutesFeuilles()
Dim ws As Worksheet
Dim mdp As String
mdp = InputBox("Entrez le mot de passe :")
For Each ws In ActiveWorkbook.Worksheets
ws.Protect Password:=mdp
Next ws
MsgBox "Toutes les feuilles sont protegees."
End Sub
3. Exporter chaque feuille en PDF separe :
Sub ExporterFeuillesEnPDF()
Dim ws As Worksheet
Dim chemin As String
chemin = ActiveWorkbook.Path & "\"
For Each ws In ActiveWorkbook.Worksheets
ws.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=chemin & ws.Name & ".pdf"
Next ws
MsgBox "Export PDF termine dans " & chemin
End Sub
4. Envoyer un email de relance automatique (via Outlook) :
Sub EnvoyerRelance()
Dim OutApp As Object
Dim OutMail As Object
Dim i As Long
Set OutApp = CreateObject("Outlook.Application")
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 9).Value = "En retard" Then
Set OutMail = OutApp.CreateItem(0)
OutMail.To = Cells(i, 10).Value
OutMail.Subject = "Relance facture " & Cells(i, 7).Value
OutMail.Body = "Bonjour " & Cells(i, 2).Value & "," & vbCrLf & _
"La facture " & Cells(i, 7).Value & " reste impayee." & vbCrLf & _
"Merci de proceder au reglement."
OutMail.Display
End If
Next i
End Sub
5. Horodater automatiquement une modification :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Application.EnableEvents = False
Target.Offset(0, 5).Value = Now
Application.EnableEvents = True
End If
End Sub
Placez ce code dans le module de la FEUILLE (clic droit sur l’onglet → Visualiser le code). Chaque modification en colonne B inscrit la date/heure en colonne G.
6. Creer un sommaire avec liens vers chaque feuille :
Sub CreerSommaire()
Dim ws As Worksheet
Dim sommaire As Worksheet
Dim i As Long
Set sommaire = Sheets.Add(Before:=Sheets(1))
sommaire.Name = "Sommaire"
sommaire.Range("A1").Value = "SOMMAIRE DU CLASSEUR"
sommaire.Range("A1").Font.Size = 16
i = 3
For Each ws In ActiveWorkbook.Worksheets
If ws.Name <> "Sommaire" Then
sommaire.Cells(i, 1).Value = ws.Name
i = i + 1
End If
Next ws
End Sub
7. Sauvegarder une copie horodatee :
Sub SauvegardeCopie()
Dim nomFichier As String
nomFichier = ActiveWorkbook.Path & "\" & _
Replace(ActiveWorkbook.Name, ".xlsm", "") & _
"_" & Format(Now, "yyyy-mm-dd_hhmmss") & ".xlsm"
ActiveWorkbook.SaveCopyAs nomFichier
MsgBox "Copie sauvegardee : " & nomFichier
End Sub
8. Supprimer les doublons dans une colonne :
Sub SupprimerDoublons()
Dim plage As Range
Set plage = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
plage.RemoveDuplicates Columns:=1, Header:=xlYes
MsgBox "Doublons supprimes !"
End Sub
9. Convertir tout en MAJUSCULES / minuscules :
Sub ConvertirMajuscules()
Dim cell As Range
For Each cell In Selection
If Not IsEmpty(cell) Then
cell.Value = UCase(cell.Value)
End If
Next cell
End Sub
10. Inserer la date du jour dans chaque feuille :
Sub DateDuJourPartout()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Range("A1").Value = "Rapport du " & Format(Date, "dd/mm/yyyy")
ws.Range("A1").Font.Bold = True
Next ws
End Sub
Boucles et conditions : automatiser intelligemment
Boucle For — parcourir des lignes :
Sub VerifierStocks()
Dim derniereLigne As Long
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
Dim i As Long
For i = 2 To derniereLigne
If Cells(i, 5).Value < Cells(i, 6).Value Then
Cells(i, 7).Value = "REAPPROVISIONNER"
Cells(i, 7).Font.Color = RGB(255, 0, 0)
Else
Cells(i, 7).Value = "OK"
Cells(i, 7).Font.Color = RGB(0, 128, 0)
End If
Next i
End Sub
Securite des macros
Les macros peuvent contenir du code malveillant. Configurez le bon niveau :
- Developpeur → Securite des macros
- Choisissez « Desactiver toutes les macros avec notification » (recommande)
Regles de securite :
- N’activez les macros QUE pour les fichiers que vous avez crees ou recus d’une source fiable
- Mefiez-vous des fichiers .xlsm recus par email ou WhatsApp d’inconnus
- Ne cliquez jamais « Activer le contenu » sur un fichier suspect
Astuce performance — accelerer vos macros
Sub MaMacroRapide()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
' ... votre code ici ...
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Cette technique peut accelerer une macro de 10x a 100x sur de grandes feuilles de donnees.
Erreurs courantes et debogage
| Erreur | Cause probable | Solution |
|---|---|---|
| Erreur 1004 | La feuille referencee n’est pas active | Activez la feuille d’abord : Sheets(« MaFeuille »).Activate |
| Erreur 13 : Incompatibilite de type | Texte dans une variable numerique | Verifiez les types (Dim x As String vs As Long) |
| La macro ne se sauvegarde pas | Fichier en .xlsx au lieu de .xlsm | Enregistrer sous → .xlsm |
| Boucle infinie (Excel se fige) | Condition de sortie jamais atteinte | Ctrl+Break pour interrompre, puis corrigez |
| Macro trop lente | Actualisation ecran a chaque action | Application.ScreenUpdating = False en debut de macro |
Checklist macros Excel
- ☐ Onglet Developpeur active
- ☐ Fichier enregistre en .xlsm (pas .xlsx)
- ☐ Macro testee sur une copie du fichier avant utilisation en production
- ☐ Raccourci clavier assigne pour les macros frequentes
- ☐ Commentaires dans le code VBA pour expliquer chaque bloc
- ☐ ScreenUpdating = False pour les macros longues
- ☐ Gestion d’erreurs (On Error) pour les macros critiques
- ☐ Securite des macros configuree en mode « notification »