For…Next en VBA : le compteur, Step et Exit For pour automatiser Excel
La boucle For en VBA sert à répéter un bloc d’instructions un nombre précis de fois. Dans Excel, elle aide à numéroter des lignes, parcourir un tableau, nettoyer des cellules ou appliquer une règle à 500 ou 1000 lignes sans répéter le même code.
Le principe est simple : un compteur part d’une valeur, avance jusqu’à une borne de fin, puis s’arrête. Les points les plus sensibles sont le choix du compteur, l’usage de Step, la sortie anticipée avec Exit For et la confusion possible avec For Each ou Do While. L’objectif est d’écrire des boucles fiables, lisibles et faciles à faire évoluer.
Comprendre le rôle de For…Next en VBA
Une boucle For…Next est une boucle contrôlée par compteur. Elle convient quand le nombre d’itérations est connu à l’avance, par exemple de 1 à 12 pour numéroter des mois, de 2 à 1000 pour traiter les lignes d’un tableau, ou de 10 à 1 pour remonter une liste.
Maîtriser la boucle For en VBA
À chaque passage, VBA exécute les instructions placées entre For et Next. Ensuite, il ajuste automatiquement le compteur selon le pas défini. Si aucun pas n’est précisé, Step vaut 1 par défaut.
| Élément | Rôle | Exemple |
|---|---|---|
| Compteur | Variable qui suit le numéro d’itération | i |
| Début | Première valeur prise par le compteur | 1 |
| Fin | Dernière valeur à atteindre | 12 |
| Step | Pas d’incrémentation ou de décrémentation | 2 ou -1 |
| Next | Marque la fin du bloc répété | Next i |
La syntaxe de base à retenir
La forme la plus courante est simple : For i = 1 To 12, puis vos instructions, puis Next i. Le compteur doit être une variable numérique adaptée, par exemple Integer pour de petites valeurs ou Long pour des lignes Excel nombreuses. En pratique, Long est souvent le meilleur choix pour parcourir des feuilles de calcul.
Exemple simple : vous voulez remplir les cellules A1 à A12 avec les nombres de 1 à 12. La logique est directe : pour chaque valeur de i entre 1 et 12, écrire i dans la ligne correspondante. Cela évite de répéter douze affectations manuelles.
| Ligne VBA | Ce qu’elle fait |
|---|---|
| Dim i As Long | Déclare le compteur |
| For i = 1 To 12 | Démarre la boucle de 1 à 12 |
| Cells(i, 1).Value = i | Écrit la valeur de i en colonne A |
| Next i | Passe à l’itération suivante |
Utiliser Step pour avancer, sauter ou reculer
L’instruction Step modifie la progression du compteur. Sans elle, VBA avance de 1 en 1. Avec Step 2, il saute une valeur sur deux. Avec Step -1, il décrémente le compteur. C’est utile pour traiter seulement certaines lignes, générer une série ou supprimer des lignes sans perturber l’ordre de parcours.

