Dans cet article, nous avons couvert différents types de boucles utilisées dans VBA et comment les utiliser pour accomplir la même tâche de différentes manières.

Pourquoi des boucles?

Le bouclage est l’une des techniques de programmation les plus puissantes utilisées dans de nombreux langages de programmation. Le bouclage est utilisé pour répéter un bloc de code le nombre de fois requis ou jusqu’à ce qu’une condition donnée soit évaluée à vrai ou qu’une valeur spécifique soit atteinte, après quoi le bloc de code suivant est exécuté.

Le but d’une boucle Excel VBA est de faire en sorte qu’Excel répète un morceau de code un certain nombre de fois. On peut spécifier combien de fois un code doit être répété sous forme de nombre fixe (par exemple, faites-le 10 fois) ou en tant que variable (par exemple, faites-le autant de fois qu’il y a de lignes de données).

Les boucles Excel peuvent être construites de différentes manières pour s’adapter à différentes circonstances. Souvent, les mêmes résultats peuvent être obtenus de différentes manières en fonction de vos préférences personnelles.

Il existe trois types de boucles disponibles dans Excel VBA, à savoir:

  1. DO JUSQU’À Loop 2. DO WHILE Loop 3. FOR Loop {vide} 1. Boucle DO UNTIL La boucle DO UNTIL est utilisée pour répéter un bloc de code indéfiniment, jusqu’à ce que la condition spécifiée soit définie sur True. La condition peut être vérifiée au début ou à la fin de la boucle. L’instruction DO UNTIL… LOOP teste la condition au début, tandis que l’instruction DO… LOOP UNTIL teste la condition à la fin de la boucle.

Syntaxe de l’instruction DO UNTIL… LOOP

Faire jusqu’à [Condition]

{vide} [Bloc de code à répéter]

Boucle

Syntaxe de l’instruction DO… LOOP UNTIL

Do {vide} [Bloc de code à répéter]

Boucle jusqu’à [Condition]

Nous avons expliqué la boucle DO… UNTIL avec un exemple. Les macros Loop1 et Loop2 sont utilisées pour calculer la moyenne des nombres dans la colonne A et la colonne B à l’aide de la boucle DO… UNTIL.

Les données d’échantillon sont présentes dans la plage A15: B27. La colonne A contient les scores du premier tour et la colonne B contient les scores du deuxième tour. Nous voulons calculer les moyennes des scores du premier tour et du deuxième tour dans la colonne C.

Sample1

Dans la macro Loop1, nous avons utilisé «FormulaR1C1» pour insérer une formule moyenne dans la cellule active. L’instruction de condition dans la boucle DO UNTIL est vérifiée à la fin de la boucle.

Dans la macro Loop2, nous avons utilisé «WorksheetFunction.Average» pour insérer une valeur moyenne dans la cellule active. Même dans cette macro, l’instruction de condition est vérifiée à la fin de la boucle.

La seule différence entre les macros Loop1 et Loop2 est que Loop1 insère la formule moyenne, tandis que Loop2 calcule la moyenne, puis insère la valeur moyenne dans la cellule active.

OutputSample1

{vide} 2. Boucle DO WHILE La boucle DO WHILE est utilisée pour répéter un bloc de code un nombre indéfini de fois, tandis que la condition spécifiée continue à être True et s’arrête lorsque la condition renvoie False. La condition peut être vérifiée au début ou à la fin de la boucle. L’instruction DO WHILE… LOOP teste la condition au début, tandis que l’instruction DO… LOOP WHILE teste la condition à la fin de la boucle. L’instruction DO… LOOP WHILE est utilisée lorsque nous voulons que la boucle exécute le bloc de code au moins une fois avant de vérifier la condition.

Syntaxe de l’instruction DO WHILE… LOOP

Faire pendant [Condition]

{vide} [Bloc de code à répéter]

Boucle

Syntaxe de l’instruction DO… LOOP WHILE

Do {vide} [Bloc de code à répéter]

Boucle While [Condition]

Dans cet exemple, les macros Loop3 et Loop4 sont utilisées pour calculer les moyennes des valeurs des cellules de la colonne A et de la colonne B. Les deux macros fonctionnent sur les mêmes exemples de données que celles utilisées par les macros Loop1 et Loop2. Les deux utilisent l’instruction DO WHILE pour parcourir la plage qui contient les données.

La seule différence entre les macros Loop3 et Loop4 est qu’il s’agit de manières différentes de représenter les conditions de la boucle DO WHILE.

Comme les macros Loop3 et Loop4 utilisent les mêmes données d’entrée et exécutent même les mêmes fonctions que la macro Loop1, de sorte que la sortie renvoyée sera également la même que celle de la macro Loop1.

{vide} 3. Boucle FOR La boucle For est utilisée pour répéter un bloc de code un certain nombre de fois.

Syntaxe de la boucle FOR

Pour count_variable = start_value To end_value {vide} [bloc de code]

La macro suivante count_variable Loop5 montre comment utiliser la boucle FOR pour calculer la moyenne. Il utilise également les mêmes exemples de données que ceux utilisés par d’autres macros. Nous avons utilisé 15 comme valeur de départ car les données d’exemple commencent à partir de la 15 ^ e ^ ligne. Nous avons utilisé Range (« A » & Cells.Rows.Count) .End (xlUp) .Row pour trouver la dernière ligne contenant des données. La boucle FOR se répétera (lastcell- 15) plusieurs fois.

