Arrondir directement la valeur d'une zone de texte

Résolu
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012 - 28 janv. 2012 à 19:03
 Utilisateur anonyme - 29 janv. 2012 à 15:26
Bonjour,

J'ai une question concernant la valeur d'une zone de texte.
J'ai paramétré ma zone de texte en key press. Cette zone n'autorise que des caractères numériques avec qu'un seul chiffre après la virgule. Voici le code :
....
If InStr("1234567890,", Chr(KeyAscii)) 0 Or InStr(Valeur.Value, ",") <> 0 And Chr(KeyAscii) "," Then
KeyAscii = 0:
End if
.....
J'aimerai que l'utilisateur ne puisse que saisir 2 chiffres après la virgule.
Comment puis je procéder?

Merci

16 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 janv. 2012 à 21:42
Bonjour,
Du bâclé car j'ai sommeil ===>>

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   nbdec = 2 '==============ici le nb de décimales admises
   pos = InStr(TextBox1.Text, ",")
   If pos > 0 And Chr(KeyAscii) "," Then KeyAscii 0: Exit Sub
   If Not IsNumeric(Chr(KeyAscii)) And Chr(KeyAscii) <> "," Then KeyAscii = 0: Exit Sub
   If pos = 0 Then Exit Sub
   If Len(Mid(TextBox1.Text & Chr(KeyAscii), pos + 1)) > nbdec Then KeyAscii = 0
 End Sub

Pour du plus mieux et plus complet dans le genre, voire le source de mon frère jumeau jmfmarques.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
28 janv. 2012 à 19:41
Bonjour,

En utilisant Split peut être.

If ubound(Split(MaTxtBox.Text,","))>1 then
'Trop de ,
ElseIf ubound(Split(MaTxtBox.Text,","))=1 Then
If Len(Split(MaTxtBox.Text,",")(1))>2 Then
'Trop de chiffre
End If
End If


---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
28 janv. 2012 à 19:56
Ok Merci Henry.

Par contre, c'est étonnant car quand je met que le nombre de chiffres après la virgule ne doit pas etre supérieur à 2, il m'autorise jusqu'à 4 décimales... Bizare..
Et quand je paramètre que le nombre de décimale ne doit pas être supérieur à 1, alors il m'autorise 2 décimales...

Tu as une idée sur ce bug???

Merci bcp
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
28 janv. 2012 à 20:00
Bonjour,

Quel code utilises-tu ?
Quelles entrées (texte) as-tu testée ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0

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

Posez votre question
Utilisateur anonyme
28 janv. 2012 à 20:11
Salut,

Alors reprenons la façon de faire de talined:
Pourquoi faire:
If InStr("1234567890,", Chr(KeyAscii)) 0 Or InStr(Valeur.Value, ",") <> 0 And Chr(KeyAscii) "," Then 
KeyAscii = 0: 
End if 

Alors que:
If InStr("1234567890,", Chr(KeyAscii)) 0 then keyscii 0

Suffit?
La seule contrainte c'est qu'on peux insérer plusieurs virgules...
Mais tout dépend si on reflechit à un format (par exemple) "1,255,25"



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
28 janv. 2012 à 20:59
Acive :

Oui mais c'est cette contrainte d'une seule virgule que je veux insérer également...
c'est ca mon souci..

Nhenri : voici le code que j'ai utilisé directement dans une zone de texte :
.......
Private Sub ZT_Calcul_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If InStr("1234567890,", Chr(KeyAscii)) 0 Or InStr(ZT_calcul.Value, ",") <> 0 And Chr(KeyAscii) "," Then
KeyAscii = 0:
End If

'If UBound(Split(ZT_Calcul.Text, ",")) > 1 Then
KeyAscii = 0
If UBound(Split(ZT_Calcul.Text, ",")) = 1 Then
If Len(Split(ZT_Calcul.Text, ",")(1)) > 1 Then
KeyAscii = 0

End If
End If
................

