Page 1 sur 1

[R] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 11:32
par Yoyo86220
bonjour a tous!

voici mon probleme j'ai 2 boucle "while 1" et "While 2"
je veu que si il ya une erreur a la fin de ma boucle while 2 que sa revienne au début de ma "while 1" merci de votre aide...

Code : Tout sélectionner

If @error=1 Then return While 1
ceci ne marche pas...

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 12:03
par Tlem
Cela n'est pas possible en l'état.

Si vous intégrez une boucle While (2) dans une boucle While (1), la boucle 1 ne pourra continuer qui si la boucle 2 est terminée, ou si vous en êtes sorti de la boucle par ExitLoop.

Pour ce que vous voulez faire, il vous faudra passer par des fonctions (Regarder dans le tuto pour ca).
Le mieux serait de créer la fonction 1 avec la boucle 1, puis une fonction 2 avec la boucle 2.
Après il vous suffit de gérer les conditions et les exceptions pour lancer la fonction 1 ou 2, ou en sortir.

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 12:10
par Yoyo86220
ok, je regarde... mais au cas ou on c'est pas compri... ma boucle 2 n'est pas dans ma boucle 1 mais apres mintenant...

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 12:15
par Tlem
Ca ne change rien.
Il n'y à pas de commande Goto comme pour le DOS, donc la solution c'est les Fonctions.

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 12:22
par Yoyo86220
d'accor merci de votre aide... je peux pas fair un truc du genre :

metre ça au début de ma première boucle:

Code : Tout sélectionner

$sortie = 1
et a la fin de ma deuxième:

Code : Tout sélectionner

If @error = 1 Then Return 1
ou quelque chose dans ce steal...
si se n'est pas dutout ça, pouvez vous me donner le tuto sur les fonctions...

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 12:52
par Tlem
La commande Return sert justement aux fonctions.

On place cette commande en sortie de fonction, pour retourner une valeur de contrôle.
Ce qui fait que vous pouvez faire quelque chose comme ceci :

Code : Tout sélectionner

$Res = MaFonction1()
If $Res = 1 Then Msgbox(0,"Retour","La fonction 1 à retourné le code 1")

$Res = MaFonction2()
If $Res = 0 Then Msgbox(0,"Retour","La fonction 2 à retourné le code 0")

Func MaFonction1()
     Return 1
EndFunc

Func MaFonction2()
     Return 0
EndFunc
On peut aussi simplifié ce genre de code par l'envois d'une valeur qui sera traitée :

Code : Tout sélectionner

$Res = MaFonction(1)
Msgbox(0,"Retour","La fonction à retourné le code " & $Res)

$Res = MaFonction(0)
Msgbox(0,"Retour","La fonction à retourné le code " & $Res)

Func MaFonction($Val)
     Return $Val
EndFunc
 

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 15:33
par Yoyo86220
voici mon sript:
► Afficher le texte

donc voila il m'indique des erreurs que faire ??....

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 15:37
par Tlem
Yoyo86220 a écrit :donc voila il m'indique des erreurs que faire ??....
Lire l'aide et le tutoriel qui parle de la fonction, et corriger le code pour que ça fonctionne. :P

Je vous ai expliqué comment faire une fonction ... Mettez en pratique.

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 15:46
par Yoyo86220
lol oki merci (je n'ai que 13ans) je vais chercher quand meme

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 16:00
par Yoyo86220
Snifff durdur je ne comprends pas comment marche une fonction...

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 16:19
par Tlem
Les exemples de mon post http://www.autoitscript.fr/forum/viewto ... 3943#p3943 ne peuvent être plus simple.

Au lieu de poster à tout vent : Lire l'aide et les posts du forum/Essayer/re-lire l'aide et les posts/Ré-essayer ...

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 17:26
par Yoyo86220
j'explique doucement mais surment... :D


comment fait-on pour ne pas avoir de Msgbox... je veux garder la fonction mais sans msgbox... merci a tous apres ceci j'aurais fini...

Code : Tout sélectionner

   $Res = MaFonction1()
  If $Res = 1 then ....

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 17:41
par ani
Faut juste retirer la ligne concerné msgbox(..........)
ou tu peux indiquer le caractère point virgule au début de la ligne comme ci-dessous

Code : Tout sélectionner

;msgbox(0,"titre","texte")

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 18:42
par Yoyo86220
Donc j'ai tjr un probleme :

► Afficher le texte
la fonction ne revient pas au début... aide plz

Re: [..] Revenir a la boucle précédente

Posté : dim. 16 mars 2008 22:56
par Tlem
Vous n'avez visiblement pas compris la philosophie d'une fonction.

Une fonction est un bout de code déclaré fonction qui est appelé n'importe ou dans votre code.

J'avais mis le code Return 1 pour l'exemple, mais le but dans votre cas est d'intégrer vos boucle While dans des fonctions différentes.

Sinon, une autre solution consisterait à utiliser les commandes Select/EndSelect dans ce genre :

Code : Tout sélectionner

$Res = 0

While 1  ; Boucle Infinie.

    Select  ; Selection de la condition.
        Case $Res = 0 ; Condition si $Res = 0
            MsgBox(0, "", "Res = 0") ; Au lieu de ceci mettez votre première boucle
            $Res = 1 ; Ici je met $Res = 1 pour pouvoir aller dans l'autre case.
        
        Case $Res = 1 ; Condition si $Res = 1
            MsgBox(0, "", "Res = 1") ; Au lieu de ceci mettez votre deuxième boucle
            $Res = 3 ; Ici je met $Res = 3 pour pouvoir sortir.
        
        ; Cette condition n'est là que pour traiter les cas autres que ceux traités
        ; précédement (Au cas ou il y aurais un cas supplémentaire).
        Case Else ; Signifie autre cas (Que $Res=0 ou $Res=1)
            $Res = 3 ; je met $Res = 3 pour pouvoir sortir.
    EndSelect ; Fin de selection de la condition.

If $Res = 3 Then ExitLoop ; Si $Res=3, je sort de la boucle While, sinon on continue.
WEnd ; Fin de la boucle.
 
Le code si-dessus est suffisement commenté pour votre compréhension, merci de l'adapter à vos besoins.