Boucles en VBA

Il existe des situations où un programme VBA doit effectuer le même ensemble d'actions plusieurs fois de suite (c'est-à-dire répéter plusieurs fois le même bloc de code). Cela peut être fait en utilisant des boucles VBA.

Les boucles VBA incluent :

Ensuite, nous allons examiner de plus près chacun de ces cycles.

Pour l'opérateur de boucle dans Visual Basic

La structure de l'opérateur de boucle Les dans Visual Basic peut être organisé sous l'une des deux formes suivantes : en tant que boucle Pour… Suivant ou en boucle Pour chaque.

Cycle "Pour … Suivant"

Cycle Pour… Suivant utilise une variable qui prend séquentiellement des valeurs dans une plage donnée. A chaque changement de la valeur de la variable, les actions contenues dans le corps du cycle sont effectuées. C'est facile à comprendre à partir d'un exemple simple :

Pour i = 1 à 10 Total = Total + iTableau(i) Prochain i

Dans cette simple boucle Pour… Suivant la variable est utilisée i, qui prend séquentiellement les valeurs 1, 2, 3, … 10, et pour chacune de ces valeurs, le code VBA à l'intérieur de la boucle est exécuté. Ainsi, cette boucle somme les éléments du tableau. iTableau en variable Total.

Dans l'exemple ci-dessus, l'incrément de boucle n'est pas spécifié, donc pour incrémenter la variable i de 1 à 10, la valeur par défaut est un incrément 1… Cependant, dans certains cas, il est nécessaire d'utiliser des valeurs d'incrément différentes pour la boucle. Cela peut être fait en utilisant le mot-clé étapescomme le montre l'exemple simple suivant.

Pour d = 0 à 10 Étape 0.1 dTotal = dTotal + d Prochain d

Étant donné que dans l'exemple ci-dessus, le pas d'incrémentation est égal à 0.1, alors la variable dTotal pour chaque répétition du cycle prend les valeurs 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Pour déterminer le pas de boucle dans VBA, vous pouvez utiliser une valeur négative, par exemple, comme ceci :

For i = 10 To 1 Step -1 iArray(i) = i Next i

Ici l'augmentation est -1, donc la variable i à chaque répétition du cycle prend les valeurs 10, 9, 8, … 1.

Boucle "Pour chaque"

Cycle Pour chaque semblable à un cycle Pour… Suivant, mais au lieu d'itérer sur la séquence de valeurs de la variable compteur, la boucle Pour chaque exécute un ensemble d'actions pour chaque objet du groupe d'objets spécifié. Dans l'exemple suivant, en utilisant une boucle Pour chaque énumère toutes les feuilles du classeur Excel actuel :

Dim wSheet As Worksheet For Each wSheet in Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet

Instruction d'interruption de boucle "Exit For"

Opérateur Sortie pour utilisé pour interrompre le cycle. Dès que cette instruction est rencontrée dans le code, le programme termine l'exécution de la boucle et procède à l'exécution des instructions qui sont dans le code immédiatement après cette boucle. Cela peut être utilisé, par exemple, pour rechercher une valeur spécifique dans un tableau. Pour ce faire, à l'aide d'une boucle, chaque élément du tableau est parcouru. Dès que l'élément recherché est trouvé, il n'est pas nécessaire de parcourir le reste, le cycle est interrompu.

Application opérateur Sortie pour démontré dans l'exemple suivant. Ici, la boucle parcourt plus de 100 entrées de tableau et compare chacune avec la valeur de la variable dVal… Si une correspondance est trouvée, alors la boucle est terminée :

For i = 1 To 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i

La boucle Do While dans Visual Basic

Cycle Faire pendant exécute un bloc de code tant que la condition spécifiée est remplie. Voici un exemple de procédure Sol, dans lequel en utilisant la boucle Faire pendant Les nombres de Fibonacci ne dépassant pas 1000 sont affichés séquentiellement :

'La procédure Sub génère des nombres de Fibonacci ne dépassant pas 1000 Sub Fibonacci() Dim i As Integer 'compteur indiquant la position de l'élément dans la séquence Dim iFib As Integer 'stocke la valeur actuelle de la séquence Dim iFib_Next As Integer 'stocke la valeur suivante de la séquence Dim iStep As Integer 'stocke la taille de l'incrément suivant 'initialise les variables i et iFib_Next i = 1 iFib_Next = 0 'Do While la boucle s'exécutera jusqu'à ce que la valeur du 'nombre de Fibonacci actuel soit supérieure à 1000 Do While iFib_Next < 1000 If i = 1 Alors 'cas particulier pour le premier élément iStep = 1 iFib = 0 Sinon ' enregistrer la taille du prochain incrément avant d'écraser ' la valeur courante de la séquence iStep = iFib iFib = iFib_Next End If ' imprimer le nombre de Fibonacci courant dans la colonne A de la feuille de calcul active 'dans la ligne avec l'index i Cells(i , 1).Value = iFib 'calcule le prochain nombre de Fibonacci et incrémente l'index de position de l'élément de 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Dans l'exemple donné, la condition iFib_Next < 1000 vérifié au début de la boucle. Ainsi, si la première valeur iFib_Suivant S'il y en avait plus de 1000, la boucle ne serait jamais exécutée.

Une autre façon d'implémenter une boucle Faire pendant - placer la condition non pas au début, mais à la fin de la boucle. Dans ce cas, la boucle sera exécutée au moins une fois, que la condition soit remplie ou non.

Schématiquement, un tel cycle Faire pendant avec la condition à vérifier à la fin ressemblera à ceci :

Faire ... Boucler tant que iFib_Next < 1000

Цикл « Faire jusqu'à » dans Visual Basic

Cycle Faire jusqu'à ce que très similaire au cycle Faire pendant: le bloc de code dans le corps de la boucle est exécuté encore et encore jusqu'à ce que la condition spécifiée soit remplie (le résultat de l'expression conditionnelle est Vrai). Dans la procédure suivante Sol à l'aide d'un cycle Faire jusqu'à ce que récupérer les valeurs de toutes les cellules d'une colonne A feuille de calcul jusqu'à ce que la colonne rencontre une cellule vide :

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'La valeur de la cellule actuelle est stockée dans le tableau dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

Dans l'exemple ci-dessus, la condition EstVide(Cellules(iRow, 1)) situé au début de la structure Faire jusqu'à ce que, donc la boucle sera exécutée au moins une fois si la première cellule prise n'est pas vide.

Cependant, comme indiqué dans les exemples de boucle Faire pendant, dans certaines situations, il est nécessaire que la boucle soit exécutée au moins une fois, quel que soit le résultat initial de l'expression conditionnelle. Dans ce cas, l'expression conditionnelle doit être placée à la fin de la boucle, comme ceci :

Faire ... Boucler jusqu'à ce que IsEmpty(Cells(iRow, 1))

Soyez sympa! Laissez un commentaire