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 :

ProduitQuantité en stockSeuil d'alerteStatut
Article A15050?
Article B1520?
Article C75100?
Article D55?
Article E20010?

Votre macro doit :

Étape 0 : ouvrir l'éditeur VBA

  1. Dans Excel, appuyez sur Alt + F11. L'éditeur Visual Basic s'ouvre.
  2. Menu Insertion › Module : c'est ici que vous écrivez votre code.
  3. 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 Sub

Les 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
TypeContenuExemple
LongNombre entierUn numéro de ligne
DoubleNombre décimalUn prix, une quantité
StringTexteUn nom de produit
WorksheetUne feuille ExcelLa 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).Row

VBA 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 i

On 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érateurSignification
= / <>Égal à / différent de
< / >Inférieur / supérieur
<= / >=Inférieur ou égal / supérieur ou égal
⚠️ Le piège de l'étude de cas

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

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

  1. Revenez dans Excel et appuyez sur Alt + F8.
  2. 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 :

  1. Déclarer les variables (Dim).
  2. Cibler la feuille Stock (Set).
  3. Calculer la dernière ligne (.End(xlUp).Row).
  4. Boucler de la ligne 2 à la dernière (For…Next).
  5. Pour chaque ligne : lire la quantité (colonne B) et le seuil (colonne C).
  6. Comparer (If…Then…Else), écrire le statut en colonne D et colorer la cellule.
  7. Après la boucle : écrire la date de mise à jour en F1 (Now).

Vérifiez votre résultat :

ProduitStockSeuilStatut attendu
Article A15050OK
Article B1520ALERTE - Réapprovisionner
Article C75100ALERTE - Réapprovisionner
Article D55ALERTE - Réapprovisionner
Article E20010OK

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ômeCause 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ésLa boucle démarre à 1 au lieu de 2.
La macro a disparu à la réouvertureClasseur enregistré en .xlsx au lieu de .xlsm.

À retenir

  1. Dim déclare, Set désigne un objet comme une feuille.
  2. .End(xlUp).Row rend votre code indépendant du nombre de lignes.
  3. For…Next + Cells(i, colonne) : le duo qui traite un tableau entier.
  4. If…Then…Else décide ; vérifiez toujours le cas d'égalité.
  5. 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
← Retour au blog