TOP

VBA-Leçon 8.1. Boucles (Loops)

YouLibreCalc for Excel logo

Les boucles répètent les instructions plusieurs fois et peuvent faire gagner beaucoup de temps.

Les types de boucles suivants existent dans Excel VBA :

  • While ... Wend
  • Do ... Loop
  • For ... To ... Next

  • Le code suivant insère une séquence de nombres dans chaque cellule de la colonne A (de 1 à 12) :

    Sub while_loop()
    
        Cells(1, 1) = 1
        Cells(2, 1) = 2
        Cells(3, 1) = 3
        Cells(4, 1) = 4
        Cells(5, 1) = 5
        Cells(6, 1) = 6
        Cells(7, 1) = 7
        Cells(8, 1) = 8
        Cells(9, 1) = 9
        Cells(10, 1) = 10
        Cells(11, 1) = 11
        Cells(12, 1) = 12
    
    End Sub
    

    Ce code est très répétitif...

    Imaginez si nous devions insérer des nombres consécutifs dans des centaines de cellules au lieu de seulement 12... Vous comprenez maintenant pourquoi les boucles sont très utiles.

    WHILe ... WEND

    Donnons un exemple de cycle vide While :

    Sub while_loop()
    
        While [condition]
            'Instructions
        Wend
    
    End Sub
    

    Tant que la condition est vraie, les instructions de la boucle continueront à s'exécuter (mais attention à ne pas créer une boucle infinie).

    Vous trouverez ci-dessous la macro de boucle évoquée précédemment, transformée en boucle While :

    Sub while_loop()
    
        Dim num As Integer
        num = 1 'Le numéro de départ (dans ce cas, c'est le numéro de ligne et la valeur définie)
    
        While num <= 12 'Tant que la variable num est inférieure ou égale à 12, les instructions seront exécutées
           Cells(num, 1) = num 'Numérotage
           num = num + 1 'Le nombre est incrémenté de 1 à chaque passage de la boucle
        Wend
           
    End Sub
    

    En utilisant cette boucle dans une macro, tout ce que nous aurions à faire si nous avions besoin de 400 bandes au lieu de 12 serait de remplacer 12 par 400.

    DO ... LOOP

    Il existe une autre façon d'écrire une boucle qui fonctionne de la même manière que While Wend (s'exécutant tant qu'une certaine condition contenue dans la commande While est vraie) :

    Sub do_while_loop()
    
        Do While [condition]
            'Instructions
        Loop
    
    End Sub
    

    La version suivante montre que la condition peut être écrite à la fin de la boucle Do Loop, ce qui signifie que les instructions seront exécutées exactement au moins une fois :

    Sub do_while_loop()
    
        Do
            'Instructions
        Loop While [condition]
    
    End Sub
    

    Au lieu de boucler pendant que la condition est remplie, nous pouvons également quitter la boucle par condition si nous remplaçons While par Until :

    Sub do_while_loop()
    
        Do Until [condition]
            'Instructions
        Loop
    
    End Sub
    

    FOR ... TO ... NEXT

    Sub for_loop()
    
        For i = 1 To 5
            'Instructions
        Next
    
    End Sub
    

    La boucle For se répétera ici 5 fois.

    A chaque fois que ce cycle est répété, la variable i est automatiquement augmentée de 1 :

    Sub for_loop()
    
        For i = 1 To 5
            MsgBox i
        Next
    
    End Sub
    

    Sortie anticipée de la boucle (Exit)

    Il est possible de sortir prématurément de la boucle For en utilisant l'instruction suivante :

    Exit For 'Quitter la boucle For
    

    Prenons un exemple qui montrera clairement ceci :

    Sub for_loop()
        Dim max_loops As Integer
        max_loops = Range("A1") 'Dans la cellule A1, nous avons précisé la limite du nombre de répétitions
    
        For i = 1 To 7 'Nombre de cycles attendu : 7
           If i > max_loops Then 'Si la cellule A1 est vide ou contient un nombre inférieur à 7, réduisez le nombre de répétitions
               Exit For 'Si la condition précédente est TRUE, alors la sortie de la boucle For...loop
           End If
       
           MsgBox i
        Next
    
    End Sub
    

    Autres opérateurs Exit :

    Exit Do 'Sortie de boucle Do Loop
    
    Exit Sub 'Sortie de la procédure
    
    Exit Function 'Fonction de sortie