Une macro devient vraiment utile quand elle ne se contente pas de répéter la même opération : elle décide ! La condition If permet à VBA d'agir différemment selon la valeur trouvée dans chaque cellule, passant ainsi de l'automatisation mécanique à l'automatisation intelligente.
Dans cet exercice, tu vas combiner boucle For et condition If pour parcourir un tableau de stocks, marquer les références sous le seuil et appliquer une couleur d'alerte. En revanche, la logique If...Else...End If que tu vas construire ici se transfère directement à n'importe quel tableau de données : suivi de commandes, relances clients, contrôle qualité...
Ce que tu vas construire
Comprendre la structure If...Then...Else...End If et son rôle dans une macro.
Comparer deux valeurs de cellules avec l'opérateur < à l'intérieur d'une boucle.
Écrire un résultat différent selon la condition (« À commander » ou « OK »).
Appliquer une couleur de fond conditionnelle avec Interior.Color et RGB().
Distinguer les cas limites : l'égalité (12 = 12) n'est pas incluse dans <.
À connaître avant de commencer
- Savoir écrire une boucle For qui parcourt une plage.
- Connaître la référence Cells(ligne, colonne).
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 | |
|---|---|---|---|---|
| 1 | Référence | Stock actuel | Stock mini | Statut |
| 2 | REF-001 | 4 | 10 | |
| 3 | REF-002 | 25 | 10 | |
| 4 | REF-003 | 8 | 15 | |
| 5 | REF-004 | 40 | 20 | |
| 6 | REF-005 | 12 | 12 |
Exercice guidé
Coche chaque étape au fur et à mesure. Tente-la dans ton fichier, puis déplie le corrigé.
La condition If Cells(i, 2).Value < Cells(i, 3).Value teste si le stock actuel (colonne B) est strictement inférieur au stock mini (colonne C). Si oui, la macro écrit « À commander » ; sinon, elle écrit « OK ». End If ferme obligatoirement le bloc.
Option Explicit
Sub MarquerStock()
Dim i As Long, derniereLigne As Long
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To derniereLigne
If Cells(i, 2).Value < Cells(i, 3).Value Then
Cells(i, 4).Value = "À commander"
Else
Cells(i, 4).Value = "OK"
End If
Next i
End SubRésultat attendu : « À commander » pour REF-001 (4 < 10) et REF-003 (8 < 15), « OK » pour les autres. REF-005 (12 = 12) reste OK car la comparaison utilise <.
Attention
- En VBA, = sert à comparer (pas == comme dans d'autres langages).
- End If est obligatoire : l'oublier provoque une erreur de compilation.
- L'égalité n'est pas incluse avec < : REF-005 (12 = 12) renvoie OK.
Astuces pour aller plus loin
ElseIf pour plusieurs paliers
Quand on veut gérer trois cas ou plus (rupture totale, stock faible, OK), on enchaîne les conditions avec ElseIf : If ... Then / ElseIf ... Then / Else / End If. Chaque palier est évalué dans l'ordre, le premier vrai s'applique.
Combine la condition avec une couleur pour un repère visuel immédiat
Écrire le texte et appliquer la couleur dans le même bloc If évite deux boucles séparées. Interior.Color = RGB(254, 226, 226) donne un rouge clair discret ; RGB(220, 38, 38) donne un rouge vif pour les alertes critiques.
Pour aller plus loin sur les boucles VBA
Une fois la condition If combinée à la boucle For, on peut explorer Do While (répéter tant qu'une condition est vraie) et For Each (itérer sur une collection d'objets). Exemples commentés ici : https://blog.ledojo.club/loops-in-vba
Questions fréquentes
La structure est : If condition Then / instructions / Else / autres instructions / End If. La condition est une expression booléenne (ex. Cells(i, 2).Value < Cells(i, 3).Value). End If est obligatoire pour fermer le bloc.
On utilise la propriété Interior.Color de la cellule avec une valeur numérique de couleur. La fonction RGB(rouge, vert, bleu) convertit trois valeurs (0-255) en cette valeur. Par exemple, Cells(i, 4).Interior.Color = RGB(254, 226, 226) applique un fond rouge clair.
On enchaîne les paliers avec ElseIf : If stock = 0 Then / [rupture] / ElseIf stock < mini Then / [alerte] / Else / [OK] / End If. VBA évalue les conditions dans l'ordre et applique la première qui est vraie.
En VBA, tout bloc If...Then doit se terminer par End If (sauf le If sur une seule ligne sans Else). Si End If est absent, l'éditeur signale une erreur de compilation à l'exécution. Vérifier que chaque If a bien son End If correspondant.
3 exercices similaires à traiter des données avec une condition If
Planning de production
Créer un planning de production qui calcule automatiquement les dates de livraison en tenant compte des jours ouvrés, des contraintes de capacité et des priorités.
Voir l'exercice
Gestion des stocks et réappro
Construire un tableau de gestion des stocks qui calcule le stock disponible, déclenche les alertes de réappro et identifie les surstocks. Gérer 200 références sans stress.
Voir l'exercice
Colorer un suivi de stock automatiquement
Mettre en couleur un suivi de stock avec la mise en forme conditionnelle : alertes rouges sous le seuil, barres de données et jeux d'icônes.
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