Boucles de répétition du code

Microsoft VBScript

Microsoft® Visual Basic® Scripting Edition Boucles de répétition du code  Didacticiel VBScript 
 Précédent 
Suivant 


Utilisation des boucles pour répéter du code
Les boucles vous permettent de répéter l'exécution d'un groupe d'instructions. Certaines boucles répètent les instructions jusqu'à ce qu'une condition ait pour valeur False (fausse) ; d'autres répètent les instructions jusqu'à ce qu'une condition ait pour valeur True (vraie). Il existe aussi des boucles qui répètent des instructions un nombre de fois spécifié.

Les instructions de boucle suivantes sont disponibles dans VBScript :

  • Do...Loop : effectue une boucle tant qu'une condition est True ou jusqu'à ce qu'elle le devienne.
  • While...Wend : effectue une boucle tant qu'une condition a pour valeur True.
  • For...Next : utilise un compteur pour exécuter des instructions un nombre de fois spécifié.
  • For Each...Next : répète un groupe d'instructions pour chaque élément d'une collection ou pour chaque élément d'un tableau.

Utilisation des boucles Do
Vous pouvez utiliser les instructions Do...Loop pour exécuter un bloc d'instructions un nombre de fois indéfini. Les instructions sont répétées tant qu'une condition a pour valeur True ou jusqu'à ce qu'elle ait pour valeur True.
Répétition d'instructions tant qu'une condition a pour valeur True
Utilisez le mot clé While pour contrôler une condition dans une instruction Do...Loop. Vous pouvez contrôler la condition avant d'entrer dans la boucle (comme dans l'exemple CtrlPremierWhile suivant) ou après que la boucle se soit exécutée au moins une fois (comme dans l'exemple CtrlDernierWhile suivant). Dans la procédure CtrlPremierWhile, si monNum a pour valeur 0 au lieu de 20, les instructions à l'intérieur de la boucle ne s'exécuteront jamais. Dans la procédure CtrlDernierWhile, les instructions à l'intérieur de la boucle s'exécutent une seule fois parce que la condition a déjà pour valeur False.
 Sub CtrlPremierWhile()
     Dim compteur, monNum
     compteur = 0
     monNum = 20
     Do While monNum > 10
         monNum = monNum - 1
         compteur = compteur + 1
     Loop
     MsgBox "La boucle a effectué " & compteur & " répétitions."
 End Sub

 Sub CtrlDernierWhile()
     Dim compteur, monNum
     compteur = 0
     monNum = 9
     Do
         monNum = monNum - 1
         compteur = compteur + 1
     Loop While monNum > 10
     MsgBox "La boucle a effectué " & compteur & " répétitions."
 End Sub
Répétition d'instructions jusqu'à ce qu'une condition prenne la valeur True
Vous pouvez utiliser le mot clé Until de deux façons pour contrôler une condition dans une instruction Do...Loop. Vous pouvez contrôler la condition avant d'entrer dans la boucle (comme dans l'exemple CtrlPremierUntil suivant) ou après que la boucle se soit exécutée au moins une fois (comme dans l'exemple CtrlDernierUntil suivant). La boucle est effective tant que la condition a pour valeur False.
 Sub CtrlPremierUntil()
     Dim compteur, monNum
     compteur = 0
     monNum = 20
     Do Until monNum = 10
         monNum = monNum - 1
         compteur = compteur + 1
     Loop
     MsgBox "La boucle a effectué " & compteur & " répétitions."
 End Sub

 Sub CtrlDernierUntil()
     Dim compteur, monNum
     compteur = 0
     monNum = 1
     Do
         monNum = monNum + 1
         compteur = compteur + 1
     Loop Until monNum = 10
     MsgBox "La boucle a effectué " & compteur & " répétitions."
 End Sub
Sortie d'une instruction Do...Loop dans une boucle
Vous pouvez sortir d'une boucle Do...Loop en utilisant l'instruction Exit Do. En règle générale, vous ne sortez d'une boucle que dans des situations particulières (pour éviter une boucle infinie, par exemple). Dans ce cas, vous devez utiliser l'instruction Exit Do uniquement dans le bloc d'instructions True d'une instruction If...Then...Else. Si la condition a pour valeur False, la boucle s'exécute normalement.

Dans l'exemple ci-dessous, monNum reçoit une valeur qui crée une boucle infinie. L'instruction If...Then...Else contrôle cette condition afin de prévenir une répétition infinie.

 Sub ExempleDeSortie()
     Dim compteur, monNum
     compteur = 0
     monNum = 9
     Do Until monNum = 10
         monNum = monNum - 1
         compteur = compteur + 1
         If monNum < 10 Then Exit Do
     Loop
     MsgBox "La boucle a effectué " & compteur & " répétitions."
 End Sub

Utilisation de While...Wend
L'instruction While...Wend figure dans VBScript à l'intention des utilisateurs avertis. Cependant, en raison du manque de souplesse de While...Wend, il est recommandé d'utiliser plutôt Do...Loop.
Utilisation de For...Next
Vous pouvez utiliser les instructions For...Next pour exécuter un bloc d'instructions un nombre de fois spécifié. Pour les boucles, utilisez une variable compteur dont la valeur est augmentée ou diminuée à chaque répétition de la boucle.

Dans l'exemple ci-dessous, la procédure MaProc s'exécute 50 fois. L'instruction For spécifie la variable compteur x et ses valeurs de début et de fin. L'instruction Next incrémente la variable compteur de 1.

 Sub ExecMaProc50fois()
     Dim x
     For x = 1 To 50
         MaProc
     Next
 End Sub
Grâce au mot clé Step, vous pouvez spécifier la valeur d'incrémentation ou de décrémentation de la variable. Dans l'exemple ci-dessous, la variable compteur j est incrémentée de 2 à chaque itération de la boucle. Lorsque la boucle se termine, le total est la somme de 2, 4, 6, 8 et 10.
 Sub TotalDes2()
     Dim j, total
     For j = 2 To 10 Step 2
         total = total + j
     Next
     MsgBox "Le total est " & total
 End Sub
Pour décrémenter la variable compteur, vous utilisez une valeur de Step négative. Vous spécifiez alors une valeur de fin inférieure à la valeur de départ. Dans l'exemple ci-dessous, la variable compteur monNum est décrémentée de 2 à chaque itération de la boucle. Lorsque la boucle se termine, le total est la somme de 16, 14, 12, 10, 8, 6, 4 et 2.

 Sub NouveauTotal()
     Dim monNum, total
     For monNum = 16 To 2 Step -2
         total = total + monNum
     Next
     MsgBox "Le total est " & total
 End Sub
Vous pouvez quitter une instruction For...Next avant que le compteur atteigne sa valeur de fin en utilisant l'instruction Exit For. En règle générale, vous ne sortez d'une boucle que dans des situations particulières. En cas d'erreur par exemple, vous devez utiliser l'instruction Exit For uniquement dans le bloc d'instructions True d'une instruction If...Then...Else. Si la condition a pour valeur False, la boucle s'exécute normalement.

Utilisation de Each...Next
Une boucle For Each...Next ressemble à une boucle For...Next. Au lieu de répéter un groupe d'instructions un nombre de fois spécifié, une boucle For Each...Next le répète pour chaque élément d'une collection d'objets ou d'un tableau. Ceci s'avère particulièrement utile lorsque vous ne connaissez pas le nombre d'éléments d'une collection.

Dans l'exemple de code HTML suivant, le contenu d'un objet Dictionary est utilisé pour placer du texte dans plusieurs boîtes de texte :

 <HTML>
 <HEAD><TITLE>Feuilles et éléments</TITLE></HEAD>
 <SCRIPT LANGUAGE="VBScript">
 <!--
 Sub cmdChanger_OnClick
    Dim d                   'Créer une variable 
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "0", "Athènes"     'Ajouter des clés et des éléments
    d.Add "1", "Belgrade"
    d.Add "2", "Le Caire"

    For Each I in d
        Document.frmForm.Elements(I).Value = D.Item(I)
    Next
 End Sub
 -->
 </SCRIPT>
 <BODY>
 <CENTER>
 <FORM NAME="frmForm"

 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Text"><p>
 <Input Type = "Button" NAME="cmdChanger" VALUE="Cliquez ici"><p>
 </FORM>
 </CENTER>
 </BODY>
 </HTML>