Boucle sans fin
Résolu
gaudian
Messages postés
62
Statut
Membre
-
coco -
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
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:
- Boucle sans fin
- Fin des zfe - Guide
- Fin de la 4g en france - Accueil - Guide opérateurs et forfaits
- Fin du partage de compte disney + - Accueil - Streaming
- Fin numericable - Accueil - Box & Connexion Internet
- Chambre 1408 explication fin - Forum Cinéma / Télé
11 réponses
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 ^^ )
Me.GotFocus (ou Me.Getfocus , j'avou que de tête ^^ )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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" ...
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" ...
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 :
mais franchement c'est vraiment tordu ...
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 ...
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
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) :
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 :
(à 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).
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).
Oups, le code final n'est pas très optimal, on peut simplifier en supprimant le If :
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.
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.
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.
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