VBA pour la boucle, Utilisation de boucles en VBA dans Microsoft Excel
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:
-
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.
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.
{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.
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.
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.
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.
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]