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 WhileConnexion
 


Dans cet article... 
  • La boucle While
  • Exemple
  • Boucles imbriquées
  •  Article mis à jour le 09/12/2013

    La boucle While

    Il existe plusieurs instructions de boucles (ou d'itérations) en Visual Basic, dont la célèbre boucle For/Next. Mais la structure While/Wend est sans doute plus souple, plus souvent utilisable. Sa forme générale est :

    While condition
       instruction1
       instruction2
    Wend

    Exemple

    1. ' Valeur de départ
    2. i = 1
    3.  
    4. ' Boucle
    5. While i <= 5
    6.    ' Un message pour afficher la valeur de i dans la boucle
    7.    MsgBox "i a actuellement pour valeur : " & i
    8.  
    9.    ' Augmenter la valeur de i
    10.    i = i + 1
    11. Wend

    Même si l'exemple ci-dessus n'est pas spectaculaire (et pas très utile !), il a le mérite de démontrer tous les aspects d'une boucle réussie :

    • 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.
    • La condition While (Tant que) ressemble à ce que vous écririez dans un If. Les opérateurs et les mots-clefs And et Or peuvent être utilisés de la même manière. Reportez-vous à l'article Conditions (If) pour plus de détails.
    • Toutes les instructions comprises entre le While et le Wend (contraction de While End) sont exécutées tant que la boucle tourne (dans notre exemple, tant que i est inférieur ou égal à 5).
    • N'oubliez pas de faire en sorte que la condition évolue (dans l'exemple, i est augmenté de 1 à chaque itération). Si la condition n'évolue pas, vous obtenez une boucle infinie !

    Interrompre une boucle infinie
    Si votre programme tourne en boucle sans fin, vous pouvez l'interrompre grâce à la combinaison de touches Ctrl+Pause. Ouf, sauvé !

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

    Boucles imbriquées

    Les blocs VB/VBA peuvent être imbriqués. Ce qui veut dire

    • Qu'un bloc While / Wend peut contenir un autre bloc While / Wend, et ce à plusieurs niveaux.
    • Qu'un bloc While / Wend peut contenir un bloc If / End If. Ou l'inverse !

    Voici par exemple comment imbriquer 2 While pour afficher une table de multiplication dans la fenêtre Exécution :

    1. Sub WhileImbriques()
    2.   Dim i As Integer
    3.   Dim j As Integer
    4.  
    5.   ' Valeur de départ de la boucle 1
    6.   i = 1
    7.  
    8.   ' Boucle 1
    9.   While i < 10
    10.     ' Valeur de départ de la boucle 2
    11.     j = 1
    12.    
    13.     ' Boucle 2
    14.     While j < 10
    15.       Debug.Print StringFormat("{0} x {1} = {2}", i, j, i * j)
    16.      
    17.       ' Augmenter la valeur de j
    18.       j = j + 1
    19.     Wend
    20.    
    21.     ' Augmenter la valeur de i
    22.     i = i + 1
    23.   Wend
    24. End Sub
    25.  

    Important
    Pour éviter la lourdeur des concaténations (et simplifier un peu le listing), ce bout de code fait appel à la fonction StringFormat() traitée sur cette page du site. Cette fonction doit être présente dans un module standard de votre base de données pour que le Debug.Print ci-dessus fonctionne.

    Voici un extrait du résultat obtenu :

    Vous remarquerez que, si la boucle 2 est imbriquée dans la boucle 1, toute la structure de la boucle 2 — y compris la réinitialisation de la variable j — doit être incrustée dans la boucle 1.

    Si vous déplacez le j = 1 juste après le i = 1 (donc hors de la boucle 1), vous changez l'effet du programme : seule la table de multiplication de 1 s'affiche puisque :

    1. i va boucler une première fois sur la valeur 1.
    2. j va boucler sur toutes ses valeurs, de 1 à 9, dans la boucle 2. Ce qui affiche toute la table 1x1, 1x2, 1x3, etc.
    3. Mais après cette boucle, j n'est plus réinitialisé. Donc i va bien continuer de 2 à 9 (boucle 1), mais la boucle intérieure (boucle 2) ne sera plus jamais parcourue, puisque la condition n'est pas vérifiée.

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





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