Boucle sans fin

Résolu
gaudian Messages postés 62 Statut Membre -  
 coco -
Bonjour,

Je dois tester la longueur des mots de passe que saisissent les utilisateurs. Cela fonctionne avec Len.
Mon problème se situe quand l'utilisateur modifie sont mot de passe c'est à dire que maintenant le mot de passe doit comporter 8 caractères en tout, donc j'effectue une boucle dont le bout de code est décris ci-dessous :



While Len(password) < 8
MsgBox ("Mot de passe trop court")
Wend



Au faites, je travaille sous VB 6

Merci d'avance
A voir également:

11 réponses

sfel Messages postés 1645 Statut Membre 430
 
lance cet test, lorsque ta case perd le focus (le curseur)
0
gaudian Messages postés 62 Statut Membre 3
 
En faite, mon interface se presente de la manière suivante :

j'ai 3 textbox :
1. pour l'identifiant
2. pour le mot de passe actuel
3. pour modifier son mot de passe

mais j'ai également un bouton valider

c'est à ce moment là que je dois tester mon mot de passe, ma boucle ne se termine pas.
Je dois permettre à l'utilisateur de ressaisir la modification du password
0
choubaka Messages postés 39984 Statut Modérateur 2 105
 
salut

pourquoi ne pas simplement faire la bonne vieille méthode "IF" ????

pas besoin de boucle ...
0
gaudian Messages postés 62 Statut Membre 3
 
non les clients souhaitent une boucle pas de if sinon serai trop facile
0
sfel Messages postés 1645 Statut Membre 430
 
oui, lorsque tu as Lost_focus, tu test ta cellule, si elle est pas bonne, tu met
Me.GotFocus (ou Me.Getfocus , j'avou que de tête ^^ )
0

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

Posez votre question
gaudian Messages postés 62 Statut Membre 3
 
Je n'ai pas Me.GotFocus dans ma liste déroulante quand je tape Me.
0
sfel Messages postés 1645 Statut Membre 430
 
nan, quand tyu double clique sur ta case de text
il te créé un paragraphe de code???
arrivé sur cette page de code, en haut a droite, tu a une liste déroulante avec "Click" "onchange" "dblClick" ...
0
zefoots Messages postés 146 Statut Membre 62
 
je suis d'accord avec choubaka : quel est l'intérêt de faire une boucle ? Un "if" fonctionnera beaucoup mieux ...

si tu veux malgré tout faire une boucle, tu peux écrire ça :

Do While True
    If Len(password) < 8 Then
        MsgBox ("Mot de passe trop court") 
    End if
    Exit Do
Loop


mais franchement c'est vraiment tordu ...
0
Posotaz Messages postés 505 Statut Membre 225
 
Bonjour,

Je ne suis pas certain d'avoir bien compris la question mais si le sujet est "boucle sans fin" et que le code est

While Len(password) < 8
MsgBox ("Mot de passe trop court")
Wend 


en effet c'est une boucle sans fin puisque tu ne donnes pas la possibilité à ta variable "password" d'être modifiée par une autre saisie de l'utilisateur.

En fait tu es en programmation événementielle. Je me trouve devant ton formulaire pour modifier mon mot de passe, donc sur ton bouton "valider" il suffit de définir dans l'événement "OnClick" (désolé je ne me souviens plus des noms exacts en VB6) :

If(Len(password) < 8)
  MsgBox("Mot de passe trop court, veuillez saisir un mot de passe de 8 caractères minimum")
Else
  'Ici tu fais ton traitement normal (par exemple : appeler la procédure qui modifie le mot de passe, fermer cette fenêtre formulaire et passer à l'écran suivant)
Endif


Les autres intervenants ont raison, tu n'as pas besoin de faire de boucle puisqu'en programmation événementielle tu ne quittes pas l'écran courant tant que l'événement ne l'aura pas autorisé. Le concept est différent par rapport à un programme en mode commandes où là tu dois continuer à demander le nouveau de mot de passe dans une boucle tant que le mot de passe fourni contient au moins 8 caractères, comme tu l'as fait mais en rajoutant une instruction de lecture dans la boucle).

Tu peux faire une boucle si tu veux, par exemple en affichant une boîte de saisie qui revient à chaque fois que le mot de passe introduit comporte moins de 8 caractères. Si tu insistes pour le faire c'est simple :

