Dans un programme, il est souvent nécessaire de répéter une ou plusieurs actions jusqu'à ce que quelque chose se passe, ou tant que quelque chose ne s'est pas passé. Nous alons voir ici comment ça se passe. Voici un petit lexique Anglais/Français :
Loop = Boucle (Faire
une boucle, recommencer la boucle)
Do = Faire (Effectuer, faire les actions qui suivent)
While = Tant que (Tant que X = 1, ou Tant que le mot de passe est
erroné)
Until = Jusqu'à ce que (Jusqu'à ce que X = 10, ou Jusqu'à ce que le
mot de passe soit correct)
Premier programme : Simple utilisation de InputBox, sans autre
Sub TestLoop()
Dim Reponse As Integer
Reponse = InputBox("Entrez un chiffre")
End Sub
Ce programme demande un chiffre encore et encore tant que l'utilisateur s'évertue a entrer un autre chiffre que 5
Sub TestLoop2()
Dim Reponse As Integer
Do
Reponse = InputBox("Entrez un chiffre")
Loop While Reponse <> 5
End Sub
Ce programme fait exactement l'inverse : Il Continue tant que l'utilisateur entre 5
Sub TestLoop3()
Dim Reponse As Integer
Do
Reponse = InputBox("Entrez un chiffre")
Loop While Reponse = 5
End Sub
On ajoute ici du code avant la boucle, et après, simplement pour montrer comment généralement un programme se déroule : Une partie d'introduction, la boucle elle-même et ensuite, la conclusion.
Sub TestLoop4()
Dim Reponse As Integer
MsgBox "Début" ' Une seule fois avant la boucle
Do
Reponse = InputBox("Entrez un chiffre")
Loop While Reponse = 5
MsgBox "Fin" ' Une seule fois après la boucle
End Sub
Avec Do While, le programme n'entre pas nécessairement dans la boucle. Si on entre le bon mot de passe immédiatement, le programme s'arrête. Dans l'exemple d'avant on faisait DO quelque chose WHILE une condition, donc on faisait au moins une fois cette chose, tandis qu'ici, c'est DO WHILE une condition, on fait quelque chose. Le programme regarde IMMEDIATEMENT si la condition est satisfaite
Sub TestLoop5()
Dim Reponse As String
Reponse = InputBox("Entrez le mot de passe")
Do While Reponse <> "youpi"
Reponse = InputBox("Mauvaise réponse. Essayez encore")
Loop
End Sub
Ici, par contre, avec le while a la fin de la boucle, le' programme fait AU MOINS une fois "Mauvaise réponse",' meme si l'utilisateur répond tout de suite bien
Sub TestLoop6()
Dim Reponse As String
Reponse = InputBox("Entrez le mot de passe")
Do
Reponse = InputBox("Mauvaise réponse. Essayez encore")
Loop While Reponse <> "youpi"
End Sub
Ici, le principe est le même, mais on utilise UNTIL (Jusqu'a ce que). En fait, on peut passe toute sa vie de programme en utilisant exclusivement WHILE sans jamais utiliser UNTIL. Il suffit de changer la tournure de phrase. WHILE Reponse = "youpi" veut dire exactement la même chose que UNTIL Reponse <> "youpi", Mais dans certains cas, c'est plus pratique d'utiliser WHILE, et dans d'autres cas UNTIL, mais c'est très subjectif.
Sub TestLoop7()
Dim Reponse As String
Reponse = InputBox("Entrez le mot de passe")
Do Until Reponse = "youpi"
Reponse = InputBox("Mauvaise réponse. Essayez encore")
Loop
End Sub
Application complète de boucles pour l'obtention d'un mot de passe. On fait une première demande de mot de passe : "Entrez le mot de passe". Et seulement si l'utilisateur se plante au premier essai, on lui signale qu'il s'est trompé ("Mauvaise réponse. Essayez encore"), et ce message, il va le voir jusqu'à ce qu'il arrête de se tromper (1 fois, 5 fois ou mille fois s'il est vraiment très maladroit, ou s'il a la maladie de parkinson.). A la fin, quand il a enfin tapé le bon mot de passe, le programme lui dit en combien d'essais il a trouvé.
Sub MotPasse()
' Déclaration des variables
Dim Reponse As String ' Contient l'essai de mot de passe
Dim NombreEssai As Integer ' Compte les essais
' Premiere demande :
Reponse = InputBox("Entrez le mot de passe")
' De tout façon, on doit faire au moins 1 essai
NombreEssai = 1
' Faire la boucle JUSQU'A CE QUE L'utilisateur entre youpi
Do Until Reponse = "youpi"
Reponse = InputBox("Mauvaise réponse. Essayez encore")
' On augmente le nombre d'essais :
NombreEssai = NombreEssai + 1
Loop ' Fin de la boucle
' Message de bienvenue final. Si c'est trouvé en un essai,
' écrire au singulier, et écrire au pluriel
' si c'est en plusieurs essais :
If NombreEssai = 1 Then
MsgBox "Mot de passe trouvé au premier Essai"
Else
MsgBox "Mot de passe trouvé en " & NombreEssai & " Essais"
End If
End Sub