Boucle for & while imbriquée

cs_antoine76 Messages postés 30 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 20 juillet 2005 - 21 juin 2005 à 14:03
cs_antoine76 Messages postés 30 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 20 juillet 2005 - 22 juin 2005 à 10:41
Salut a tous,

voila, j ai un petit problème. J ai une liste ou je recupere tous les services windows actifs sur ma machine et je voudrais lire dans cette liste et tester si tel ou tel service est actif. J'ai fait un morceau de code mais ca marche pas.
Do While (n True Or i Me!List1.ListCount - 1)
For i = 0 To (Me!List1.ListCount - 1)
If List1.List(i) = "Serveur" Then
n = True
Else: n = False
End If
Next
Loop
If n = True Then
Affichage.Text = Affichage.Text & vbCrLf & "service actif"
Else
Affichage.Text = Affichage.Text & vbCrLf & "service desactivé"
End If

Ca marche pas et je comprends pas pourquoi, n prend tjs la valeur false alors que le service est démarre ( et donc ds la listbox), voila si quelqun pouvait m'aider...

7 réponses

cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
21 juin 2005 à 14:15
si tu veux tester un service particulier "Serveur", si il a plusieurs serveur ma solution ne marche pas.
Do While (n False Or i Me!List1.ListCount - 1)
For i = 0 To (Me!List1.ListCount - 1)
If List1.List(i) = "Serveur" Then
n = True
'Sort de ta boucle for et par la même occasion du while
exit for
Else: n = False
End If
Next
Loop

@+
LIM
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
21 juin 2005 à 14:16
Si le dernier élément de ta liste est de type Server, tu ne sors jamais de la boucle.







Do While (n True Or i Me!List1.ListCount - 1)

For i = 0 To (Me!List1.ListCount - 1)

If List1.List(i) = "Serveur" Then

n = True

Else: n = False

End If

Next

Loop

If n = True Then

Affichage.Text = Affichage.Text & vbCrLf & "service actif"

Else

Affichage.Text = Affichage.Text & vbCrLf & "service desactivé"

End If



L'intérieur de ta boucle For (en orange) s'effectue sur tout les
éléments de ta liste. A la sortie du For, n vaut True ou False, en
fonction du résultat du check de la dernière valeur de ta liste. (n est écrasé à chaque itération).



Si ce dernier élément est de type Serveur, n vaudra TOUJOURS True à la sortie de la boucle For.

Et donc, tu ne sors jamais de ton While.



De même, à la sortie de la boucle For, i vaut forcément Me!List1.ListCount.

Donc ta condition Do While ( i = Me!List1.ListCount - 1) est
toujours fausse après le premier pasage dans la boucle Do While.



Tu t'es emmelé les pinceaux avec les deux structures de bouclage.


Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
cs_antoine76 Messages postés 30 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 20 juillet 2005
21 juin 2005 à 14:37
Merci pour vos reponses, j ai teste ta solution LIM, ca marche nickel quand le service est actif mais par contre si le service n est pas present dans la listbox, ca plante, je suis en train d essayer de gerer le bug
0
cs_antoine76 Messages postés 30 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 20 juillet 2005
21 juin 2005 à 16:51
Do While (n = False Or i = (Me!List1.ListCount - 1))
For i = 0 To (Me!List1.ListCount - 1)
If List1.List(i) = "Serveur" Then
n = True
Exit For
Else: n = False
End If
Next
Loop

j'ai mis ca, quand n est a false, cela me fait une boucle infinie et franchement je capte vraiment pas pourquoi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lim Messages postés 329 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 10 mai 2014 7
21 juin 2005 à 16:56
essaye

do while(n=false and i<>listcount-1)

car là tant que n=false tu reste dans ta boucle ou tan que i=max de ta liste

or si tu arrive à la fin de ta liste avec n=toujours false alors i est égal à max de ta liste donc tu sort pas

dans la solution que je te propose dès que n=true => tu sort
et si n=toujours false mais que i=max de ta liste (tu est arrivé à la fin) tu sort aussi

@+
LIM
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
21 juin 2005 à 23:27
une seule boucle suffit.

n = False

For i = 0 To (Me!List1.ListCount - 1)

If List1.List(i) "Serveur" Then n True: Exit For

Next


Daniel
0
cs_antoine76 Messages postés 30 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 20 juillet 2005
22 juin 2005 à 10:41
Ca marche, j avoue je me suis complique la tache avec mes 2 boucles, merci daniel pk ce petit truc m a bien pris la tete.
0
Rejoignez-nous