Do While, passer à Next parès condition

Signaler
-
 Zermelo -
Bonjour,
J'ai créer un script qui ouvre un fichier contenant une liste de serveurs, pour chaque machines j'execute un Psinfo et un ipconfig et je renvoi le résultat dans un fichier.
J'aimerais dans mon "Do While", après que la condition soit testée (If Retour < 0 then....), n'on pas sortir de de la boucle, mais passer au prochain passage de cette boucle.
Le do While en question =>

set readfile = filesys.OpenTextFile(Fic_In, 1, false)
do while readfile.AtEndOfStream=false 
Poste = readfile.ReadLine 
Retour = objShell.Run("%comspec% /c " & Psinfo_Exe & Poste & Sortie, 2, true )
'Msgbox Poste & VbCr & Retour
If Retour < 0 then Echec.Write Poste & VbCr 
objShell.Run("%comspec% /c " & PsExec_cmd & Poste & " ipconfig" & Sortie ), 2, true 
objShell.Run("%comspec% /c echo _____________________________________________________________________" & Sortie ), true 
loop 
readfile.close

11 réponses

Bonjour dmaudine.

Je vous suggère de remplacer la boucle
Do While
........
Loop

par une boucle
Do
........
Loop

dont vous ne sortirez que par un ou des
Exit Do

déclenché par vos tests.

Cordialement.


Étant illettré, je signe d'une croix : ×
Merci,
J'ai déjà tester avec un "Exit Do" placé après mon test , je sors bien de la boucle,
mais ce qui m'intéresse c'est de continuer avec la suite de ma liste, donc de rester dans la boucle...
Le but du test est que si le psinfo échoue je n'exécute plus les instructions qui suivent, mais que je continue avec l'enregistrement suivant.
Peut-être un "branchement" en fin de boucle , mais je ne sais pas comment faire
Re,

Voici la structure de départ de votre boucle.
    Do While Condition1
        Actions1
        If Condition2 Then Actions2
        Action 3
    Loop

Voici la structure que j'espérais après élimination du While
    Do
        If Not Condition1 Then Exit Do
        Actions1
        If Condition2 Then Actions2
        Actions 3
    Loop

Bien sûr c'est équivalent. Mais le but de ce changement est de mettre en regard le Exit Do que j'ai mis avec les autres Exit Do qu'il faudra mettre pour arriver à vos fins. En bref, quelles sont les conditions qui devront déclencher ces Exit Do.


Étant illettré, je signe d'une croix : ×
Re,

À moins que vous ne vouliez faire
    Do
        If Not Condition1 Then Exit Do
        Actions1
        If Condition2 Then
             Actions3
        Else
            Actions2
        End If
    Loop

ou quelque chose de ce genre. À vous de voir.

Cordialement.

Étant illettré, je signe d'une croix : ×
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour, Zermelo.
Il ne veut pas quitter la boucle si condtion1.
Il veut la continuer et ne quitter la boucle que si plus rien à lire dans le fichier (while readfile.AtEndOfStream=false).




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Bonjour ucfoutu.

Il me semble que faire sortir de la boucle par Not Condition1 revient à faire rester dans la boucle par Condition1.
Sauf erreur de ma part, bien entendu.


Avec mes amitiés.


Étant illettré, je signe d'une croix : ×
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Oui.
Mais uniquement, alors, si condition1 est
if readfile.AtEndOfStream=True

Cette condition (et avec false) est plus adroite dans le While
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.

Bonjours à tous les trois

Moi je verrais bien un truc du style :

set readfile = filesys.OpenTextFile(Fic_In, 1, false)
do while readfile.AtEndOfStream=false 
Poste = readfile.ReadLine 
Retour = objShell.Run("%comspec% /c " & Psinfo_Exe & Poste & Sortie, 2, true )
If Retour < 0 then 
                     Echec.Write Poste & VbCr 
                else
     objShell.Run("%comspec% /c " & PsExec_cmd & Poste & " ipconfig" & Sortie ), 2, true 
     objShell.Run("%comspec% /c echo _____________________________________________________________________" & Sortie ), true 
                end if
loop 
readfile.close

Et sans le s a bonjour bien entendu

@ucfoutu, tu donnerais pas des cours de français en ligne ?
    Do While "not EOF"
        Test Condition1
If  Condition1=false Then action1 
Else 
Action2
Action3
        End If
    Loop


J'ai pu m'en sortir en gardant le do While et en placant un "EndIF"
Si la condition1 est fausse j'execute action 1 et je repart à la fin du IF sans executer action2 et action3 pour rentrer à nouveau dans la boucle.
Si la condition1 est vrai, j'execute action2 et action3 sans passer par action1.
Merci pour votre aide,
Bonsoir.

Je suis assez d'accord avec le code proposé pas banana32, que je salue. Par ailleurs, le booléen que j'ai nommé Condition1 est par définition
readfile.AtEndOfStream=false

qui n'est autre que le contraire du booléen
readfile.AtEndOfStream

D'autre part, bonjour est invariable en tant que contraction de
je vous souhaite le bon jour


Or donc, après un cours de mathématiques suivi d'un cours de français,

je vous souhaite une bonne nuit.


Étant illettré, je signe d'une croix : ×