Et la ca bloque bizarement à 2 décimales alors que je lui dis de bloquer la saisie au bout d'une décimale..
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
28 janv. 2012 à 22:21
OK Merci bien, c'est presque parfait! :)

En fait, on peut insérer une virgule pour le premier caractère. Ca a l'air tout bete à résoudre mais quand j'écris que si la zone de texte = "," alors on efface, ca ne fait rien.

Je te laisse dormir..

Bonne soirée
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 janv. 2012 à 23:54
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   nbdec = 2 '==============ici le nb de décimales admises
   pos = InStr(TextBox1.Text, ",")
   If pos > 0 And Chr(KeyAscii) "," Then KeyAscii 0: Exit Sub
   If Not IsNumeric(Chr(KeyAscii)) And Chr(KeyAscii) <> "," Then KeyAscii = 0: Exit Sub

   toto = TextBox1.Text & Chr(KeyAscii)
   If pos > 0 And Len(Mid(toto, pos + 1)) > nbdec Or toto "," Then KeyAscii 0
 End Sub


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 janv. 2012 à 00:34
voilà encore une autre manière.
Celle-ci te protège en plus de copier/coller non conformes ===>>
Private Sub TextBox1_Change()
  Static anc As String
  nbdec = 2 '==============ici le nb de décimales admises
  pos = InStr(TextBox1.Text, ",")
  toto = TextBox1.Text
  If Not IsNumeric(toto) Or toto Like "*[A-z]*" Then
      If toto <> "" Then TextBox1.Text anc Else anc ""
  Else
    If pos > 0 Then
      If Len(Mid(toto, pos + 1)) > nbdec Then
        TextBox1.Text = anc
      Else
        anc = toto
      End If
    End If
  End If
End Sub





____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
29 janv. 2012 à 13:44
Ou tout bêtement:
Dim St As String
If InStr(1, TextBox1.Text, ",") > 0 Then
   St = "0123456789"
Else
   St = "0123456789,"
End If
If InStr(St, Chr(KeyAscii)) 0 Then keyscii 0

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
29 janv. 2012 à 14:05
Encore (en limitant les chiffres après la virgule):
Dim St As String
Dim Rt As Integer
Rt = InStr(1, TextBox1.Text, ",")
If Rt > 0 Then
   St = "0123456789"
Else
   St = "0123456789,"
End If
If (Rt > 0 And Len(TextBox1.Text) > Rt + 1) Or InStr(St, Chr(KeyAscii)) 0 Then KeyAscii 0



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
29 janv. 2012 à 14:47
Merci beaucoup, c'est vrai qu'il est simple.

Je voudrais rajouter de ne pas autoriser la saisie de la virgule comme premier et seul caractère.
Je dois rajouter une variable ou je peux faire autrement?

Merci
0
Utilisateur anonyme
29 janv. 2012 à 14:55
If (Chr(KeyAscii) = "," And Len(Textbox1.Text) = 0) Or (Rt > 0 And Len(Textbox1.Text) > Rt + 1) Or InStr(St, Chr(KeyAscii)) = 0 Then KeyAscii = 0



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
29 janv. 2012 à 15:05
Et tu peux faire aussi:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1.Text = Format(TextBox1.Text, "### ###.00")
End Sub



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
talined Messages postés 44 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 14 mars 2012
29 janv. 2012 à 15:17
D'accord merci beaucoup!

ET c'est possible d'utiliser ce dernier format pour paramétrer une date de la même maniere ( dans une zone de texte avec Keypress)?

Car j'ai tenté avec l'un de tes codes que tu m'avais donné mais je n'y arrive pas..

Encore merci acive
0
Utilisateur anonyme
29 janv. 2012 à 15:26
Pour les formats de dates regarde ce qu'ils disent chez MSDN DANS CE LIEN

Et puis il ne faudrait pas le faire à l'évènement keypress car à chaque touche appuyée il formate le texte, ça va gêner la saisie.


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Rejoignez-nous