Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Positionner curseur à la suite des chiffres rentrés

david84

XLDnaute Barbatruc
Bonjour à tous,
dans un userform permettant de réunir des renseignements propres à des associations (nom, adresse, commune,...), j'ai notamment à renseigner une textbox devant contenir le n°Siret de l'association. Ce textbox est géré par différentes procédures événementielles, dont, entre autres un événement Keypress permettant de n'autoriser la saisie que de nombres (cette partie étant gérée par une fonction "Nombre") dont voici le code :
Code:
Private Sub Siret_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Nombre(KeyAscii.Value) <> "" Then
KeyAscii = Asc(Nombre(KeyAscii.Value))
Else
KeyAscii = 0
MsgBox "Caractère interdit !", vbCritical
Cancel = True
'Siret.SelStart = 0 'positionne le curseur au début du textbox
'Siret.SelLength = Len(Siret) 'sélectionne le texte déjà entré
End If
End Sub

Cette macro fonctionne correctement mais actuellement, lorsque je fais une erreur de saisie en rentrant une lettre à la place d'un nombre et que le message "Caractère interdit !" apparait et que je ferme cette boîte de dialogue, je suis obligé de re cliquer dans la textbox pour continuer à rentrer ma suite de nombres.

Or, lorsque je ferme la boîte de dialogue, je voudrais qu'un curseur apparaisse et soit placé à la suite des nombres déjà rentrés.
J'ai placé un rem devant les essais déjà tentés (Siret.SelStart et Siret.SelLength).
Merci de me faire part de vos idées et solutions éventuelles.
A+
 

david84

XLDnaute Barbatruc
Re : Positionner curseur à la suite des chiffres rentrés

Re Papou,
Merci de ta réponse.
Peut-être serait-il plus simple de conserver ShowModal à True ?
Le problème c'est que si je le laisse à true, cela empêche l'ouverture d'un autre UserForm qui n'est pas activable dans le fichier exemple fourni.
Concernant le problème soulevé, je pense avoir trouvé une solution pour la plupart des textbox et combo : placer après
MsgBox "Caractère interdit !", vbCritical
SendKeys "{ENTER}"
SendKeys "+{TAB}"
SendKeys "^{RIGHT}"

Le seul problème persistant sur les combo Discipline, Commune et Code postal est dû à l'activation des messages placés à l'Exit. Donc là, 3 solutions :
- soit je ne place pas cette suite de Sendkeys et l'utilisateur devra recliquer dans ces zones,
- soit je les place et l'utilisateur aura à fermer également le message à l'exit
- une solution particulière est trouvée et tant mieux.
Peut-être tenter à l'exit de la combo de mettre un code dans le genre "si msgbox "caractère interdit" then exit sub" par exemple afin d'annuler l'apparition du message placé à l'exit mais je ne sais pas si c'est possible...

Ceci-dit, pour celles-là ce n'est pas très gênant car dans le fichier original, les listes des disciplines, communes et codes postaux sont très fournies et il sera bien rare que l'utilisateur ait à en rentrer de nouvelles donc...c'est plutôt pour les autres que c'était plus gênant.
Si je trouve d'autres solutions je vous tiens au courant mais si vous avez d'autres idées n'hésitez pas.
A+
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Positionner curseur à la suite des chiffres rentrés

Bonsoir à tous

pas ouvert ton fichier, toujours pas 2007, mais petite idée à creuser, si d'autres événements font perdre le focus à l'usf, réactiver la fenêtre de celui-ci ... A voir...
Code:
AppActivate "UserForm1"

bonne soirée
@+
 

tototiti2008

XLDnaute Barbatruc
Re : Positionner curseur à la suite des chiffres rentrés

Bonjour David, Bonjour Pierrot, Bonjour Papou,

Dans l'évènement Exit, tu as un argument Cancel.
Si tu mets Cancel à True, tu empêches la sortie de ton contrôle
 

david84

XLDnaute Barbatruc
Re : Positionner curseur à la suite des chiffres rentrés

Re
Pierrot
pas ouvert ton fichier, toujours pas 2007, mais petite idée à creuser, si d'autres événements font perdre le focus à l'usf, réactiver la fenêtre de celui-ci ... A voir...
Merci pour l'info mais j'ai l'impression que le problème qui se pose maintenant n'est pas la perte du focus mais le déclenchement du message d'enregistrement placé dans l'événement Exit.
En effet, je n'ai pas trouvé d'autre moyen (à partir du moment où je veux garder le ShowModal sur False) pour récupérer le positionnement du curseur à la suite des nombres ou lettres entrée dans le textbox ou le combo que d'utliser la suite de Sendkeys indiquée dans mon précédent message.
Ce faisant, le focus passe dans la zone suivante avant de revenir dans le combo (Discipline par exemple). Je pense que de ce fait il déclenche l'autre MsgBox placée à l'Exit de Discipline (qui sert à signaler que la discipline rentrée n'est pas encore répertoriée) et donc son message apparaît. Je voudrais éviter si possible l'apparition de ce message une fois que je ferme le message "caractère interdit" placé dans l'événement KeyPress de Discipline.
J'essaie de tenter avec application.displayAlerte pour voir ce que cela donne.

Tototiti
Code:
Dans l'évènement Exit, tu as un argument Cancel.
Si tu mets Cancel à True, tu empêches la sortie de ton contrôle
Oui javais essayé mais le problème c'est que ma combinaison de SendKeys m'amène à passer à l'Exit pour récupérer le curseur et qui si je place Cancel à True, je ne récupère pas le curseur...ou alors je n'ai pas compris ce que tu essaies de m'expliquer. As-tu testé cela sur le fichier exemple posté au message 14 ?

Merci à vous deux et à +
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…