CathyAstuce

VBA

GEMCCAP CONSEIL INFORMATIQUE BUREAUTIQUE
Formation - Conception Sites Internet
Applications Informatiques Personnalisées
Communauté partenaire Microsoft

BOUCLES

Do...Loop For...Next For each...Next

Remonter II. Do.......Loop

Ces instructions permettent de répéter un bloc d'instructions indéfiniment :

  • jusqu'à ce qu'une condition soit vraie, vous utilisez alors Until devant la condition
  • tant qu'une condition est vraie, vous utilisez alors While devant la condition.

Vous pouvez obliger votre code a exécuter le bloc d'instruction au moins 1 fois, dans ce cas les instructions se présentent ainsi :

Jusque Tant que
Do
      Bloc d'instructions
Loop Until conditions
Do
      Bloc d'instructions
Loop While conditions

Pour vérifier la condition dès le début dans la boucle, elle peut donc ne pas être exécuter une seule fois, utilisez les instructions ainsi :

Jusque Tant que
Do Until conditions
      Bloc d'instructions
Loop
Do While conditions
      Bloc d'instructions
Loop

Tapez puis lancez les exemples suivants,  :
Le message s'affiche Le message ne s'affiche pas car aucune boucle est effectuée
Sub BoucleLoop()
   Dim N As Byte

   N = N + 1
   Do
     MsgBox "Message d'essai"
   Loop Until N = 1
End Sub
Sub BoucleLoop()
   Dim N As Byte

   N = N + 1
   Do Until N = 1
     MsgBox "Message d'essai"
   Loop
End Sub
Sub BoucleLoop()
   Dim N As Byte

   N = N + 1
   Do
     MsgBox "Message d'essai"
   Loop While N < 1
End Sub
Sub BoucleLoop()
   Dim N As Byte

   N = N + 1
   Do While N < 1
     MsgBox "Message d'essai"
   Loop
End Sub

Vous pouvez sortir prématurément d'une boucle en utilisant l'instruction Exit Do, les 2 exemples suivants vous montrent l'utilisation de cette instruction :
Sub BoucleLoop()
  Dim N As Byte

  Do
    N = N + 1
    MsgBox "Message d'essai numéro " & N
  Loop Until N = 5
End Sub
Sub BoucleLoop()
  Dim N As Byte

  Do
    N = N + 1
    MsgBox "Message d'essai numéro " & N
    If N = 2 Then Exit Do
  Loop Until N = 5
End Sub
Ce code affiche 5 fois le message Celui-ci l'affiche 2 fois

Remonter III. For.......Next

Ces instructions permettent de répéter un bloc d'instructions un certain nombre de fois. Vous indiquez la valeur de départ du compteur, la valeur de fin de ce compteur et éventuellement le pas d'incrémentation de cette valeur.
Le code suivant, affiche 3 messages :
Sub BoucleFor()
  Dim N As Byte

  For N = 1 To 3
    MsgBox "Message d'essai numéro " & N
  Next
End Sub

Par défaut la valeur s'incrémente de 1, si vous voulez l'incrémenter différemment ou même la décrémenter utilisez le mot Step :

  • Avec le code For N = 1 To 5 Step 2, la variable N prend les valeurs 1,3 et 5.
  • Avec For N = 5 To 1 Step -2, la variable N prend les valeurs 5,3 et 1.

Vous pouvez sortir prématurément d'une boucle en utilisant Exit For.

Vous pouvez imbriquer plusieurs boucles, mais ces boucles doivent s'imbriquer et non se superposer, pour éviter les erreurs, vous pouvez ajouter le nom de la variable après le mot Next :

Bon Mauvais
Sub BoucleFor()
   Dim Ligne As Byte, Col As Byte

   For Col = 1 To 2
      For Ligne = 1 To 5
         Cells(Ligne, Col) = Ligne & " * " & Col
      Next Ligne
      MsgBox "Colonne n° " & Col & "remplie"
   Next Col
End Sub
Sub BoucleFor()
   Dim Ligne As Byte, Col As Byte

   For Col = 1 To 2
      For Ligne = 1 To 5
         Cells(Ligne, Col) = Ligne & " * " & Col
      Next Col
      MsgBox "Colonne n° " & Col & "remplie"
   Next Ligne
End Sub

 

Remonter IV. For.......Each Next

Ces instructions permettent de répéter un bloc d'instructions pour chaque objet d'une collection ou pour chaque élément d'un tableau. La variable de la boucle est automatiquement affecté à l'objet ou à l'élément. Dans l'exemple suivant, La 1ere boucle remplit un tableau et une plage depuis ce tableau, puis la 2ème lit et sélectionne chaque cellule de la plage de cellules :
Sub BoucleForEach()
   Dim Tableau(4) As String
   Dim N
   Dim Compteur As Byte
   Dim MaCel As Range

   For Each N In Tableau
      Compteur = Compteur + 1
      N = "valeur n°" & Compteur
      Range("A" & Compteur) = N
   Next
   For Each MaCel In Range("A1:A" & Compteur)
      MaCel.Select
      MsgBox MaCel
   Next
End Sub

Vous pouvez sortir prématurément d'une boucle en utilisant Exit For.
AccueilDébut de la page