FORMATER UN TEXTBOX (N'ACCEPTER QUE DES CHIFFRES)

fabiin - 18 mai 2001 à 17:50
Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 - 10 mars 2009 à 01:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/1136-formater-un-textbox-n-accepter-que-des-chiffres

Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 1
10 mars 2009 à 01:28
Superbe, dommage que la virgule ne puisse être autorisée !
Fabio972 Messages postés 62 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 4 août 2004
27 janv. 2004 à 13:52
Un peu trop long ikariShinji, pour les virugles on peut faire plus court. En se basant sur cette astuce trouvé ici http://www.vbfrance.com/code.aspx?ID=1217

-----
Private Sub txtBox_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 46, 44 ' 46 -> . | 44 -> ,
If InStr(txtBox.Text, ",") > 0 Or InStr(txtBox.Text, ".") > 0 Then KeyAscii = 0
Case Else
If Not Chr(KeyAscii) Like "[0-9,.]" And KeyAscii <> Asc(vbBack) Then KeyAscii = 0
End Select
End Sub
-----
cs_GMI Messages postés 3 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 19 avril 2002
15 avril 2002 à 01:33
Je vous invite à voir l'article http://www.vbfrance.com/article.asp?Val=640
ikariShinji Messages postés 18 Date d'inscription mercredi 13 mars 2002 Statut Membre Dernière intervention 2 juin 2005
13 mars 2002 à 13:30
Merci à toi Néo.balastik pour ce code bien pratique !

Toutefois, ton code empêche du coup la saisie d'un nombre à virgule, voici une solution simple pour régler le problème :

Dim SvgVirgule As Boolean

Private Sub Form_Load()
SetNumber txtBox, True
SvgVirgule = False
End Sub

Private Sub txtBox_KeyPress(KeyAscii As Integer)

' on empêche de saisir une virgule dans un TextBox vide
If txtBox.Text = "" Then
SvgVirgule = False
Exit Sub
End If

' si on supprime la virgule, on doit pouvoir en remettre une
If KeyAscii = 8 Then
If Right(txtBox.Text, 1) "," Then SvgVirgule False
End If

' on vérifie qu'il n'y a pas déjà une virgule
If KeyAscii 46 Or KeyAscii 44 Then
If SvgVirgule = True Then Exit Sub
End If

' si c un point, on le convertit en virgule
If KeyAscii 46 Then KeyAscii 44

' si c une virgule, on la met
If KeyAscii = 44 Then
SetNumber txtBox, False
SvgVirgule = True
End If
End Sub

Private Sub txtBox_KeyUp(KeyCode As Integer, Shift As Integer)
SetNumber txtBox, True
End Sub

( Vous trouverez bientôt une petite application de ce code - convertisseur Euro/Francs - sur mon site )
fou volant13 Messages postés 55 Date d'inscription vendredi 29 juin 2001 Statut Membre Dernière intervention 2 février 2002
19 déc. 2001 à 16:47
sinon ya plus bourrin mais tout autant efficace:

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode < 96 Or KeyCode > 105 And KeyCode <> vbKeyDecimal Then
Text1 = Mid(Text1, 1, Len(Text1) - 1)
Text1.SelStart = Len(Text1)
End If
End Sub

C bof, mais pour ceux qu'on pas envie de se casser le cul ca peut marcher.
REMARQUE: ca marche pas avec les copiers collés
Néo.balastik
21 mai 2001 à 08:28
Val(Text1)....
Pas vraiment convaincant comme façon de faire. J'ai essayé, et l'effet escompté est incertain.

Exemple: Si l'on tape une valeur numérique puis que l'on tape 2x successivement sur une touche alphabétique, la zone se remet à ZERO !!!!

Qu'en dites-vous ?
Text1=Val(Text1)
y'a plus simple :
il suffit de transformer ce ki y'a dans le textbox en valeur numérique :
Dans la précédure Change du Text1, mettre
Val(Text1)

@+
fabs