• 10 hours
  • Easy

Free online content available in this course.

You can get support and mentoring from a private teacher via videoconference on this course.

Got it!

Last updated on 1/7/13

Des boucles qui tournent

Log in or subscribe for free to enjoy all this course has to offer!

Vous savez sûrement qu'un ordinateur calcule beaucoup plus vite que vous... Il va donc falloir lui apprendre à attendre l'utilisateur ! Et ce chapitre est fait pour ça.

For... Next

Qu'est-ce qu'une boucle ?

Les boucles permettent de répéter une même action plusieurs fois, en n'écrivant qu'une seule fois la procédure.
Trois types de boucles s'offrent à vous, plusieurs critères permettent de choisir la plus adaptée à votre cas.

Boucle de type "Pour" (For - Next)

Cette boucle s'utilise lorsque le nombre de fois que nous devons parcourir la boucle est DÉTERMINÉ.
Que ce soit une constante, ou une valeur contenue dans une variable, si ce nombre est accessible par le programme alors cette boucle est la plus adaptée.

Fonctionnement

Cette boucle fonctionne à l'aide d'un compteur qui utilise une variable généralement appelée $i.

For $i = <valeur de départ> To <valeur d'arrivée> Step <pas>

    ; Actions à effectuer

Next
Exemple 1

Code:

For $i = 0 To 10

    msgbox(0,"Tutoriel", $i)

Next

Ceci nous affichera successivement : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.

Et si je ne veux afficher que 0, 2, 4, 6, 8, 10, je fais comment ?

Il suffit d'ajouter un "Step" à la fin de la ligne For, comme ceci :

For $i = 0 To 10 Step 2

    msgbox(0,"Tutoriel", $i)

Next

0n a maintenant : 0, 2, 4, 6, 8, 10.

Exemple 2

Compte à rebours.

Je voudrais que vous fassiez un mini-mini-TP (ne prenez pas peur ;) ).
Très simple, il faut demander à l'utilisateur d'entrer un nombre, puis le programme va afficher une message box avec ce nombre et quand l'utilisateur cliquera dessus, le nombre du dessous apparaîtra... Magique ? Non ! (Oh, Oh, Oh, It's Magic, you know... :magicien: )

Vous devrez utiliser la fonction InputBox, alors n'hésitez pas à aller voir dans l'aide comment elle fonctionne, quels sont ses paramètres. Vous verrez qu'elle n'est pas très différente de MsgBox que nous avons vue précédemment.

Fini ? Ça devrait ressembler à quelque chose comme ça :

$depart = InputBox("Tutoriel", "Entrez un nombre :")

For $i = $depart To 1 Step -1
    MsgBox(0,"Tutoriel", $i)
Next
MsgBox(0,"Tutoriel", "ZÉRO !")

Vous n'avez pas fait la même chose ? Ce n'est pas grave, je vous donne une chance de vous rattraper plus bas ! ;)

While... WEnd

Mais quand j'attends que l'utilisateur fasse quelque chose, je ne sais pas combien de boucles je dois effectuer, comment faire ?

Nous allons alors utiliser une boucle plus adaptée, la boucle "Tant que".

Boucle de type "Tant que" (While - WEnd)

Cette boucle s'utilise quand le nombre de fois que l'action doit être effectuée est inconnu. Si la proposition est fausse dès le départ, la boucle ne se lance pas.
Cette boucle n'a pas besoin de compteur pour fonctionner, la boucle est simplement effectuée tant que la condition reste vraie.

Fonctionnement
Tant que (condition est vraie)

     On effectue ces actions

Fin

Ce qui se traduit en Autoit par :

While [signifie littéralement tant que] (proposition est vraie)

    ;Actions à effectuer

WEnd
Exemple

