Boucle sans fin

Résolu/Fermé
gaudian Messages postés 62 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 12 septembre 2007 - 22 juin 2007 à 17:18
 coco - 30 déc. 2007 à 21:04
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

11 réponses

sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
22 juin 2007 à 17:20
lance cet test, lorsque ta case perd le focus (le curseur)
0
gaudian Messages postés 62 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 12 septembre 2007 3
22 juin 2007 à 17:24
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 39407 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 9 décembre 2024 2 104
22 juin 2007 à 17:22
salut

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

pas besoin de boucle ...
0
gaudian Messages postés 62 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 12 septembre 2007 3
22 juin 2007 à 17:25
non les clients souhaitent une boucle pas de if sinon serai trop facile
0
sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
22 juin 2007 à 17:33
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 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 12 septembre 2007 3
22 juin 2007 à 17:37
Je n'ai pas Me.GotFocus dans ma liste déroulante quand je tape Me.
0
sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
22 juin 2007 à 17:46
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 Date d'inscription samedi 9 juin 2007 Statut Membre Dernière intervention 11 septembre 2007 62
22 juin 2007 à 23:12
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 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
23 juin 2007 à 01:51
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 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
24 juin 2007 à 01:05
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 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 12 septembre 2007 3
25 juin 2007 à 09:15
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 Date d'inscription vendredi 22 juin 2007 Statut Membre Dernière intervention 12 septembre 2007 3
25 juin 2007 à 09:54
Merci pour vos aides, j'ai trouver une solution autre que celle-ci, grâce à Err.Raise
0
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