Toute l'actualité de [self-access.com] en direct sur votre ordinateur !  Vous êtes ici : Accueil » Visual Basic » Initiation à VB » Structures de contrôle » Boucles For/NextConnexion
 


La boucle For/Next

Le bloc For/Next est sans doute la forme de boucle la plus connue en VBA. Elle est moins souple que la boucle While, mais très pratique lorsque le point de départ et le point d'arrivée sont connus.

Exemple

  1. Sub TestBoucleFor()
  2.     ' Variable servant de compteur pour la boucle
  3.     Dim i As Integer
  4.    
  5.     ' Boucle
  6.     For i = 1 To 5
  7.         ' Un message pour afficher la valeur de i dans la boucle
  8.         MsgBox "i a actuellement pour valeur : " & i
  9.     Next
  10. End Sub

Cette boucle fait la même chose que notre premier exemple sur While. Certaines remarques sont d'ailleurs identiques :

  • Généralement, une boucle démarre dans un contexte précis. Ici, une variable i a été initialisée avant la boucle, qui servira de compteur pour la boucle.
  • C'est le bloc For qui précise la valeur de départ et la valeur d'arrivée. Dans notre exemple, i part de 1 et ira jusqu'à 5. Le code est plus compact que pour une boucle While.
  • Les valeurs de départ et d'arrivée sont incluses dans la boucle.
  • Toutes les instructions comprises entre le Foret le Next sont exécutées tant que la boucle tourne (dans notre exemple, tant que i est inférieur ou égal à 5).
  • C'est la boucle For qui incrémente automatiquement le compteur de boucle i. L'incrément est implicitement de 1 à chaque tour, i passant donc de 1 à 2, puis 3, etc.

Conseil
Comme pour les autres formes de blocs, il est conseillé d'indenter (décaler) le code entre For et Next, à l'aide d'une tabulation. De cette manière, la boucle est plus lisible, et il est plus facile de détecter un Next manquant, lorsque plusieurs boucles sont imbriquées.

Choisir l'incrément de la boucle

Si vous devez personnaliser l'incrément (ou le "pas") d'une boucle For, ajoutez la clause Step. Vous pouvez de cette manière faire évoluer une boucle de 2 en 2, par exemple.

Dans l'exemple qui suit, le code a été aménagé de cette manière :

  • La variable qui sert de compteur est maintenant de type Single, pour permettre des décimales.
  • Le pas de la boucle est de 0.1.

Par conséquent, la boucle va afficher toutes les valeurs de s allant de 1, 1.1, 1.2... jusqu'à 2 inclus.

  1. Sub TestBoucleForStep()
  2.     ' Variable servant de compteur pour la boucle
  3.     Dim s As Single
  4.    
  5.     ' Boucle
  6.     For s = 1 To 2 Step 0.1
  7.         ' Un message pour afficher la valeur de s dans la boucle
  8.         MsgBox "s a actuellement pour valeur : " & s
  9.     Next
  10. End Sub

Effectuer une boucle inverse

Pour effectuer une boucle inverse (dans notre exemple : de 5 vers 1), il suffit de permuter la borne de départ et celle d'arrivée, tout en définissant un pas négatif. Ce qui donne :

  1. Sub TestBoucleForInverse()
  2.     ' Variable servant de compteur pour la boucle
  3.     Dim i As Integer
  4.    
  5.     ' Boucle
  6.     For i = 5 To 1 Step -1
  7.         ' Un message pour afficher la valeur de i dans la boucle
  8.         MsgBox "i a actuellement pour valeur : " & i
  9.     Next
  10. End Sub

Sortir d'une boucle

Il est possible de forcer la sortie d'une boucle For avant la fin de celle-ci, grâce à l'instruction Exit For. Cette instruction est généralement couplée à une condition : "si telle condition est vérifiée, alors sortir de la boucle".

L'exemple qui suit est identique au premier listing de la page, mais cette fois, on sort de la boucle lorsque le compteur atteint 3.

Bien sûr, cet n'a aucun intérêt pratique : si on sait que la boucle doit s'arrêter à 3, autant écrire For i = 1 to 3...

  1. Sub TestBoucleForAvecSortieForcee()
  2.     ' Variable servant de compteur pour la boucle
  3.     Dim i As Integer
  4.    
  5.     ' Boucle
  6.     For i = 1 To 5
  7.         ' Un message pour afficher la valeur de i dans la boucle
  8.         MsgBox "i a actuellement pour valeur : " & i
  9.  
  10.         If i = 3 Then Exit For
  11.     Next
  12. End Sub

Mes livres sur Access...
[cliquez pour plus d'infos]





Hit-Parade 
 
[ Copyright 1997-2018 hervé inisan, self-access.com Reproduction interdite ]