Voilà, ayant à gérer un Usf avec environ 300 contrôles (qui ne sont pas tous affichés en même temps).
Pour gérer les TextBox (environ 120) je suis passé par un module de classe
Code:
Public WithEvents TxTBox As MSForms.textbox
(question subsidiaire: Pourquoi textbox reste en minuscule)
Donc j'aimerai intercepter l'évènement Exit afin de formater le TextBox avec Format(TxtBox.Value,"0.00")
Mais cet évènement n'existe pas dans le module de classe quand on choisit TxtBox dans la liste déroulante en haut gauche et la liste des évènements dans la liste déroulante en haut droite
Voir image jointe
Est-ce qu'il y a un moyen de résoudre ce problème ?
Si besoin est je pourrais (enfin je crois) fournir un fichier
Merci de votre temps passé à lire ce post et de toute aide apportée
Ancien élève en faculté d'Arts Plastiques, étant confronté à un sujet
qui ne me plaisait pas, j'ai barbouillé mon épreuve avec du vert de Véronèse
et du rose Tyrien... Beurk, et re-Beurk! .... J'ai eu la meilleure note de la promo!!!
J'ai tenté de réitérer avec mon exemple... Sauf qu'ici; j'ai eu une bulle!
Comme quoi être bon en VBA ne peut être un don du ciel... Il faut bosser!
Amicalement, et Bepred Breiz
Yann
P.S. A l'attention de Banzai
Habitude m'as indiqué une autre solution pour éviter cette chaine c'est de tester
si le contenu est "Isnumeric" et de traiter en conséquence
Merci Banzai64 pour la confirmation des trucs bizarres. Je me disais aussi …
J’ai déjà remarqué qu’en ouvrant des fichiers de type « .xlsm », mon système subissait des transformations inopportunes (comme la gestion des touches Majuscule/Minuscules).
J’ai pensé que c’était peut-être le cas ici.
Pour revenir à ma version, j’ai eu d’autres problèmes avec un clavier «numérique » branché sur un portable :
« . ou , et avec quelle configuration ?» telle est la question.
J’ai adapté une réponse (pour régler mes ennuis) :
Code:
Private Sub txt_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If (KeyAscii < 48 And KeyAscii <> 46 And KeyAscii <> 44) Or KeyAscii > 57 Then KeyAscii = 0
If KeyAscii = 46 Or KeyAscii = 44 Then KeyAscii = Asc(Application.International(xlDecimalSeparator))
End Sub
Son utilisation avec le dernier fichier de laetitia90* le rend performant.
* excuse moi pour cette interpellation inappropriée mais c'était pour le débat.
J'espère que cela ne va pas entrainer une polémique exagérée
Yann-56
Alors je suis désolé de ne pas avoir compris "la suggestion" que tu avais émise.
Ce n'était en aucune façon de ne pas reconnaitre ton excellent travail (entre autre : La loupe)
Peut-être la fatigue, l'age ....
par curiosite j'ai cree directement un fichier avec excel2003 avec xp
& non avec 2007 & seven 64 pour voir le pb en tapant 2.5 pas constate de pb..
entre autres... en régle generale j'essaie toujours d'avoir une approche la plus simple possible dans mes posts. bien sur!!! "derriere" il faut construire mettre des conditions cherche les bogues possibles
dans ce cas precis il faut gerer si l'utilisateur du progra... commence par un point,
suite de zeros , plusieurs points. l'ami forum a ammene de bonne base de reflexion
cela est tres facile a gerer. de la on va s'affranchir de savoir si l'expression est numerique ou non ect...
je vois que sur ce sujet c'est un peu la guerre de savoir qui fait bien .pas bien
je veus pas rentrer dans cette polémique cela me rappel de mauvais souvenirs je préfere disparaitre
laetitia90
Voici l'idée (ou plutôt la piste que j'ai tenté de suivre)
(Il y avait longtemps que je n'avais pas tâté des expressions régulières)
Code:
Private Sub TextBox1_Change()
With CreateObject("VBScript.RegExp")
.Pattern = "\D": .Global = True
TextBox1.Value = _
IIf(.test(TextBox1.Text), _
.Replace(TextBox1.Text, ""), _
TextBox1)
End With
End Sub
Avec le code ci-dessus, on ne peut saisir que des chiffres dans le TextBox
Il reste maintenant à trouver le bon pattern pour coller à la question initiale