If(Len(password) < 8)
  Dim pass As String
  pass = InputBox("Veuillez saisir un mot de passe de 8 caractères minimum","Mot de passe trop court")
  While Len(pass) < 8
    pass = InputBox("Veuillez saisir un mot de passe de 8 caractères minimum","Mot de passe trop court")
  Wend
  'Si tu arrives ici tu seras sorti de la boucle (donc tu auras un mot de passe correct) et tu peux lancer les traitements à suivre (les mêmes traitements que si tu allais directement dans le Else)
Else
  'Ici tu fais ton traitement normal (par exemple : appeler la procédure qui modifie le mot de passe, fermer cette fenêtre formulaire et passer à l'écran suivant)
Endif


(à mettre toujours dans l'événement OnClick du bouton "Valider").

Avec cette méthode il redemandera le mot de passe en boucle et sans revenir sur le formulaire (InputBox est une fenêtre modale et de la façon dont on a programmé son appel en boucle, la seule façon d'en sortir est de fournir un mot de passe de 8 caractères au moins).

En espérant avoir pu t'aider, plus simple que ça ce n'est pas possible... en gros c'est un retour à la "programmation en mode commandes" sauf que c'est une fenêtre InputBox qui te fait office de flux de lecture plutôt qu'une invite de commandes. Tu conserves ta boucle et ton problème est résolu. ;-)

Le seul truc qui me désole avec cette méthode c'est que l'utilisateur ne pourra plus annuler la modification du mot de passe. Il devra tuer le process s'il voudra sortir du programme. C'est pour ça qu'on évite d'utiliser des boîtes de saisie en boucle sans gérer l'option "annuler". (https://plasserre.developpez.com/cours/vb-net/ ou https://codes-sources.commentcamarche.net/ si tu veux en savoir plus sur la InputBox).
0
Posotaz Messages postés 505 Statut Membre 225
 
Oups, le code final n'est pas très optimal, on peut simplifier en supprimant le If :

Dim pass as String
pass = password 'Ici je suppose que password est la valeur texte du champ du formulaire.
While Len(pass) < 8
    pass = InputBox("Veuillez saisir un mot de passe de 8 caractères minimum","Mot de passe trop court")
Wend
'Si tu arrives ici tu seras sorti de la boucle ou pas rentré du tout (donc tu auras un mot de passe correct)
'Ici tu fais ton traitement normal (par exemple : appeler la procédure qui modifie le mot de passe, fermer cette fenêtre formulaire et passer à l'écran suivant)
Endif


En fait j'avais rajouté un If (et oublié le Then) parce que j'avais dans l'idée d'afficher un message différent la première fois et les fois suivantes. Mais ici la boucle While fait office de test If : On n'y entre que si le mot de passe contient moins de 8 caractères. C'est ça la maîtrise de l'algorithmie, ça simplifie vachement le code.

Quoi qu'il en soit n'hésite pas à ajouter "Option Explicit" en début de chaque module pour être bien certain que tu utilises exclusivement des variables déclarées. A cet endroit (l'événement Click du bouton Valider) tu as normalement accès au champ texte du mot de passe donc je suppose que "btn_Valider.Text" c'est la variable "password" que tu cites depuis le début et que j'ai repris ici.

A toi de choisir entre les deux solutions : Le If Then Else avec la MessageBox (comme dans ma toute première proposition) et retour (en fait on ne le quitte pas) au formulaire ou le fait de redemander explicitement le mot de passe en boucle par une InputBox.
0
gaudian Messages postés 62 Statut Membre 3
 
Merci de vos infos, mais cela n'empeche pas que le programme de mon partenaire continue de tourner, il m'affiche bien que le mot de passe est trop court mais il le sauvegarde correctement meme s'il possède que 2 caractères.
0
gaudian Messages postés 62 Statut Membre 3
 
Merci pour vos aides, j'ai trouver une solution autre que celle-ci, grâce à Err.Raise
0
coco
 
suite à une boucle sans fin j'ai griller l'ordi de mes parents
l'ordi démard mais rien de s'affiche à l'écran et quand je le débranche il s'allume
merci des me dire si la carte graphique est griller ou nn et ce n'est qu'un virus
0