[Catégorie modifiée VB6 -> VBA] VBA- Limiter la saisie d'un seul point OU virgul

Résolu
Nat44200 Messages postés 24 Date d'inscription jeudi 4 août 2011 Statut Membre Dernière intervention 24 août 2011 - 24 août 2011 à 14:59
Nat44200 Messages postés 24 Date d'inscription jeudi 4 août 2011 Statut Membre Dernière intervention 24 août 2011 - 24 août 2011 à 23:07
Bonjour a tous,

Nouveau probleme dans mon projet.

Voila, dans un USF sous Excel, j'ai plusieurs TextBox que j'ai limite uniquement aux numeriques, a la virgule et au point. J'ai aussi limite la saisie a deux chiffres apres la virgule ou le point

Maintenant mon probleme est le suivant:
je voudrais limiter mes TextBox pour ne pourvoir ecrire seulement un point ou une virgule.

Voici mon code actuel pour une des TextBox:

Private Sub TextBox1_change()
If Right(TextBox1, 1) "." Or Right(TextBox1, 1) "," Then TextBox1.MaxLength = Len(TextBox1) + 2
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim allowedKeys As String
allowedKeys = "0123456789,." & Chr(8)
If InStr(allowedKeys, Chr(KeyAscii)) 0 Then KeyAscii 0
End Sub

Merci de votre aide

5 réponses

Nat44200 Messages postés 24 Date d'inscription jeudi 4 août 2011 Statut Membre Dernière intervention 24 août 2011 1
24 août 2011 à 23:07
coucou,

merci pour ta réponse et ton aide. Donc avec la parenthese cela fonctionne tres bien. cependant j'ai change le code pour mettre de cette facon. En effet, avec ce que tu m'avais envoye, on pouvait ecrire a la fois une virgule et un point. Alors que moi je desire soit l'un ou soit l'autre:

Dim TestKey As Byte
Dim TestKey2 As Byte
TestKey = Asc(".")
TestKey2 = Asc(",")

If KeyAscii TestKey And (InStr(1, TextBox1, Chr$(TestKey)) > 0 Or InStr(1, TextBox1, Chr$(TestKey2)) > 0) Then KeyAscii 0
If KeyAscii TestKey2 And (InStr(1, TextBox1, Chr$(TestKey2)) > 0 Or InStr(1, TextBox1, Chr$(TestKey)) > 0) Then KeyAscii 0

ce code fonctionne a merveille grace a tes conseils

Bonne soiree ou plutot bonne nuit et encore merci
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 août 2011 à 15:41
Bon...

Je préfère, plutôt que d'essayer, à chaque pas que tu vas tenter de faire, t'inviter à aller VOIR CETTE SOURCE qu'a déposée mon frère jumeau.
Tu y trouveras tout cela et plus encore.
Elle est parfaitement et très facilement adaptable en VBA.
Cela m'évitera de devoir comprendre, au fur et à mesure de ton avancement différent, de savoir quels sont les autres tenants et aboutissants que tu aurais pu modifier (car forcément, dans ce genre d'acrobatie, tout a des conséquences sur tout)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 août 2011 à 17:59
Salut

Dim TestKey As Byte
TestKey = Asc(".")
If KeyAscii TestKey And Instr(1, TextBox1, Chr$(TestKey) > 0 Then KeyAscii 0
TestKey = Asc(",")
If KeyAscii TestKey And Instr(1, TextBox1, Chr$(TestKey) > 0 Then KeyAscii 0

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)
0
Nat44200 Messages postés 24 Date d'inscription jeudi 4 août 2011 Statut Membre Dernière intervention 24 août 2011 1
24 août 2011 à 19:59
Bonjour a vous 2,

merci de vos reponses. ucfoutu, je n'ai pas compris le lien que tu m'as envoye, je suis desolee.

jack, j'ai teste ton code et il il y a une erreur de compilation (Attendu : separateur de syntaxe) sur les lignes :

If KeyAscii TestKey And Instr(1, TextBox1, Chr$(TestKey) > 0 Then KeyAscii 0

j'ai insere ce morceau de code dans le miens de cette facon:

Private Sub TextBox1_Change()
If Right(TextBox1, 1) "." Or Right(TextBox1, 1) "," Then TextBox1.MaxLength = Len(TextBox1) + 2
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim allowedKeys As String
allowedKeys = "0123456789,." & Chr(8)
If InStr(allowedKeys, Chr(KeyAscii)) 0 Then KeyAscii 0

Dim TestKey As Byte
TestKey = Asc(".")
If KeyAscii TestKey And Instr(1, TextBox1, Chr$(TestKey) > 0 Then KeyAscii 0
TestKey = Asc(",")
If KeyAscii TestKey And Instr(1, TextBox1, Chr$(TestKey) > 0 Then KeyAscii 0
End Sub


Voila,
Merci de votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 août 2011 à 20:42
Oui, en effet : il manque une parenthèse de fermeture devant les > 0
(tapé de tête, désolé)
0
Rejoignez-nous