Cassivellaunos
Messages postés23Date d'inscriptionsamedi 25 juillet 2009StatutMembreDernière intervention25 août 2010
-
17 août 2010 à 10:11
Cassivellaunos
Messages postés23Date d'inscriptionsamedi 25 juillet 2009StatutMembreDernière intervention25 août 2010
-
17 août 2010 à 18:35
Bonjour à tous,
Je suis en train de me créer un UserForm en VBA (je pense que je suis dans le bon thème... )dans lequel j'ai placé - entre autres - un TexBox.
Je voudrai limiter la saisie à 5 caractères (code postal) et faire en sorte qu'à la fin du cinquième caractère le curseur se positionne dans le TextBox suivant.
Je vous remercie de me préciser comment limiter une saisie à 5 caract. et comment paser au textBox suivant.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 17 août 2010 à 10:53
Salut
Comme ta TextBox ne doit accueillir que 5 caractères, tu auras mis le chiffre 5 dans la propriété MaxLength afin que le composant gère lui-même la longueur de saisie.
Pour passer au composant suivant, il "suffit" de faire une Tabulation.
Je te propose :
Private Sub TextBox1_Change()
If Len(TextBox1.Text) = TextBox1.MaxLength Then
SendKeys "{TAB}", True
End If
End Sub
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 17 août 2010 à 10:57
PS : Il faut gérer proprement l'ordre des composants.
Chaque composant à une propriété TabIndex (de 0 à x) qui définit cet ordre.
Sous VBA, c'est encore plus simple :
En mode configuration, tu fais un clic-droit sur ta forme (sur l'objet accueillant les composants, donc éventuellement une Frame) et dans le menu contextuel qui apparait, il y a "Ordre de tabulation".
Le petite fenêtre te listera tous les composants concernés et il te suffira de les monter ou descendre pour les mettre dans l'ordre de saisie désiré.
lmlmike
Messages postés22Date d'inscriptionmardi 17 août 2010StatutMembreDernière intervention 4 juin 2016 17 août 2010 à 13:19
Salut,
En complément de réponse, tu peux également forcer le "focus", c'est à dire le pointage du curseur sur le prochain formulaire de cette manière (remplace les noms en gras par tes propres variables):
Private Sub Textbox1_Change()
If Len(Textbox1.Text) = 5 Then
Textbox2.SetFocus
End If
End Sub
1°) Textbox 1 est le nom de la textbox de ton code postal
2°) textbox 2 est le nom de ta prochaine textbox dans lequel tu veux que le curseur soit.
Cassivellaunos
Messages postés23Date d'inscriptionsamedi 25 juillet 2009StatutMembreDernière intervention25 août 2010 17 août 2010 à 17:11
Cool !
Les 2 codes marchent ! Ca je m'en doutais un peu c'est plutôt ma pomme que je mettais en doute...
Encore 2 X 1 code à mettre dans mon Dico perso. Comme j'ai une bonne trentaine de xxxxList à mettre dans mon formulaire je les panacher !
Mon UserForm avance doucement mais sûrement.
Merci à vous deux.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 17 août 2010 à 17:26
Les deux problèmes du Focus :
- Il faut que l'objet auquel on veut passer le focus soit visible, sinon, erreur 2104, de mémoire
- Il faut connaître le nom de l'objet suivant, donc il faut personnaliser chaque code en fonction de l'objet = pas vraiment pratique.
Cassivellaunos
Messages postés23Date d'inscriptionsamedi 25 juillet 2009StatutMembreDernière intervention25 août 2010 17 août 2010 à 18:35
J'avais bien compris ta seconde remarque dans la mesure ou le focus oblige d'indiquer le nom de l'objet sur lequel le curseur doit se placer mais je n'avais pas pensé que si l'objet n'était pas visible (!) j'obtiendrais une erreur 2104 !!!
Dans le cas où on utilise une tabulation on a effectivement qu'à savoir quel est l'objet sur lequel on désire effectuer une tabulation. C'est plus souple mais il faut bien avoir à l'esprit que les TabIndex doivent être bien gérés et à jour...
Par contre j'apprécie beaucoup tous les conseils et toutes les propositions qui me sont données. Même si je débute en VBA depuis 4 jrs en auto formation et qu'à 60 balais c'est pas encore gagné ! lol