Incrémenter de 2 en 2
Une boucle comme For i = 2 To 10 Step 2 fait passer le compteur par les valeurs 2, 4, 6, 8, 10. C’est pratique pour cibler uniquement les lignes paires, alterner des traitements ou remplir une colonne avec une progression régulière.
| Instruction | Résultat attendu |
|---|---|
| For i = 2 To 10 Step 2 | Le compteur prend 2, 4, 6, 8, 10 |
| Cells(i, 2).Value = « Ligne paire » | Écrit un libellé en colonne B sur les lignes concernées |
| Next i | Continue jusqu’à 10 |
Décrémenter avec un Step négatif
Pour compter à rebours, la valeur de départ doit être supérieure à la valeur de fin, et Step doit être négatif. Par exemple, For i = 16 To 2 Step -2 produit 16, 14, 12, 10, 8, 6, 4, 2. Cette logique est fréquente lorsqu’on supprime des lignes. En partant du bas, on évite que les lignes restantes changent d’index avant d’avoir été examinées.
Si vous écrivez For i = 16 To 2 sans Step négatif, le bloc ne s’exécutera pas comme vous l’attendez, car VBA prévoit par défaut une progression vers le haut. Le sens du compteur et le signe de Step doivent donc toujours rester cohérents.
Cas pratiques dans une macro Excel
La boucle For prend tout son sens dans les macros qui appliquent la même action à plusieurs cellules. Elle transforme une opération répétitive en règle automatique, plus rapide et moins sujette aux oublis.
Numéroter 12 lignes automatiquement
Pour créer une numérotation simple, utilisez le compteur comme valeur à écrire et comme numéro de ligne. Sur 12 lignes, la macro reste courte et lisible : le compteur i sert à la fois d’itération et de repère dans la feuille.
| Étape | Code VBA |
|---|---|
| Déclaration | Dim i As Long |
| Boucle | For i = 1 To 12 |
| Action | Cells(i, 1).Value = i |
| Fin | Next i |
Ce modèle peut ensuite servir à numéroter des lignes de facture, préparer un planning, initialiser une feuille de suivi ou créer une base de test. Pour passer de 12 à 500 lignes, il suffit de modifier la borne de fin.
Parcourir un jeu de données jusqu’à 1000 lignes
Dans un tableau Excel, on commence souvent à la ligne 2 pour éviter l’en-tête. Une boucle du type For i = 2 To 1000 peut contrôler chaque ligne et appliquer une condition. Par exemple, si la cellule de la colonne C est vide, écrire “À compléter” en colonne D.
Ce raisonnement est plus solide que la répétition de blocs copiés-collés. Il centralise la règle métier à un seul endroit. Si votre critère change, vous modifiez une instruction, pas des centaines de lignes de code.
Sortir plus tôt avec Exit For
Exit For interrompt la boucle avant la valeur finale. C’est utile lorsqu’on cherche une information unique : dès que la valeur est trouvée, continuer jusqu’à 1000 ne sert plus à rien. Par exemple, une macro peut parcourir une liste de références et s’arrêter dès qu’elle rencontre la référence attendue.
Cette sortie anticipée rend le code plus efficace et plus clair. Elle indique qu’un événement particulier met fin à la recherche. Pour garder un code lisible, placez Exit For dans une condition simple, par exemple après un If…Then bien nommé.
For, For Each, Do While : choisir la bonne boucle
La boucle For n’est pas la seule structure répétitive en VBA. Elle est très adaptée quand le nombre d’itérations est connu, mais d’autres boucles peuvent être plus naturelles selon le problème.
| Boucle | À privilégier quand | Exemple typique |
|---|---|---|
| For…Next | Le nombre de tours est connu | Traiter les lignes 2 à 500 |
| For Each | Vous parcourez une collection d’objets | Chaque cellule d’une plage |
| Do While | La boucle dépend d’une condition | Continuer tant qu’une cellule n’est pas vide |
| Do Until | Vous voulez arrêter à l’arrivée d’un événement | Continuer jusqu’à trouver une valeur |
For Each est souvent plus lisible pour parcourir directement des cellules, des feuilles ou des classeurs, car vous manipulez l’objet lui-même au lieu de gérer son index. À l’inverse, For…Next reste plus pratique quand vous avez besoin du numéro de ligne, d’un Step particulier ou d’une progression à rebours.
La boucle For aide aussi à structurer le raisonnement avant d’écrire une macro plus ambitieuse. Avant de coder, il peut être utile de voir le compteur comme un curseur qui avance case par case. À chaque position, il observe, décide et agit, puis passe à la suivante. Cette manière de raisonner aide à repérer le début du traitement, la fin du traitement et le point où une anomalie doit interrompre la suite.
Erreurs fréquentes et bonnes pratiques
Une boucle For mal écrite peut produire des résultats faux, ralentir une macro ou devenir difficile à déboguer. Les erreurs les plus courantes restent pourtant simples à éviter avec quelques réflexes.
Ne modifiez pas le compteur sans raison
Le compteur est déjà géré par VBA à chaque passage dans Next. Le modifier manuellement à l’intérieur de la boucle peut rendre le comportement imprévisible : lignes sautées, traitements doublés, arrêt trop tôt. Si vous avez besoin de sauter certaines lignes, utilisez plutôt une condition If ou adaptez Step.
Déclarez clairement vos variables
Un compteur non déclaré ou mal typé complique le débogage. Utilisez des noms simples mais explicites : i pour une petite boucle locale, ligne pour parcourir des lignes, colonne pour parcourir des colonnes. Pour les feuilles Excel, Long est généralement un choix sûr pour les compteurs de lignes.
Limitez le travail à l’intérieur de la boucle
Plus une boucle contient d’instructions lourdes, plus elle ralentit quand le volume augmente. Sur 50 itérations, la différence est rarement visible ; sur 1000 lignes, elle peut devenir sensible. Évitez les sélections inutiles, comme sélectionner une cellule avant de la modifier. Adressez directement les cellules avec Cells(ligne, colonne) ou une plage définie.
Prenez aussi l’habitude de tester sur un petit échantillon avant de lancer le traitement sur toute la feuille. Une boucle validée sur 10 ou 12 lignes reste plus simple à corriger qu’une macro lancée d’un coup sur 1000 lignes. Pour les boucles imbriquées, ajoutez des commentaires courts et précis, car la lecture devient vite plus difficile.
La bonne boucle For est celle dont on comprend immédiatement le départ, l’arrivée, le pas et l’objectif. Si ces quatre éléments sont clairs, votre macro VBA devient plus fiable, plus rapide à corriger et plus simple à faire évoluer.


