Cet exercice est le projet de synthèse de la série VBA débutant : boucle For, condition If, compteur et MsgBox réunis dans une seule macro. On passe ici de la technique isolée au vrai mini-outil opérationnel !
Tu vas construire une macro qui parcourt un tableau de commandes, teste deux critères simultanément avec And, colore les lignes à relancer et affiche un message récapitulatif. Une fois ce schéma maîtrisé, tu sauras l'adapter à n'importe quelle situation : relances, alertes de stock, rapports automatisés... la logique reste la même.
Ce que tu vas construire
Combiner une boucle For et une condition If dans une seule macro.
Tester deux critères simultanément avec l'opérateur And.
Incrémenter un compteur à l'intérieur d'un bloc conditionnel.
Appliquer une couleur de fond avec Interior.Color et RGB().
Afficher un message récapitulatif avec MsgBox à la fin de la macro.
À connaître avant de commencer
- Maîtriser la boucle For et la condition If en VBA.
- Connaître Cells(ligne, colonne) et la dernière ligne dynamique.
Voici les données de départ de cet exercice. Copie-les ou télécharge le fichier Excel, puis entraîne-toi avant de regarder le corrigé.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Date | Client | Montant | Statut | Action |
| 2 | 05/01/2026 | Acme | 1 500 | En attente | |
| 3 | 08/01/2026 | Bralt | 800 | Payée | |
| 4 | 12/01/2026 | Cima | 2 300 | En attente | |
| 5 | 20/01/2026 | Delos | 950 | En attente | |
| 6 | 25/01/2026 | Egide | 1 200 | Payée | |
| 7 | 02/02/2026 | Fyx | 3 000 | En attente |
Exercice guidé
Coche chaque étape au fur et à mesure. Tente-la dans ton fichier, puis déplie le corrigé.
La condition teste deux critères avec And : le montant doit dépasser 1000 ET le statut doit être exactement « En attente ». Si les deux sont vrais, la macro inscrit « À relancer », colore la cellule en jaune clair et incrémente le compteur. MsgBox affiche le total à la fin.
Option Explicit
Sub RelancesAFaire()
Dim i As Long, derniereLigne As Long, nbRelances As Long
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
nbRelances = 0
For i = 2 To derniereLigne
If Cells(i, 3).Value > 1000 And Cells(i, 4).Value = "En attente" Then
Cells(i, 5).Value = "À relancer"
Cells(i, 5).Interior.Color = RGB(254, 243, 199)
nbRelances = nbRelances + 1
End If
Next i
MsgBox nbRelances & " commande(s) à relancer."
End SubRésultat attendu : « À relancer » sur Acme (1 500), Cima (2 300) et Fyx (3 000) ; le message affiche « 3 commande(s) à relancer. ». Bralt et Egide sont payées, Delos est sous 1000.
Attention
- And exige que les DEUX conditions soient vraies : montant ET statut.
- Le compteur s'incrémente DANS le If, pas après : il ne compte que les relances.
- Comparer un nombre (Montant) : Cells(i, 3).Value > 1000, pas de guillemets.
Astuces pour aller plus loin
Documente ta macro avec des commentaires
En VBA, une apostrophe en début de ligne transforme la ligne en commentaire (elle est ignorée à l'exécution). Ajouter ' Boucle sur les commandes ou ' Compteur de relances rend la macro lisible pour toi et pour tes collègues.
Un MsgBox récapitulatif transforme une macro en mini-outil
Afficher le nombre de relances à la fin évite d'aller compter les lignes colorées à la main. On peut enrichir le message : MsgBox nbRelances & " commande(s) à relancer sur " & (derniereLigne - 1) & " lignes."
Pour aller plus loin sur les boucles VBA
Une fois And maîtrisé, explore Or (au moins une condition vraie), Not (inverse la condition) et les boucles Do While pour les listes de longueur inconnue. Exemples commentés ici : https://blog.ledojo.club/loops-in-vba
Questions fréquentes
On place l'opérateur And entre les deux conditions dans le If : If Cells(i, 3).Value > 1000 And Cells(i, 4).Value = "En attente" Then. And exige que les deux soient vraies ; Or suffit d'une seule vraie. On peut enchaîner autant de conditions que nécessaire.
On déclare une variable compteur (Dim nbRelances As Long), on l'initialise à 0 avant la boucle, puis on l'incrémente avec nbRelances = nbRelances + 1 à l'intérieur du bloc conditionnel. À la fin de la boucle, la variable contient le total des éléments qui ont satisfait la condition.
MsgBox est une fonction VBA qui affiche une fenêtre de dialogue. On lui passe une chaîne de texte : MsgBox nbRelances & " commande(s) à relancer.". L'opérateur & concatène le nombre et le texte. La fenêtre s'affiche à la fin de la macro et l'utilisateur clique OK pour fermer.
On ouvre l'éditeur VBA (Alt+F11), on insère un module (Insertion > Module) et on écrit un Sub avec une boucle For qui parcourt les lignes. On applique la logique métier à l'intérieur (condition If, écriture dans une cellule, couleur). On exécute avec F5 ou Alt+F8.
VBA est sensible à la casse par défaut : "En attente" et "en attente" sont différents. Un espace invisible en fin de valeur suffit aussi à faire échouer la comparaison. Pour plus de souplesse, on peut utiliser LCase() pour normaliser : If LCase(Cells(i, 4).Value) = "en attente" Then.
3 exercices similaires à automatiser le repérage des relances clients
Tableau de bord commercial
Créer un tableau de bord commercial complet pour suivre tes ventes, ton pipeline et tes objectifs avec des indicateurs visuels.
Voir l'exercice
Analyse des ventes par région
Construire un tableau d'analyse des ventes par région pour identifier tes zones fortes, tes zones en retard et prioriser tes efforts commerciaux.
Voir l'exercice
Pipeline commercial CRM
Construire un pipeline commercial dans Excel pour suivre tes opportunités de la prospection à la signature, calculer la valeur pondérée et prévoir ton CA.
Voir l'exercice
Envie de t'entraîner plus ?
Des dizaines de cas pratiques Excel corrigés pour progresser pour de vrai.
Voir tous les exercices