Pour qui ? Responsables administratifs, comptables, commerciaux, DAF ou tout collaborateur qui travaille quotidiennement sur Excel. Pas besoin de savoir coder — les exemples de code sont fournis et expliqués ligne par ligne.
C'est la tâche n°1 que j'automatise pour mes clients. Chaque lundi (ou chaque fin de mois), quelqu'un dans l'équipe ouvre un fichier source, copie des données dans un template, ajuste les formules, reformate le tout, l'enregistre en PDF et l'envoie par mail. En manuel : 30 à 90 minutes. En VBA : un bouton.
Ce que fait la macro
- ✓Importe les données depuis la source (autre fichier, base de données, export CSV)
- ✓Colle les données dans le template avec la mise en forme correcte
- ✓Met à jour la date et le titre automatiquement
- ✓Génère le PDF avec le bon nom de fichier
- ✓Envoie le rapport par email aux bons destinataires
Le code de base
Sub GenererRapportMensuel()
Dim wb As Workbook
Dim cheminPDF As String
' 1. Rafraîchir les données
ThisWorkbook.RefreshAll
Application.CalculateFull
' 2. Nom du fichier PDF avec la date du jour
cheminPDF = "C:\Rapports\Rapport_" & Format(Date, "YYYY-MM") & ".pdf"
' 3. Export en PDF
Sheets("Rapport").ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=cheminPDF, _
Quality:=xlQualityStandard
' 4. Envoi par email
Call EnvoyerEmail("direction@entreprise.fr", _
"Rapport mensuel " & Format(Date, "MMMM YYYY"), _
cheminPDF)
MsgBox "✅ Rapport généré et envoyé !"
End Sub
C'est la tâche qui a le retour sur investissement le plus immédiat. Chaque facture relancée manuellement tarde à être payée — et les relances oubliées ne sont jamais payées. Une macro VBA parcourt votre tableau de facturation et envoie automatiquement un email personnalisé à chaque client en retard.
La logique de la macro
Sub RelancerClientsEnRetard()
Dim i As Long
Dim nbRelances As Integer
nbRelances = 0
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
Dim echeance As Date
Dim statut As String
echeance = Cells(i, 4).Value ' Colonne D = Date échéance
statut = Cells(i, 5).Value ' Colonne E = Statut paiement
If statut = "En attente" And echeance < Date Then
Dim client As String
Dim email As String
Dim montant As String
client = Cells(i, 2).Value
email = Cells(i, 3).Value
montant = Format(Cells(i, 6).Value, "# ##0,00 €")
Call EnvoyerRelance(email, client, montant, echeance)
Cells(i, 7).Value = "Relancé le " & Format(Date, "DD/MM/YYYY")
nbRelances = nbRelances + 1
End If
Next i
MsgBox nbRelances & " relance(s) envoyée(s) automatiquement."
End Sub
Chez un client du secteur BTP, cette macro a permis de récupérer 34 000 € d'impayés en 3 semaines après sa mise en place. Les relances étaient auparavant envoyées manuellement — et souvent oubliées.
Vous récupérez chaque mois les fichiers Excel de vos commerciaux, agences ou filiales, et vous passez une demi-journée à copier-coller chaque tableau dans un fichier de synthèse. Cette tâche est la plus simple à automatiser et l'une des plus spectaculaires en termes de gain de temps.
Sub ConsoliderFichiers()
Dim dossier As String
Dim fichier As String
Dim wsDest As Worksheet
Dim ligneDestination As Long
dossier = "C:\Rapports\Agences\" ' Dossier contenant tous les fichiers
Set wsDest = ThisWorkbook.Sheets("Synthèse")
ligneDestination = wsDest.Cells(Rows.Count, 1).End(xlUp).Row + 1
fichier = Dir(dossier & "*.xlsx") ' Parcourir tous les .xlsx du dossier
Do While fichier <> ""
Dim wbSource As Workbook
Set wbSource = Workbooks.Open(dossier & fichier, ReadOnly:=True)
With wbSource.Sheets(1)
Dim dernLigne As Long
dernLigne = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("A2:Z" & dernLigne).Copy _
wsDest.Cells(ligneDestination, 1)
ligneDestination = ligneDestination + dernLigne - 1
End With
wbSource.Close SaveChanges:=False
fichier = Dir()
Loop
MsgBox "✅ Consolidation terminée !"
End Sub
Vous avez une liste de 50 clients et vous devez générer un PDF personnalisé pour chacun — même structure, données différentes. En manuel : 50 fois ouvrir le fichier, changer le nom, exporter en PDF, renommer. En VBA : une boucle sur vos données, un PDF par ligne, tous nommés et rangés automatiquement.
Sub ExporterPDFParClient()
Dim wsData As Worksheet
Dim wsTemplate As Worksheet
Dim i As Long
Set wsData = Sheets("Données")
Set wsTemplate = Sheets("Template")
For i = 2 To wsData.Cells(Rows.Count, 1).End(xlUp).Row
' Injecter les données du client dans le template
wsTemplate.Range("B2").Value = wsData.Cells(i, 1).Value ' Nom
wsTemplate.Range("B3").Value = wsData.Cells(i, 2).Value ' Adresse
wsTemplate.Range("B4").Value = wsData.Cells(i, 3).Value ' Montant
' Exporter en PDF avec le nom du client
Dim nomFichier As String
nomFichier = "C:\Devis\" & wsData.Cells(i, 1).Value & "_" & Format(Date, "YYYYMMDD") & ".pdf"
wsTemplate.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nomFichier
Next i
MsgBox i - 2 & " PDF générés dans C:\Devis\"
End Sub
Votre fichier de gestion de stock contient 500 références. Vous ne pouvez pas vérifier manuellement chaque jour si un article est en dessous du seuil d'alerte. VBA peut faire cette vérification à l'ouverture du fichier et envoyer une alerte email aux bons destinataires en cas de problème.
Sub VerifierAlertes()
Dim ws As Worksheet
Dim i As Long
Dim listeAlertes As String
Set ws = Sheets("Stock")
listeAlertes = ""
For i = 2 To ws.Cells(Rows.Count, 1).End(xlUp).Row
Dim qteStock As Long
Dim seuilAlerte As Long
qteStock = ws.Cells(i, 3).Value ' Colonne C = Stock actuel
seuilAlerte = ws.Cells(i, 4).Value ' Colonne D = Seuil minimum
If qteStock <= seuilAlerte Then
listeAlertes = listeAlertes & ws.Cells(i, 1).Value & _
" — Stock : " & qteStock & " (seuil : " & seuilAlerte & ")" & Chr(13)
End If
Next i
If listeAlertes <> "" Then
Call EnvoyerEmail("logistique@entreprise.fr", _
"⚠️ Alertes stock — " & Format(Date, "DD/MM/YYYY"), _
"Articles en dessous du seuil :" & Chr(13) & listeAlertes)
End If
End Sub
Pour que cette macro tourne automatiquement sans intervention humaine, il faut la déclencher à l'ouverture du fichier (événement Workbook_Open) ou via le Planificateur de tâches Windows qui ouvre le fichier chaque matin à une heure fixe.
Récapitulatif — Quel gain de temps pour chaque automatisation ?
| Automatisation | Temps économisé | Délai de dev. | ROI estimé |
|---|---|---|---|
| Rapports récurrents | 30–90 min/semaine | 1–3 jours | 2 semaines |
| Relances clients | 2h/semaine + impayés | 2–4 jours | Immédiat |
| Consolidation fichiers | 3–4h/mois | 1–2 jours | 1 semaine |
| Export PDF en masse | 1 min × N documents | 1 jour | 1 semaine |
| Alertes intelligentes | Prévention de pertes | 1–2 jours | Immédiat |
Questions fréquentes
Vous avez une tâche répétitive à automatiser ?
Décrivez-moi votre problème en 30 minutes lors d'un appel découverte gratuit. Je vous dis exactement ce qui est automatisable, combien de temps ça prend et quel est le ROI estimé — sans engagement.
📅 Consultation gratuite — 30 min