XL 2016 Position du SetFocus après Message d'erreur

Goose

XLDnaute Occasionnel
Bonjour à tous,
en partant du code ci-contre:
VB:
Private Sub TB_Email_AfterUpdate()
If InStr(TB_Email, "@") = 0 Or InStr(TB_Email, ".") = 0 Then
MsgBox ("Veuillez saisir une adresse mail valide")
End If
End Sub
Private Sub TB_Email_Change()
Form1.TB_Email = LCase(Trim(TB_Email)) 'LCase=minuscule
End Sub
comment faire en sorte que le curseur reste dans la textbox après avoir valider le message d'erreur ?
je ne sais pas ou mettre le SetFocus !!
Merci d'avance
Bye
 

Wayki

XLDnaute Impliqué
Bonjour,
J'aurais fait comme ça, à essayer (je suis pas expert dans le domaine 😬) :
VB:
Private Sub TB_Email_AfterUpdate()
If InStr(TB_Email, "@") = 0 Or InStr(TB_Email, ".") = 0 Then
MsgBox ("Veuillez saisir une adresse mail valide")
Call TB_Email_Change
End If
End Sub
Private Sub TB_Email_Change()
Form1.TB_Email = LCase(Trim(TB_Email)) 'LCase=minuscule
End Sub
 

Goose

XLDnaute Occasionnel
Bonjour.
Et la mienne ?
je ne suis pas assez calé pour appliquer ta solution, cependant j'avais un début de solution avec un code a adapter !! mais je galère un peu !!
VB:
Private Sub TB_Email_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = True
If TB_Email.Value = "MDP" Then
Me.Hide
Else
TB_Email.Value = ""
MsgBox ("Veuillez saisir une adresse mail valide.")
TB_Email.SetFocus
End If
End Sub
 

Eric C

XLDnaute Barbatruc
Bonjour Goose, Dranreb

Le code ci-dessus fonctionne très bien - Avec evèn Exit ou AfterUpDate (comme l'a précisé Dranreb). Ce qu'il te faut en plus dans l'USF c'et un second TextBox (caché ou invisible) afin qu'il soit sensé recevoir le focus quand tu fait "Entrée" .
@+ Eric c
 

Goose

XLDnaute Occasionnel
ce code est une récup d'une seule textbox avec MDP, moi j'ai un Userform avec plusieurs textbox du genre:
Capture d’écran (952).png
 

Eric C

XLDnaute Barbatruc
Bonsoir le fil, le forum

@Goose - Remplace l'évènement :
Code:
Private Sub TB_Email AfterUpdate ()
par
VB:
Private Sub TB_Email_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = True
If InStr(TB_Email, "@") = 0 Or InStr(TB_Email, ".") = 0 Then
MsgBox "Veuillez saisir une adresse mail valide."
TB_Email = ""
TB_Email.SetFocus
End If
End Sub

Bonne soirée à toutes & à tous

Cela fait toujours plaisir de savoir que la contribution a aidé (ou pas).
N"hésitez pas à marquer le sujet comme résolu le cas échéant ou à liker.


@+ Eric c
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Pas besoin de SetFocus car Cancel = True empêche déjà de quitter le contrôle. D'ailleurs on ne peut même plus le quitter si l'adresse mail est bonne dans le code de @Eric C car il y est fait systématiquement !
J'aurais fait comme ça :
VB:
Private Sub TB_Email_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   If TB_Email.Text <> "" And Not TB_Email.Text Like "*@*.*" Then
      MsgBox "Veuillez saisir une adresse mail valide."
      Cancel = True: End If
   End Sub
Permet de le corriger au lieu de tout retaper, et aussi de le laisser non renseigné.
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa