Table des matières:
- Un exemple For-Next
- Exemples For-Next avec une étape
- Un exemple For-Next avec une instruction Exit For
- Exemple imbriqué For-Next
Vidéo: Boucles For Next en VBA Excel pour traitements automatisés 2025
Le type de boucle le plus simple dans la programmation Excel VBA est une boucle For-Next. La boucle est contrôlée par une variable de compteur, qui commence à une valeur et s'arrête à une autre valeur. Les instructions entre l'instruction For et l'instruction Next sont les instructions répétées dans la boucle.
Un exemple For-Next
L'exemple suivant utilise une boucle For-Next pour additionner les 1 000 premiers nombres positifs. La variable Total commence par zéro. Ensuite, la boucle se produit. La variable Cnt est le compteur de boucle. Il commence par 1 et est incrémenté de 1 à chaque fois dans la boucle. La boucle se termine lorsque Cnt est 1 000.
Cet exemple n'a qu'une seule instruction à l'intérieur de la boucle. Cette instruction ajoute la valeur de Cnt à la variable Total. Lorsque la boucle se termine, un MsgBox affiche la somme des nombres.
Sous AddNumbers () Dim total As Double Dim Cnt As Long Total = 0 Pour Cnt = 1 à 1000 Total = Total + Cnt suivant Cnt MsgBox total End Sub
Parce que le compteur de boucle est une variable normale, vous pouvez écrire code pour changer sa valeur dans le bloc de code entre les instructions For et Next. Ceci, cependant, est une pratique très mauvaise .
Exemples For-Next avec une étape
Vous pouvez utiliser une valeur Step pour ignorer certaines valeurs de compteur dans une boucle For-Next. Voici l'exemple précédent, réécrite pour résumer seulement les nombres impairs entre 1 et 1, 000:
Sous AddOddNumbers () Dim total As Double Dim Cnt As Long Total = 0 Pour Cnt = 1 à 1000 Étape 2 Total = Total + Cnt Next Cnt MsgBox Total End Sub
Cette fois, Cnt commence par 1, puis prend les valeurs 3, 5, 7, et ainsi de suite. La valeur Step détermine comment le compteur est incrémenté. Notez que la valeur de boucle supérieure (1000) n'est pas réellement utilisée car la valeur la plus élevée de Cnt sera 999.
Voici un autre exemple qui utilise une valeur Step de 3. Cette procédure fonctionne avec la feuille active et applique un ombrage gris clair à chaque troisième ligne, de la ligne 1 à la ligne 100.
Sub ShadeEveryThirdRow () Dim i As Long Pour i = 1 à 100 Étape 3 Rangées (i). Intérieur. Color = RGB (200, 200, 200) Suivant i End Sub
Vérifiez le résultat de l'exécution de cette macro.
Un exemple For-Next avec une instruction Exit For
Une boucle For-Next peut également inclure une ou plusieurs instructions Exit For dans la boucle. Lorsque VBA rencontre cette instruction, la boucle se termine immédiatement.
L'exemple suivant illustre l'instruction Exit For. Cette routine est une procédure Function, destinée à être utilisée dans une formule de feuille de calcul.La fonction accepte un argument (une variable nommée Str) et renvoie les caractères à gauche du premier chiffre. Par exemple, si l'argument est "KBR98Z", la fonction renvoie "KBR". "
Fonction TextPart (Str) Dim i comme long TextPart =" "Pour i = 1 à Len (Str) Si IsNumeric (Mid (Str, i, 1)) puis quitte pour Else TextPart = TextPart & Mid (Str, i, 1) End If Next i End Fonction
La boucle For-Next commence par 1 et se termine par le nombre qui représente le nombre de caractères de la chaîne. Le code utilise la fonction Mid de VBA pour extraire un seul caractère dans la boucle. Si un caractère numérique est trouvé, l'instruction Exit For est exécutée et la boucle se termine prématurément.
Si le caractère n'est pas numérique, il est ajouté à la valeur renvoyée (qui est identique au nom de la fonction). La seule fois où la boucle examinera chaque caractère est si la chaîne a été transmise car l'argument ne contient aucun caractère numérique.
Exemple imbriqué For-Next
Vous pouvez avoir un nombre quelconque d'instructions dans la boucle et imbriquer des boucles For-Next dans d'autres boucles For-Next.
L'exemple suivant utilise une boucle For-Next imbriquée pour insérer des nombres aléatoires dans une plage de cellules de 12 rangées sur 5 colonnes. Notez que la routine exécute la boucle interne (la boucle avec le compteur Ligne) une fois pour chaque itération de la boucle externe (la boucle avec le compteur Col). En d'autres termes, la routine exécute l'instruction Cells (Row, Col) = Rnd 60 fois.
Sub FillRange () Dim Col Comme Long Dim Rang Comme Long Pour Col = 1 à 5 Pour Row = 1 à 12 Cellules (Row, Col) = Rnd Next Row Suivant Col End Sub
L'exemple suivant utilise imbriqué Pour -Les boucles suivantes pour initialiser un tableau tridimensionnel avec la valeur 100. Cette routine exécute l'instruction au milieu de toutes les boucles (l'instruction d'affectation) 1 000 fois (10 * 10 * 10), chaque fois avec une combinaison différente de valeurs pour i, j et k:
Sub NestedLoops () Dim MyArray (10, 10, 10) Dim i en tant que Dim Dim Long en Dim Dim As As Long pour i = 1 à 10 pour j = 1 à 10 Pour k = 1 à 10 MyArray (i, j, k) = 100 Suivant k Suivant j Suivant i 'D'autres instructions vont ici End Sub
Voici un dernier exemple qui utilise des boucles For-Next imbriquées, avec une valeur Step. Cette procédure crée un damier en modifiant la couleur d'arrière-plan des cellules en alternance.
Le compteur de lignes passe de 1 à 8. Une construction If-Then détermine la structure For-Next imbriquée à utiliser. Pour les rangées impaires, le compteur Col commence par 2. Pour les rangées paires, le compteur Col commence par 1. Les deux boucles utilisent une valeur Step de 2, de sorte que les autres cellules sont affectées. Deux énoncés supplémentaires rendent les cellules carrées (comme un vrai damier).
Sous MakeCheckerboard () Dim R comme long, C comme long pour R = 1 à 8 si WorksheetFunction. IsOdd (R) Alors pour C = 2 à 8 Étape 2 Cells (R, C). Intérieur. Couleur = 255 Suivant C Sinon Pour C = 1 à 8 Étape 2 Cellules (R, C). Intérieur. Couleur = 255 Next C End Si Next R Rows ("1: 8").RowHeight = 35 colonnes ("A: H"). ColumnWidth = 6. 5 End Sub