Les boucles sont très utilisées pour attendre une action de l'utilisateur. En effet, il est impossible de savoir exactement quand l'utilisateur va enfin se décider à faire quelque chose. Alors c'est au programme de l'attendre (l'utilisateur est beaucoup plus long, si si je vous assure :lol: ).

Cesse tes bavardages inutiles, et continue ton tutoriel !

OK les amis, restons calmes ! :-°

Imaginons que la variable $quitter prenne la valeur 1 quand l'utilisateur décide de quitter le programme.
On a donc :

While ( $quitter <> 1 )

    ;Actions du programme

WEnd

Très souvent on va utiliser une boucle sans fin, c'est-à-dire que théoriquement elle ne s'arrêtera jamais.
Pour faire une boucle sans fin, on peut déclarer une boucle "tant que" de la manière suivante :

While 1

    ;action à répéter sans fin

WEnd

Cette boucle est ce que l'on peut appeler la partie principale du programme. Celui-ci va se balader dans la boucle en permanence, et s'il rencontre des If valables (cf. actions sous conditions), il va faire différentes actions.

On va donc tout simplement dire au programme de faire des pauses de temps en temps.
Je sais que ce chapitre est très difficile (d'ailleurs je vous conseille de faire une pause après), mais voilà le code que j'ai utilisé afin de savoir combien de tours faisait le programme en 1 seconde :

Local $t = TimerInit(),$i = 0 ; Declaration des variables

While TimerDiff($t)<=1000 ; Boucle principale. Tant que le temps est inférieur à une seconde, on additionne 1 à la variable $i
        $i = $i + 1
WEnd
MsgBox(65,"Tutoriel",$i) ; On affiche $i

Ici il n'y a qu'une chose nouvelle, la gestion des Timers. Ces derniers s'utilisent de la manière suivante.
Quand on le veut, on initialise le temps. Puis on demande par une boucle le temps écoulé depuis l'initialisation. Si vous ne voulez pas tout retenir, ne retenez pas ça.
Ce qu'il faut savoir, c'est que chez moi, en 1 seconde, le programme parcourt 175 000 fois la boucle.

Maintenant, nous allons voir une nouvelle fonction.

Sleep(Time)
Time est un entier en millisecondes. Pour pouvoir vérifier, n'oubliez pas d'appuyer sur F1 dans Scite pour accéder à la documentation.

Par exemple :
Sleep(1000)

À la differences des fonctions timer[...](), Sleep() va mettre en pause le programme, ou littéralement le plonger en léthargie. Pour comprendre, ajoutez Sleep(10) dans le code précédent.

Et alors , c'est pas 10 malheureuses millisecondes qui vont changer le monde !

Oh que si, essayez !

Chez moi, le programme ne fait plus que 65 tours au lieu de 175000. Ceci va permettre de libérer de la puissance pour l'ordinateur en restant tout à fait compétitif. Ne vous inquiétez pas, l'utilisateur ne va pas s'aperçevoir du changement, mais l'ordinateur si !
Donc à partir de maintenant, vous allez me faire ce plaisir, vous ajouterez un Sleep(10) dans toutes vos boucles While.

On peut également retrouver la boucle "Pour", vue précédemment, de cette manière
$i = <valeur de départ>
While ($i <> <valeur d arrivée>)

    ;actions à effectuer

    $i = $i + <pas>
WEnd

Do... Until

Boucle "Faire - jusqu'à"

Cette boucle répète une action jusqu'à ce que la condition à atteindre devienne vraie.
Elle est utilisée lorsque le nombre de fois que l'action doit être effectuée est inconnu, mais dans ce cas l'action doit être effectuée AU MOINS une fois.

Fonctionnement
Do

    ;actions à effectuer

Until (proposition)

Quand "proposition" devient VRAIE alors la boucle s'arrête.
Si la proposition est vraie dès le premier passage, l'action s'effectue quand même une fois. En effet la vérification ne se fait qu'à la fin de la boucle.

Exemple

On veut demander un mot de passe à l'utilisateur pour lancer le programme.
Tant qu'il se trompe on lui redemande le mot de passe. On ne sait donc pas combien de fois l'utilisateur va se tromper.
Une boucle while ne convient pas car l'action doit être effectuée au moins une fois.

Code :

Do
    $pass = "mot de passe"
    $input = InputBox("Tutoriel", "Entrez le mot de passe :")

    If ($input <> $pass) Then
        MsgBox(0,"Tutoriel", "Mauvais mot de passe !")
    Else
        MsgBox(0,"Tutoriel", "Le mot de passe est correct !")
    EndIf

Until ($input = $pass)

Ce code ne devrait pas vous poser de réels problèmes, et ce sous-chapitre est déjà assez étoffé pour le remplir encore...
Passons à la suite, voulez vous ? N'hesitez pas à faire une pause pour vous éclaircir les idées. o_O

Pas trop difficile ? La suite l'est un peu plus rassurez-vous !

Example of certificate of achievement
Example of certificate of achievement