nomvariable.Setfocus

M

MR

Guest
bonjour à tous,
Dans mon premier userform (je me lance), la variable NOCLIENT doit être numérique et le programme VBA ci-dessous contrôle bien la numéricité. Je voudrais réinitialiser la zone après contrôle et repositionner le curseur directement dans cette zone.
Seulement celui-ci ne se positionne nulle part (je suis obligé de recliquer dans la zone). Quelqu'un voit-il ce qui pose problème? j'imagine que remettre NOCLIENT à blanc pose un problème de non numéricité qui peut générer un nouveau contrôle

Merci pour votre aide

Private Sub NOCLIENT_change()
mycheck = IsNumeric(NOCLIENT)
If mycheck = FAUX Then mycheck = VRAI: MsgBox ("SAISIE NUMERIQUE"): NOCLIENT = ""

Label1:
NOCLIENT.SetFocus

End Sub
 
@

@+Thierry

Guest
Bonjour MR

Pour te lancer tu te lances bien, car tu as mis le doigt sur un problème récurrant avec cette histoire de SetFocus dans les TextBox sur des évènement Change ou Exit...

A partir du moment où tu veux faire un MsgBox d'alerte tu auras toutes les difficultés du monde pour retourner dans ta TextBox, l'instruction SetFocus ne sera pas prise en compte. C'est un peu comme si le code se déroulait pendant l'affichage du message.

L'astuce classique consiste à avoir un autre contrôl et d'utiliser l'instruction SendKeys "{TAB}" ou "+{TAB}" pour revenir à ta Texbox1 mais c'est vraiment "Bricolo"

Tu peux aussi lancer un autre UserForm plutôt qu'un MsgBox, qui, dans son commandButton de sortie te remettra le SetFocus sur la TextBox du UserForm... (dans ce cas ne pas oublier d'écrire en entier UserForm1.TextBox1.SetFocus)

Ou tu peux simplement faire ceci, le User n'aura pas de message, mais il comprendra vite qu'il ne peut pas saisir autre chose que du numérique !!! (lol) Enfin moi c'est comme ceci que je procède dans des apllis pros.

Private Sub TextBox1_change()
If IsNumeric(TextBox1.Value) = False Then
TextBox1.SelStart = 0
TextBox1.SelLength = Len(TextBox1)
End If
End Sub

Là pas de risque de saisir autre chose et pas de souci de Focus...

Une autre et ultime astuce consisterait à utiliser dans le Userform un Label qui contiendrait ton message et qui serait par défaut en status.visible = false qui deviendrait true quand il y a erreur...

Bon Courage
@+Thierry
 

Statistiques des forums

Discussions
314 017
Messages
2 104 587
Membres
109 084
dernier inscrit
mizab