La Boucle For Next en VBA : Guide Complet pour Excel
La boucle For est l’une des boucles les plus utilisées en VBA. Elle vous permet de répéter une série d’instructions un nombre précis de fois. L’intérêt de cette boucle réside dans sa simplicité d’utilisation et sa capacité à parcourir efficacement des séries de données ou d’instructions.
Maîtrisez les boucles ‘For Next’ et bien plus encore grâce à notre formation VBA en ligne, conçue pour vous rendre autonome en programmation Excel.
Structure de la boucle For Next
Syntaxe
Voici la syntaxe générale d’une boucle For Next en VBA :
Next compteur
For compteur = debut To fin [Step valeur_du_pas] ' Code à exécuter Next compteur
- compteur : C’est une variable qui prend des valeurs successives de debut à fin. C’est souvent un entier, mais il peut aussi être de tout autre type numérique.
- debut : La valeur initiale du compteurr.
- fin : La valeur finale que le compteur doit atteindre.
- valeur_du_pas : Indique l’incrément ou le décrément du compteur à chaque itération de la boucle. Par défaut, il est de 1.
Exemple de boucle For basique :
Debug.Print « i vaut : » & i
Next i
For i = 1 To 5 Debug.Print "i vaut : " & i Next i
Dans cet exemple, la boucle s’exécute cinq fois, affichant la valeur de i à chaque itération.
Exemples pratiques
Exemple de base : Afficher les nombres de 1 à 10
Cet exemple montre une boucle simple qui affiche les nombres de 1 à 10 dans la fenêtre de débogage (ou console) d’Excel.
Debug.Print i
Next i
For i = 1 To 10 Debug.Print i Next i
Exemple avec Step : compter par pas de 2
Vous pouvez modifier l’incrément de la boucle en utilisant l’option Step. Dans cet exemple, la boucle compte de 1 à 10 par pas de 2.
Debug.Print i
Next i
For i = 1 To 10 Step 2 Debug.Print i Next i
Exemple inversé : compter à rebours
Il est également possible de faire une boucle qui décrémente le compteur, en utilisant un Step négatif.
Debug.Print i
Next i
For i = 10 To 1 Step -1 Debug.Print i Next i
Résultat : La console affichera 10, 9, 8, …, 1.
Exemple avec une plage de cellules Excel : remplir une colonne
Un des cas d’utilisation les plus courants en VBA est de parcourir des cellules dans une feuille Excel. Cet exemple montre comment remplir les cellules de la colonne A avec des valeurs.
Cells(i, 1).Value = « Ligne » & i
Next i
For i = 1 To 10 Cells(i, 1).Value = "Ligne " & i Next i
Ici, chaque cellule de la colonne A, de la ligne 1 à la ligne 10, sera remplie avec « Ligne 1 », « Ligne 2 », etc.
Exemple avancé : parcourir un tableau (Array)
Les tableaux (arrays) sont souvent utilisés pour stocker des données en mémoire. Cet exemple montre comment parcourir un tableau de chaînes de caractères et afficher chaque élément.
arr(1) = « A »
arr(2) = « B »
arr(3) = « C »
arr(4) = « D »
arr(5) = « E »For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
Dim arr(1 To 5) As String arr(1) = "A" arr(2) = "B" arr(3) = "C" arr(4) = "D" arr(5) = "E" For i = LBound(arr) To UBound(arr) Debug.Print arr(i) Next i
LBound et UBound sont des fonctions qui retournent respectivement les limites inférieure et supérieure du tableau.
Plusieurs boucles For Next imbriquées
Supposons que nous souhaitons remplir une matrice 5×5 dans une feuille Excel, où chaque cellule contient la multiplication de son numéro de ligne par son numéro de colonne.
Sub RemplirMatrice() Dim i As Integer Dim j As Integer ' Première boucle pour parcourir les lignes For i = 1 To 5 ' Deuxième boucle pour parcourir les colonnes For j = 1 To 5 ' Remplir la cellule avec le produit de i et j Cells(i, j).Value = i * j Next j Next i End Sub
Explication :
- Boucle Extérieure (For i = 1 To 5) :
- Cette boucle contrôle les lignes de la matrice. La variable i représente le numéro de ligne, allant de 1 à 5.
- Boucle Intérieure (For j = 1 To 5) :
- Cette boucle contrôle les colonnes de la matrice. La variable j représente le numéro de colonne, allant de 1 à 5.
- La boucle intérieure est exécutée entièrement pour chaque itération de la boucle extérieure.
- Action (Cells(i, j).Value = i * j) :
- Chaque cellule de la matrice est remplie avec le produit du numéro de ligne (i) et du numéro de colonne (j).
Cas pratique : Automatiser une tâche Excel
Imaginons un scénario où vous devez copier les données d’une feuille Excel à une autre, mais seulement si une certaine condition est remplie. Par exemple, copier toutes les lignes d’une feuille où la valeur dans la colonne B est supérieure à 100.
Ce code vérifie chaque cellule de la colonne B, et si la condition est remplie, il copie la ligne entière dans une autre feuille (Feuil2).
derniereligne = Cells(Rows.Count, 2).End(xlUp).RowFor i = 1 To derniereligne
If Cells(i, 2).Value > 100 Then
‘ Copier la ligne dans une autre feuille
Sheets(« Feuil2 »).Rows(i).Value = Rows(i).Value
End If
Next i
Dim derniereligne As Long derniereligne = Cells(Rows.Count, 2).End(xlUp).Row For i = 1 To derniereligne If Cells(i, 2).Value > 100 Then ' Copier la ligne dans une autre feuille Sheets("Feuil2").Rows(i).Value = Rows(i).Value End If Next i
Bonnes pratiques
- Indentation : Indenter correctement le code à l’intérieur des boucles permet une meilleure lisibilité et facilite la maintenance du code. Par exemple :
‘ Indentation pour améliorer la lisibilité
Cells(i, 1).Value = i
Next i
For i = 1 To 10 ' Indentation pour améliorer la lisibilité Cells(i, 1).Value = i Next i
- Noms de variables significatifs : Utiliser des noms de variables clairs et significatifs pour le compteur de la boucle. Par exemple, si la boucle parcourt des lignes, utilisez row au lieu de i.
- Limiter la longueur des boucles : Une boucle ne devrait idéalement pas contenir trop de lignes de code. Si une boucle devient trop longue, il peut être utile de diviser son contenu en sous-routines pour clarifier l’intention.
- Éviter les boucles infinies : S’assurer que les conditions de la boucle ne créent pas une boucle infinie. Par exemple, en vérifiant que le Step n’est pas nul et que les conditions de début et de fin sont correctement définies.
- Répéter la variable après Next : la fin d’une boucle For peut très bien se terminer uniquement par Next, il est d’usage de préciser après Next la variable concernée => Next i. Cela simplifie la lecture du code lorsque plusieurs boucles Next se croisent.
Erreurs courantes et débogage
Même si la boucle For est simple à utiliser, certaines erreurs peuvent survenir :
- Oublier Next : Si vous omettez Next à la fin de la boucle, le code ne fonctionnera pas correctement. VBA pourrait générer une erreur de syntaxe ou un comportement inattendu.
- Mauvais incrément (Step) : Si le Step est 0, la boucle ne progressera jamais, causant une boucle infinie.
- Conditions de boucle invalides : Par exemple, essayer de parcourir une plage où la valeur de départ est supérieure à la valeur de fin sans utiliser un Step négatif.
Déboguer avec VBA :
- Utiliser des points d’arrêt pour suspendre l’exécution du code à des endroits stratégiques et examiner les variables en cours d’exécution
- Le mode pas-à-pas permet de parcourir chaque ligne de code pour observer le comportement de la boucle et identifier où une erreur se produit.
Si les boucles ‘For Next’ vous posent des difficultés, un freelance Excel VBA peut vous aider à développer des macros efficaces et bien structurées.
Alternatives à la boucle For Next en VBA :
Il est possible d’utiliser d’autres solutions pour réaliser des boucles dans un module VBA :