Chaque semaine, vous vérifiez votre stock ligne par ligne ? Vous comparez les quantités aux seuils, puis vous coloriez les cellules à la main ? Une macro VBA fait ce travail en une seconde — et le refait à l'identique à chaque clic.
Dans cet article, vous découvrez les 8 bases de VBA nécessaires pour écrire votre première macro utile. À la fin, vous aurez toutes les pièces pour résoudre l'étude de cas « Mise à jour du statut de stock ». La correction complète est en vidéo.
L'étude de cas en bref
Vous gérez une feuille nommée Stock contenant 5 produits :
| Produit | Quantité en stock | Seuil d'alerte | Statut |
|---|---|---|---|
| Article A | 150 | 50 | ? |
| Article B | 15 | 20 | ? |
| Article C | 75 | 100 | ? |
| Article D | 5 | 5 | ? |
| Article E | 200 | 10 | ? |
Votre macro doit :
- remplir la colonne Statut avec « OK » ou « ALERTE - Réapprovisionner » ;
- colorer la cellule en vert (OK) ou en rouge (ALERTE) ;
- afficher en F1 la date et l'heure de la dernière mise à jour.
Étape 0 : ouvrir l'éditeur VBA
- Dans Excel, appuyez sur Alt + F11. L'éditeur Visual Basic s'ouvre.
- Menu Insertion › Module : c'est ici que vous écrivez votre code.
- Enregistrez votre classeur au format .xlsm (classeur prenant en charge les macros). Sinon, votre code sera perdu.
Une macro s'écrit toujours entre deux lignes :
Sub NomDeLaMacro()
' Votre code ici
End SubLes lignes qui commencent par une apostrophe sont des commentaires. Excel les ignore : utilisez-les pour expliquer votre code.
1. Déclarer des variables avec Dim
Une variable est une boîte qui stocke une information. On la déclare avec Dim, en précisant son type.
Dim nbLignes As Long ' un nombre entier
Dim quantite As Double ' un nombre (décimales possibles)
Dim message As String ' du texte| Type | Contenu | Exemple |
|---|---|---|
| Long | Nombre entier | Un numéro de ligne |
| Double | Nombre décimal | Un prix, une quantité |
| String | Texte | Un nom de produit |
| Worksheet | Une feuille Excel | La feuille « Stock » |
Astuce : ajoutez Option Explicit tout en haut du module. VBA vous signalera alors toute variable oubliée ou mal orthographiée.
2. Cibler une feuille avec Set
Pour éviter que la macro agisse sur la mauvaise feuille, on la désigne précisément. Un objet (feuille, plage…) s'affecte avec Set.
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Ventes")Ensuite, écrivez ws. devant chaque instruction : votre code fonctionne même si une autre feuille est active. Le nom entre guillemets doit être identique à celui de l'onglet.
3. Trouver la dernière ligne avec .End(xlUp).Row
Aujourd'hui, 5 produits. Demain, peut-être 500. Votre code doit s'adapter tout seul.
Dim derniereLigne As Long
derniereLigne = ws.Cells(ws.Rows.Count, 1).End(xlUp).RowVBA part de la toute dernière cellule de la colonne A, puis « remonte » jusqu'à la première cellule remplie. C'est l'équivalent de Ctrl + ↑ au clavier.
4. Répéter une action avec For…Next
Une boucle exécute les mêmes instructions pour chaque ligne.
Dim i As Long
For i = 2 To derniereLigne
' instructions répétées pour la ligne i
Next iOn démarre à 2 car la ligne 1 contient les en-têtes. La variable i prend successivement les valeurs 2, 3, 4… jusqu'à la dernière ligne.
5. Lire et écrire avec Cells(Ligne, Colonne)
Cells désigne une cellule par son numéro de ligne, puis son numéro de colonne (A = 1, B = 2, C = 3, D = 4…).
' Lire la valeur de la cellule B5
montant = ws.Cells(5, 2).Value
' Écrire du texte dans la cellule C5
ws.Cells(5, 3).Value = "Traité"Combiné à la boucle, ws.Cells(i, 2) désigne la colonne B de la ligne en cours. C'est la clé de l'exercice.
6. Décider avec If…Then…Else
La condition permet à la macro de choisir entre deux actions.
If montant >= objectif Then
ws.Cells(i, 4).Value = "Atteint"
Else
ws.Cells(i, 4).Value = "Non atteint"
End If| Opérateur | Signification |
|---|---|
| = / <> | Égal à / différent de |
| < / > | Inférieur / supérieur |
| <= / >= | Inférieur ou égal / supérieur ou égal |
Regardez l'Article D : stock = 5, seuil = 5. Le résultat attendu est ALERTE. Choisissez donc bien votre opérateur de comparaison !
7. Mettre en couleur avec .Interior.Color
Vous pouvez modifier la couleur de fond d'une cellule directement en VBA.
ws.Cells(i, 4).Interior.Color = vbGreen ' vert vif
ws.Cells(i, 4).Interior.Color = RGB(255, 199, 206) ' rouge clair- Les constantes
vbGreen,vbRed,vbYellowsont prêtes à l'emploi. - La fonction
RGB(rouge, vert, bleu)offre des teintes plus douces (valeurs de 0 à 255).
Placez la mise en couleur dans chaque branche du If : une couleur pour « OK », une autre pour « ALERTE ».
8. Horodater avec Now et Format
Now renvoie la date et l'heure actuelles. Format les présente comme vous le souhaitez. L'opérateur & assemble du texte.
ws.Range("H1").Value = "Traité le : " & Format(Now, "dd/mm/yyyy hh:mm:ss")Résultat : Traité le : 20/09/2026 14:32:05. Dans l'étude de cas, la cellule cible est F1 et le texte commence par « Dernière Mise à Jour : ».
Exécuter votre macro
- Revenez dans Excel et appuyez sur Alt + F8.
- Sélectionnez
MettreAJourStatutStock, puis cliquez sur Exécuter.
Bonus : ajoutez un bouton sur la feuille (Insertion › Formes, puis clic droit › Affecter une macro). Vos collègues lancent la mise à jour en un clic.
À vous de jouer : assemblez les briques
Vous avez toutes les pièces du puzzle. Voici l'ordre logique de votre macro :
- Déclarer les variables (
Dim). - Cibler la feuille Stock (
Set). - Calculer la dernière ligne (
.End(xlUp).Row). - Boucler de la ligne 2 à la dernière (
For…Next). - Pour chaque ligne : lire la quantité (colonne B) et le seuil (colonne C).
- Comparer (
If…Then…Else), écrire le statut en colonne D et colorer la cellule. - Après la boucle : écrire la date de mise à jour en F1 (
Now).
Vérifiez votre résultat :
| Produit | Stock | Seuil | Statut attendu |
|---|---|---|---|
| Article A | 150 | 50 | OK |
| Article B | 15 | 20 | ALERTE - Réapprovisionner |
| Article C | 75 | 100 | ALERTE - Réapprovisionner |
| Article D | 5 | 5 | ALERTE - Réapprovisionner |
| Article E | 200 | 10 | OK |
Et en F1 : Dernière Mise à Jour : 20/09/2026 11:13:16.
La correction en vidéo
Bloqué, ou envie de comparer votre code ? Suivez la démonstration pas à pas.
Les erreurs fréquentes des débutants
| Message ou symptôme | Cause probable |
|---|---|
| « L'indice n'appartient pas à la sélection » | Le nom dans Worksheets("…") ne correspond pas à l'onglet. |
| « Variable non définie » | Variable non déclarée (avec Option Explicit) ou faute de frappe. |
| L'Article D apparaît « OK » | Opérateur < utilisé au lieu de <=. |
| Les en-têtes sont modifiés | La boucle démarre à 1 au lieu de 2. |
| La macro a disparu à la réouverture | Classeur enregistré en .xlsx au lieu de .xlsm. |
À retenir
- Dim déclare, Set désigne un objet comme une feuille.
.End(xlUp).Rowrend votre code indépendant du nombre de lignes.For…Next+Cells(i, colonne): le duo qui traite un tableau entier.If…Then…Elsedécide ; vérifiez toujours le cas d'égalité.- Enregistrez en .xlsm, sinon vos macros disparaissent.
Automatisez vos fichiers Excel avec VBA
Formation Excel & VBA 100 % distanciel · Exercices sur vos propres fichiers · Suivi personnalisé · Bilan gratuit, réponse sous 24h.
Voir les formations Se préinscrire