Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Userform et Textbox

4 réponses
Avatar
Thierry Euzenot
Bonjour à toutes et tous,

Je rencontre un problème dans un userform :
Lorsqu'un utilisateur entre une donnée dans un textbox et appuie sur Entrée,
la donnée est vérifiée et si elle n'est pas valide, il doit en re-rentrer
une nouvelle et appuyer à nouveau sur Entrée. Ainsi de suite jusqu'à ce
qu'une donnée valide soit entrée.

J'ai donc mis ce code :
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

'Détection de l'appui sur la touche ENTER ou TAB
If KeyCode = 13 Or KeyCode = 9 Then
'Si un emplacement a été entré, le retrouve
If UserForm2.TextBox2.Value <> "" Then
Call Recherche_Emplacement(Flag)
If Flag = 1 Then
'Si l'emplacement est inconnu, on y retourne
UserForm2.Label2.Value = "Veuillez entrer une donnée valide."
UserForm2.TextBox2.Value = ""
UserForm2.TextBox2.SetFocus
End If
End If
End If
End Sub

Tout marche bien sauf que si Flag est à 1 (donnée non valide), le focus va
sur le textbox1 et ne reste pas sur le textbox2... en fait, après le
UserForm2.TextBox2.SetFocus (qui fonctionne bien), il continue la procédure
jusqu'à "End Sub" et ensuite le focus va sur le textbox1.
Or moi je veux que tant que la donnée n'est pas valide on reste sur le
textbox2.

Please help !

Thierry

4 réponses

Avatar
JB
Bonjour,

Evenement BeforeUpdate?

Private Sub TextBox2_BeforeUpdate(ByVal Cancel As
MSForms.ReturnBoolean)
If ..... Then
MsgBox "Erreur"
Cancel = True
End If
End Sub

JB
http://boisgontierjacques.free.fr



On 13 nov, 12:43, "Thierry Euzenot"
<thierry.euzenot*arobase*gmail.com> wrote:
Bonjour à toutes et tous,

Je rencontre un problème dans un userform :
Lorsqu'un utilisateur entre une donnée dans un textbox et appuie sur En trée,
la donnée est vérifiée et si elle n'est pas valide, il doit en re-r entrer
une nouvelle et appuyer à nouveau sur Entrée. Ainsi de suite jusqu' à ce
qu'une donnée valide soit entrée.

J'ai donc mis ce code :
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

'Détection de l'appui sur la touche ENTER ou TAB
If KeyCode = 13 Or KeyCode = 9 Then
'Si un emplacement a été entré, le retrouve
If UserForm2.TextBox2.Value <> "" Then
Call Recherche_Emplacement(Flag)
If Flag = 1 Then
'Si l'emplacement est inconnu, on y retourne
UserForm2.Label2.Value = "Veuillez entrer une donnée vali de."
UserForm2.TextBox2.Value = ""
UserForm2.TextBox2.SetFocus
End If
End If
End If
End Sub

Tout marche bien sauf que si Flag est à 1 (donnée non valide), le foc us va
sur le textbox1 et ne reste pas sur le textbox2... en fait, après le
UserForm2.TextBox2.SetFocus (qui fonctionne bien), il continue la procé dure
jusqu'à "End Sub" et ensuite le focus va sur le textbox1.
Or moi je veux que tant que la donnée n'est pas valide on reste sur le
textbox2.

Please help !

Thierry


Avatar
Thierry Euzenot
Précisions supplémentaires.

Dans mon userform j'ai aussi ces procédures ci :
Private Sub TextBox1_Enter()
UserForm2.TextBox1.BackColor = &HFFFFC0
End Sub
Private Sub TextBox2_Enter()
UserForm2.TextBox2.BackColor = &HFFFFC0
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
UserForm2.TextBox1.BackColor = &H80000005
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
UserForm2.TextBox2.BackColor = &H80000005
End Sub

Le déroulement exact des opérations lorsque une donnée non valide est
entrée, après passage du "End sub", le programme va dans le Private Sub
TextBox2_Exit, excécute l'instruction puis va dans le Private Sub
TextBox1_Enter(). Ce qui me fait dire que c'est bien le textbox1 qui prend
le focus.

"Thierry Euzenot" <thierry.euzenot*arobase*gmail.com> a écrit dans le
message de news:
Bonjour à toutes et tous,

Je rencontre un problème dans un userform :
Lorsqu'un utilisateur entre une donnée dans un textbox et appuie sur
Entrée, la donnée est vérifiée et si elle n'est pas valide, il doit en
re-rentrer une nouvelle et appuyer à nouveau sur Entrée. Ainsi de suite
jusqu'à ce qu'une donnée valide soit entrée.

