Limiter saisie deux chiffres après la virgule
Résolu
Hellodie45
-
SANA -
SANA -
A voir également:
- Limiter saisie deux chiffres après la virgule
- Saisie gestuelle iphone - Guide
- Deux ecran pc - Guide
- Comment faire deux colonnes sur word - Guide
- Saisie vocale whatsapp - Accueil - Messagerie instantanée
- Saisie vocale sms - Guide
3 réponses
Bonjour,
Question 1 : limiter la saisie à 2 nombres après la virgule :
En utilisant l'évènement "TextBox_Change" Comme ceci :
Question 2 : Transformer la valeur du TextBox de String à "nombre": Ici, comme on parle de nombres décimaux, nous allons transformer le "String" du TextBox en "Double". Lors de l'écriture dans la cellule, au lieu d'un simple : Cells(1, 1) = TextBox1 on ajoute CDbl :
Question 1 : limiter la saisie à 2 nombres après la virgule :
En utilisant l'évènement "TextBox_Change" Comme ceci :
Private Sub TextBox1_Change() If Right(TextBox1, 1) = "." Or Right(TextBox1, 1) = "," Then TextBox1.MaxLength = Len(TextBox1) + 2 End Sub
Question 2 : Transformer la valeur du TextBox de String à "nombre": Ici, comme on parle de nombres décimaux, nous allons transformer le "String" du TextBox en "Double". Lors de l'écriture dans la cellule, au lieu d'un simple : Cells(1, 1) = TextBox1 on ajoute CDbl :
Cells(1, 1).Value = CDbl(TextBox1)
Bonjour,
Tu peux essayer de tronquer le nombre rentré. Par exemple, si l'utilisateur entre 12.13264, quand le texte box n'est plus sélectionné, ce nombre se converti en 12.13
Pour tronquer, il faut créer une fonction qui fait ça. Il y a plusieurs manières de procéder.
Par exemple nombre = int(nombre * 10^2)/10^2 pour avoir deux chiffres après la virgule.
à mettre dans un évènement : TextBox1_Exit
Tu peux essayer de tronquer le nombre rentré. Par exemple, si l'utilisateur entre 12.13264, quand le texte box n'est plus sélectionné, ce nombre se converti en 12.13
Pour tronquer, il faut créer une fonction qui fait ça. Il y a plusieurs manières de procéder.
Par exemple nombre = int(nombre * 10^2)/10^2 pour avoir deux chiffres après la virgule.
à mettre dans un évènement : TextBox1_Exit
merci pour ta réponse mais je cherche à savoir si on peut bloquer la saisie à deux chiffres après la virgule (avec par exemple, messagebox pour avertir l'utilisateur qu'il en rentre de trop).
si cela n'est pas possible, j'avais déjà envisagé cette solution qui responsabilise pas mal l'utilisateur (ce que j'essaye d'éviter le plus).
mais merci encore ...
si cela n'est pas possible, j'avais déjà envisagé cette solution qui responsabilise pas mal l'utilisateur (ce que j'essaye d'éviter le plus).
mais merci encore ...
Je te propose cette solution aussi :
Private Sub TextBox1_Change()
If InStr(1, Replace(TextBox1.Text, ",", "."), ".") * (InStr(1, TextBox1.Text, ".") + 2 < Len(TextBox1.Text)) Then TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1)
End Sub
Reste à savoir si le séparateur des décimaux dans ton système est "." ou ",". Pour moi c'est le point ".". Il faut adapter selon le cas, ou bien améliorer pour prendre en compte les deux choses.
Private Sub TextBox1_Change()
If InStr(1, Replace(TextBox1.Text, ",", "."), ".") * (InStr(1, TextBox1.Text, ".") + 2 < Len(TextBox1.Text)) Then TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1)
End Sub
Reste à savoir si le séparateur des décimaux dans ton système est "." ou ",". Pour moi c'est le point ".". Il faut adapter selon le cas, ou bien améliorer pour prendre en compte les deux choses.
Si tu n'es pas sur du type du séparateur des décimaux, n'utilise pas la fonction Replace(), ce qui donnera ceci :
Private Sub TextBox1_Change()
If InStr(1, TextBox1.Text, ".") * (InStr(1, TextBox1.Text, ".") + 2 < Len(TextBox1.Text)) Then TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1)
End Sub
Private Sub TextBox1_Change()
If InStr(1, TextBox1.Text, ".") * (InStr(1, TextBox1.Text, ".") + 2 < Len(TextBox1.Text)) Then TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - 1)
End Sub
merci beaucoup de te tracasser la tête pour moi.
la solution que pijaku m'a donnée fonctionne et a l'air un peu plus claire pour moi. mais si tu juges que ta solution est plus efficace, je l'adopterai sans problème.
de plus, penses tu avoir une solution pour éviter le copier/coller 25 fois (d'après pijaku, il m'y en a pas) ? car cela me désespère de devoir le faire ! lol
merci encore ...
la solution que pijaku m'a donnée fonctionne et a l'air un peu plus claire pour moi. mais si tu juges que ta solution est plus efficace, je l'adopterai sans problème.
de plus, penses tu avoir une solution pour éviter le copier/coller 25 fois (d'après pijaku, il m'y en a pas) ? car cela me désespère de devoir le faire ! lol
merci encore ...
Bonjour
1 - Pour l'instant, tu peux définir une seule méthode pour tous les textbox du UserForm
Private Sub TextBox1_Change()
test Me.ActiveControl
End Sub
Private Sub test(txtObj As Object)
If Len(txtObj) = 0 Then txtObj.MaxLength = 255
If Right(txtObj, 1) = "." Or Right(txtObj, 1) = "," Then txtObj.MaxLength = Len(txtObj) + 2
End Sub
A utiliser avec méfiance. Il faut vérifier que vraiment tous les TextBox ont la même fonction sur ta form.
2 - Sinon, pour la solution de pijaku, elle est astucieuse. Mais elle a un petit défaut :
Quant on écrit "1253.24", c'est vrai, elle bloque les décimales. Cependant, on ne peux plus modifier la partie entière sous cette écriture. On ne peux pas ajouter par exemple un chiffre au début comme "91253.25" qu'après avoir effacé un chiffre décimal. La solution que j'ai proposée tien compte de cet remarque.
1 - Pour l'instant, tu peux définir une seule méthode pour tous les textbox du UserForm
Private Sub TextBox1_Change()
test Me.ActiveControl
End Sub
Private Sub test(txtObj As Object)
If Len(txtObj) = 0 Then txtObj.MaxLength = 255
If Right(txtObj, 1) = "." Or Right(txtObj, 1) = "," Then txtObj.MaxLength = Len(txtObj) + 2
End Sub
A utiliser avec méfiance. Il faut vérifier que vraiment tous les TextBox ont la même fonction sur ta form.
2 - Sinon, pour la solution de pijaku, elle est astucieuse. Mais elle a un petit défaut :
Quant on écrit "1253.24", c'est vrai, elle bloque les décimales. Cependant, on ne peux plus modifier la partie entière sous cette écriture. On ne peux pas ajouter par exemple un chiffre au début comme "91253.25" qu'après avoir effacé un chiffre décimal. La solution que j'ai proposée tien compte de cet remarque.
pour le premier problème, je vais essayer de trouver une solution pour essayer de réduire mon code et de l'optimiser. merci pour ta solution.
pour le second, tu as parfaitement raison, on ne peux pas rajouter de chiffre après avoir dépasser les deux chiffres après la virgule. mais j'ai essayé ton code et il ne fonctionne pas (peut-être une mauvaise manip' de ma part ...). mais bon, à la limite, ce n'est pas trop grave, l'utilisateur pourra effacer et réécrire.
merci pour ton aide commentcamarcheeay
pour le second, tu as parfaitement raison, on ne peux pas rajouter de chiffre après avoir dépasser les deux chiffres après la virgule. mais j'ai essayé ton code et il ne fonctionne pas (peut-être une mauvaise manip' de ma part ...). mais bon, à la limite, ce n'est pas trop grave, l'utilisateur pourra effacer et réécrire.
merci pour ton aide commentcamarcheeay
la question 2 est résolue (j'ai cherché trop compliqué) et elle était toute simple quand on connait toutes les fonctions de VBA. un grand merci à toi !
par contre, pour la question 1 : elle fonctionne partiellement car quand j'entre un nombre décimal à plus de deux chiffres après la virgule, cela se bloque et n'affiche pas la suite (ce que je cherche) mais quand je souhaite effacer ce que je viens d'entrer et que je remets un nombre entier (un peu long), cela ce bloque.
voici un exemple :
je veux entrer 1,235 et la saisie se bloque à 1,23 (super c'est ce que je veux) mais quand j'efface 1,23 et que je veux mettre à la place 123456, je ne peux entrer que 1234.
vois-tu où vient le problème ?
encore merci pour tes réponses ...
merci beaucoup pour ton aide !!!
dernière petite question : quand j'ai plusieurs textbox dans un même userform avec le même type de problème : saisie bloquante d'un décimale à plus de deux chiffres après la virgule, comment dois-je faire pour éviter de recopier-coller le code 25 fois ?
encore merci ...
euh ... de rien et à bientôt
bonne journée.