La sortie renvoyée après l’exécution de la macro Loop5 est la même que celle de la macro Loop1.

La macro Loop6 est créée pour calculer la moyenne, uniquement si la cellule active qui aura la fonction moyenne est vide avant d’exécuter la macro.

Des exemples de données pour cette macro sont présents dans la plage E15 à G27.

Sample2

Nous avons utilisé DO… LOOP WHILE pour parcourir la plage définie. L’instruction IF est utilisée pour vérifier si la cellule dans laquelle la fonction sera insérée contient une valeur. Cette macro insérera une fonction moyenne dans la cellule uniquement si elle est vide.

OutputSample2

La macro Loop7 est également utilisée pour calculer la moyenne. Il vérifie les valeurs dans la colonne d’assistance avant d’évaluer s’il faut recommencer. Il vérifie également si la référence de cellule à utiliser dans la fonction de moyenne est vide.

Les données d’échantillon utilisées pour la macro Loop7 sont dans la plage J15: M27.

Sample3

La colonne M est utilisée comme colonne d’assistance. Cette macro insérera une fonction moyenne uniquement si une cellule de la colonne M n’est pas vide. Cette macro vérifie qu’une cellule doit être vide avant d’y insérer une fonction moyenne. Il n’insérera pas de fonction moyenne si la cellule référencée dans la fonction moyenne est vide.

OutputSample3

Veuillez suivre ci-dessous pour le code

Option Explicit

Sub Loop1()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

Range("C15").Select

Do

'Assigning average function on value in cells of previous two consecutive columns

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

'Moving to cell in next row

ActiveCell.Offset(1, 0).Select

'Checking whether value in cell of previous column is empty

'Do Until loop will loop until condition statement returns True

Loop Until IsEmpty(ActiveCell.Offset(0, -1))

Range("A15").Select

End Sub

Sub Loop2()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

'This macro is similar to macro Loop1, only way of calculating average is different

Range("C15").Select

Do

'Worsheet.Average function is used for calculating the average

ActiveCell.Value = WorksheetFunction.Average(ActiveCell.Offset(0, -1).Value, _

ActiveCell.Offset(0, -2).Value)

ActiveCell.Offset(1, 0).Select

Loop Until IsEmpty(ActiveCell.Offset(0, -1))

Range("A15").Select

End Sub

Sub Loop3()

'Calculating average

'Do While loop will run until cell in the previous column of active cell is empty

Range("C15").Select

'Checking whether value in cell of previous column is empty

'Do While loop will loop until condition statement is True

Do While IsEmpty(ActiveCell.Offset(0, -1)) = False

'Assigning average function on value in cells of previous two consecutive column

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

'Moving to cell in next row

ActiveCell.Offset(1, 0).Select

Loop

Range("A15").Select

End Sub

Sub Loop4()

'Calculating average

'Do While loop will run until cell in the previous column of active cell is empty

'This macro is similar to macro Loop3, only way of applying condition is different

Range("C15").Select

Do While Not IsEmpty(ActiveCell.Offset(0, -1))

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

ActiveCell.Offset(1, 0).Select

Loop

Range("A15").Select

End Sub

Sub Loop5()

'FOR loop repeats for a fixed number of times determined by the number of rows

Dim i, lastcell As Long

'Finding the last row containing data in column A

lastcell = Range("A" & Cells.Rows.Count).End(xlUp).Row

Range("C15").Select

'i variable is assigned value of 15 as our sample data begin from 15th row

'FOR Loop will loop x

For i = 15 To lastcell

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

ActiveCell.Offset(1, 0).Select

Next i

Range("A15").Select

End Sub

Sub Loop6()

'Calculating average

'Do Until loop will loop until cell in the previous column of active cell is empty

'It does not calculate an average if there is already something in the cell

Range("G15").Select

Do

If IsEmpty(ActiveCell) Then

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

End If

ActiveCell.Offset(1, 0).Select

Loop Until IsEmpty(ActiveCell.Offset(0, -1))

Range("E15").Select

End Sub

Sub Loop7()

'Do Until loop runs as long as there is something in cell in next column

'It does not calculate an average if there is already something in the active cell

'Nor if there is no data in cells which are used within average function (to avoid #DIV/0 errors).

'Calculating average

Range("L15").Select

Do

If IsEmpty(ActiveCell) Then

If IsEmpty(ActiveCell.Offset(0, -1)) And IsEmpty(ActiveCell.Offset(0, -2)) Then

ActiveCell.Value = ""

Else

ActiveCell.FormulaR1C1 = "=Average(RC[-1],RC[-2])"

End If

End If

ActiveCell.Offset(1, 0).Select

Loop Until IsEmpty(ActiveCell.Offset(0, 1))

Range("J15").Select

End Sub

Si vous avez aimé ce blog, partagez-le avec vos amis sur Facebook et Facebook.

Nous serions ravis de vous entendre, faites-nous savoir comment nous pouvons améliorer notre travail et le rendre meilleur pour vous. Écrivez-nous à [email protected]