J'ai donc mis ce code :
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

'Détection de l'appui sur la touche ENTER ou TAB
If KeyCode = 13 Or KeyCode = 9 Then
'Si un emplacement a été entré, le retrouve
If UserForm2.TextBox2.Value <> "" Then
Call Recherche_Emplacement(Flag)
If Flag = 1 Then
'Si l'emplacement est inconnu, on y retourne
UserForm2.Label2.Value = "Veuillez entrer une donnée valide."
UserForm2.TextBox2.Value = ""
UserForm2.TextBox2.SetFocus
End If
End If
End If
End Sub

Tout marche bien sauf que si Flag est à 1 (donnée non valide), le focus va
sur le textbox1 et ne reste pas sur le textbox2... en fait, après le
UserForm2.TextBox2.SetFocus (qui fonctionne bien), il continue la
procédure jusqu'à "End Sub" et ensuite le focus va sur le textbox1.
Or moi je veux que tant que la donnée n'est pas valide on reste sur le
textbox2.

Please help !

Thierry




Avatar
Jacques93
Bonjour Thierry Euzenot,

Pourquoi ne pas faire le contrôle dans l'événement Exit du TextBox ?

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox2.Text <> ValeurOK Then
Cancel = True
End If
End Sub

Bonjour à toutes et tous,

Je rencontre un problème dans un userform :
Lorsqu'un utilisateur entre une donnée dans un textbox et appuie sur Entrée,
la donnée est vérifiée et si elle n'est pas valide, il doit en re-rentrer
une nouvelle et appuyer à nouveau sur Entrée. Ainsi de suite jusqu'à ce
qu'une donnée valide soit entrée.

J'ai donc mis ce code :
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

'Détection de l'appui sur la touche ENTER ou TAB
If KeyCode = 13 Or KeyCode = 9 Then
'Si un emplacement a été entré, le retrouve
If UserForm2.TextBox2.Value <> "" Then
Call Recherche_Emplacement(Flag)
If Flag = 1 Then
'Si l'emplacement est inconnu, on y retourne
UserForm2.Label2.Value = "Veuillez entrer une donnée valide."
UserForm2.TextBox2.Value = ""
UserForm2.TextBox2.SetFocus
End If
End If
End If
End Sub

Tout marche bien sauf que si Flag est à 1 (donnée non valide), le focus va
sur le textbox1 et ne reste pas sur le textbox2... en fait, après le
UserForm2.TextBox2.SetFocus (qui fonctionne bien), il continue la procédure
jusqu'à "End Sub" et ensuite le focus va sur le textbox1.
Or moi je veux que tant que la donnée n'est pas valide on reste sur le
textbox2.

Please help !

Thierry





--
Cordialement,

Jacques.

Avatar
Thierry Euzenot
Super, ça marche !!

Merci beaucoup !
Thierry

"JB" a écrit dans le message de news:

Bonjour,

Evenement BeforeUpdate?

Private Sub TextBox2_BeforeUpdate(ByVal Cancel As
MSForms.ReturnBoolean)
If ..... Then
MsgBox "Erreur"
Cancel = True
End If
End Sub

JB
http://boisgontierjacques.free.fr



On 13 nov, 12:43, "Thierry Euzenot"
<thierry.euzenot*arobase*gmail.com> wrote:
Bonjour à toutes et tous,

Je rencontre un problème dans un userform :
Lorsqu'un utilisateur entre une donnée dans un textbox et appuie sur
Entrée,
la donnée est vérifiée et si elle n'est pas valide, il doit en re-rentrer
une nouvelle et appuyer à nouveau sur Entrée. Ainsi de suite jusqu'à ce
qu'une donnée valide soit entrée.

J'ai donc mis ce code :
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

'Détection de l'appui sur la touche ENTER ou TAB
If KeyCode = 13 Or KeyCode = 9 Then
'Si un emplacement a été entré, le retrouve
If UserForm2.TextBox2.Value <> "" Then
Call Recherche_Emplacement(Flag)
If Flag = 1 Then
'Si l'emplacement est inconnu, on y retourne
UserForm2.Label2.Value = "Veuillez entrer une donnée valide."
UserForm2.TextBox2.Value = ""
UserForm2.TextBox2.SetFocus
End If
End If
End If
End Sub

Tout marche bien sauf que si Flag est à 1 (donnée non valide), le focus va
sur le textbox1 et ne reste pas sur le textbox2... en fait, après le
UserForm2.TextBox2.SetFocus (qui fonctionne bien), il continue la
procédure
jusqu'à "End Sub" et ensuite le focus va sur le textbox1.
Or moi je veux que tant que la donnée n'est pas valide on reste sur le
textbox2.

Please help !

Thierry