Problème avec set focus sur textbox d'un userform

donpopo

XLDnaute Occasionnel
Bonjour le forum,
J'ai créé un userform appelé CONNECTION tout simple (une textbox1 et un bouton "quitter")
Ma textbox est limitée à 4 caractères et mise en autotab.
Si le code encodé est correct, l'userform se ferme et donne accès au fichier.
Pas de problème.

Cependant, lorsque je tape un mot de passe erroné, après le message d'erreur, je souhaite que le focus se remette sur Textbox1 et là je bloque; le focus se met de suite sur le bouton Quitter.
Voici le code que j'ai mis:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1.Value = MDP Then
CONNECTION.Hide
Else
TextBox1.Value = ""
MsgBox ("MOT DE PASSE ERRONE !")
TextBox1.SetFocus
End If
End Sub

Je ne vois pas le problème.
Si quelqu'un a une idée?
Merci d'avance
Donpopo
 

Lone-wolf

XLDnaute Barbatruc
Bonjour donpopo

Ajoute une 2ème textbox, supprime les lignes après Else.

Avec Textbox1_AfterUpdate()

If TextBox1.Value <> MDP Then
TextBox1.Value = ""
MsgBox ("MOT DE PASSE ERRONE !")
TextBox1.SetFocus
End If

EDIT: ne prend pas en consideration la macro, ça ne fonctionne pas.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Je suppose que les procédures évènements liées au gain ou à la perte de focus ne peuvent guère supporter un changement de celui ci durant leur exécution. Pourquoi ne mettez vous pas plutôt à True le paramètre Cancel transmis ?
 

donpopo

XLDnaute Occasionnel
J'ai un problème;
j'ai corrigé ma procédure, mais cela n'accepte aucun mot de passe; j'ai du faire une erreur.
Entretemps, je ne sais plus entrer dans mon programme pour le corriger. Comment contourner ce problème?
Sans mot de passe, le classeur se ferme; comment arriver à modifier en VBA.
 

donpopo

XLDnaute Occasionnel
Ca va, j'ai résolu le problème de blocage en ouvrant un autre fichier Excel; cela m'a permit d'accéder à VBA.

Mais j'ai essayé la procédure proposée par Lone-wolf,; le focus ne se remet pas sur la textbox1, mais bien sur le bouton quitter qui est en deuxième position en Tabindex.

Textbox1_AfterUpdate()
If TextBox1.Value <> MDP Then
TextBox1.Value = ""
MsgBox ("MOT DE PASSE ERRONE !")
TextBox1.SetFocus
else userform1.hide
End If

upload_2018-6-5_16-53-0.jpeg


Je ne vois pas ce qui cloche.
 

Robert

XLDnaute Barbatruc
Bonjour le fil, bonjour le forum,

Essaie comme ça :

VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If Me.TextBox1.Value = "" Then Exit Sub
If TextBox1.Value = MDP Then
    Unload Me
Else
    Cancel = True
    TextBox1.Value = ""
    MsgBox ("MOT DE PASSE ERRONE !")
End If
End Sub

Private Sub CommandButton1_Click()
Unload Me
End Sub
 

Eric C

XLDnaute Accro
Bonjour le forum
Bonjour donpopo, lone-wolf, Dranreb et l'Excellent Robert (Vous êtes tous & toutes excellents)

Dranreb t'avais mis sur la voie :
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = True

If TextBox1.Value = "MDP" Then
Me.Hide
Else
TextBox1.Value = ""
MsgBox "Veuillez entrer un code valide.", vbOKOnly, "Erreur"
TextBox1.SetFocus
End If
End Sub

mais Robert est passé par là.
@micalement
Eric C
 

Si...

XLDnaute Barbatruc
Bon_soir

Salut Robert, en général je remplace Cancel par Oust, c'est mieux (voire mal) compris. ;)

Ici, on peut ne pas faire appel à Exit avec les Focus comme dans l'exemple joint (une preuve par 9).

Nota : je n'entre pas dans la discussion de savoir si c'est utile ou pas mais il faut quand même développer un peu plus l'affaire.
 

Pièces jointes

  • MdP.xlsm
    21.6 KB · Affichages: 77

Discussions similaires

Statistiques des forums

Discussions
298 027
Messages
1 965 282
Membres
200 894
dernier inscrit
Sneaks