[VBA] - Textbox avec Keypress

Hello le forum,

J'ai créé un petit Textbox dont je souhaiterai forcer l'utilisateur a n'y intégrer que des données numériques et une seule virgule.

J'ai réussi à réaliser cela à travers l'évènement KeyPress :

Private Sub TextBox_CB_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Application.ScreenUpdating = False

'TRANSFORMER LE POINT PAR UNE VIRGULE
    If KeyAscii = 46 Then KeyAscii = 44

'ACCEPTER UNIQUEMENT UNE SEULE VIRGULE ET LES CHIFFRES ENTRE 0 ET 9
    If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or Me.TextBox_CB.SelStart > 0 And Chr(KeyAscii) = "-" _
    Or InStr(Me.TextBox_CB.Value, ",") <> 0 And Chr(KeyAscii) = "," Then KeyAscii = 0: Beep

End Sub

Le problème c'est que je n'arrive pas à trouver le code qui me permettra aussi d'empêcher l'utilisateur de commencer la saisie par une virgule... Car actuellement s'il début avec une virgule mon code plante...

Quelqu'un peut me filer ce petit morceau que je demande ?

Merci à vous !

Un petit Up

Bonjour,

Peut-être avec On Error Resume Next en début de code.

C'est radicale mais ça contourne le problème plantage de code

Cdt

Harissa23

Bonjour

Tu avais la solution à portée de main

A tester

Private Sub TextBox_CB_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Application.ScreenUpdating = False

'TRANSFORMER LE POINT PAR UNE VIRGULE
   If KeyAscii = 46 Then KeyAscii = 44

'ACCEPTER UNIQUEMENT UNE SEULE VIRGULE ET LES CHIFFRES ENTRE 0 ET 9
   If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or (Me.TextBox_CB.SelStart > 0 And Chr(KeyAscii) = "-") _
    Or (InStr(Me.TextBox_CB.Value, ",") <> 0 And Chr(KeyAscii) = ",") _
    Or (Me.TextBox_CB.SelStart = 0 And Chr(KeyAscii) = ",") Then KeyAscii = 0: Beep

End Sub

Bonjour Harissa23 : j'y avais pensé mais je n'aime pas trop utilisé cela. Je pars du principe qu'il est impossible de penser à toute les erreurs. Les camoufler ce n'est pas une solution pour moi Je préfère encore que le code plante et que j'essaye de trouver tant bien que mal une solution au problème.

Banzai64 : Yes ça marche ! Du coup j'avais encore un problème avec le tiret du 6. Effectivement le code plante dès qu'on touche à cette touche et qu'on ne met pas en majuscule. Je me suis donc permis d'améliorer le code que tu as proposé En tout cas merci beaucoup car sans toi je n'aurai pas trouvé et je n'aurai pas réussi a réaméliorer par dessus

Code actuel :

Private Sub TextBox_CB_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Application.ScreenUpdating = False

'TRANSFORMER LE POINT PAR UNE VIRGULE
  If KeyAscii = 46 Then KeyAscii = 44

'ACCEPTER UNIQUEMENT UNE SEULE VIRGULE ET LES CHIFFRES ENTRE 0 ET 9
  If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or (Me.TextBox_CB.SelStart > 0 And Chr(KeyAscii) = "-") _
    Or (InStr(Me.TextBox_CB.Value, ",") <> 0 And Chr(KeyAscii) = ",") _
    Or (Me.TextBox_CB.SelStart = 0 And Chr(KeyAscii) = ",") _
    Or (Me.TextBox_CB.SelStart = 0 And Chr(KeyAscii) = "-") Then KeyAscii = 0: Beep

End Sub

Bonne journée à tous,

Bonjour

Je ne comprends pas trop

Cette condition

(Me.TextBox_CB.SelStart > 0 And Chr(KeyAscii) = "-")

ou cette condition

(Me.TextBox_CB.SelStart = 0 And Chr(KeyAscii) = "-")

fait en sorte que tu ne peux pas inscrire le - (tiret du 6 - le moins)

C'est le but recherché ?

Bonjour Banzai64,

Vous avez écrit 2x la même condition.

Si vous vouliez parlez de ces deux conditions :

 Or (Me.TextBox_CB.SelStart = 0 And Chr(KeyAscii) = ",") _
    Or (Me.TextBox_CB.SelStart = 0 And Chr(KeyAscii) = "-")

Ces deux conditions empêchent l'utilisateur d'utiliser les signes "-" et "," en première position.

J'ai besoin de ces deux conditions car à la fin un total TTC est calculé en fonction de plusieurs textbox. Je dois donc être certain que toutes mes textbox sont au format numérique avec qu'une seule virgule.

Avec votre code je pouvais mettre le "-" en première position.

J'avais demandé comment faire pour empêcher d'avoir une virgule en première position et vous m'aviez répondu. J'ai alors comparer mon ancien code au votre et je me suis aperçu que vous aviez rajouté :

Or (Me.TextBox_CB.SelStart = 0 And Chr(KeyAscii) = ",") 

J'en ai donc déduis qui je souhaitai empêcher le "-" en première position il fallais que je modifie le code en remplaçant le "," par un "-".

Bonjour

Greg.leo a écrit :

Vous avez écrit 2x la même condition

Non regarde bien

Greg.leo a écrit :

Avec votre code je pouvais mettre le "-" en première position.

Oui pour les chiffres négatifs

L'important c'est que cela fonctionne comme tu veux

Bonjour Banzai64,

Effectivement je n'avais pas vu que les comparateurs différés

Effectivement maintenant ça marche comme je le souhaite.

Je vous en remercie,

Excellente journée à vous,

Rechercher des sujets similaires à "vba textbox keypress"