AUTORISER UNIQUEMENT LES CHIFFRES, POINT ET SIGNE - DANS UNE TEXTBOX

cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008 - 19 mai 2005 à 22:03
bibinutz Messages postés 32 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 13 janvier 2009 - 4 juin 2005 à 10:37
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/31474-autoriser-uniquement-les-chiffres-point-et-signe-dans-une-textbox

bibinutz Messages postés 32 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 13 janvier 2009
4 juin 2005 à 10:37
alors comme promis je regarde tous vos commentaires et je les teste je commence par yoman64 :
quand tu dis que je peux remplacer tout ceci :
If keyascii <> 45 And keyascii <> 46 And keyascii <> 48 And keyascii <> 49 And keyascii <> 50 _
And keyascii <> 51 And keyascii <> 52 And keyascii <> 53 And keyascii <> 54 And keyascii <> 55 _
And keyascii <> 56 And keyascii <> 57 And keyascii <> 8 Then keyascii = 24

par :

if (keyascii < 45 and keyascii > 57) and keyascii <> 8 then keyascii = 24

ca ne marche pas.Si tu mets if (keyascii < 45 0R keyascii > 57) and keyascii <> 8 then keyascii = 24
cela marche exepte qu'on ne bloque pas / caractere 47.

Autrement le reste de ton code est bon il marche chez moi
Voila encore merci de ton aide
Salut
bibinutz Messages postés 32 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 13 janvier 2009
3 juin 2005 à 23:29
je voie que mon "code" se developpe lol et ben c'est bien la je n'ai pas le temps de tout regarder mais demain je vais jeter un coup d'oeil à tous ces commentaires et modifier mon code par la meme occasion je remercie tout le monde pour l'attention que vous portez à ce code.

Salutations.
cs_NICK123 Messages postés 29 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 22 juin 2009
24 mai 2005 à 00:33
Voici ce que vous chercher..
1. le signe '-' doit être que à la première position.
2. le nombre de chiffre apres la virgule.
3. la virgule ne doit-être apres le signe "-".


Public Sub TextAscii(Text As Object, KeyAscii As Integer, virgule As Boolean, PositionVirgule As Integer, signe As Boolean)
Dim Pointv As Integer
Pointv = InStr(1, Text, ".")
Select Case KeyAscii
Case 48 To 57:
If Pointv <> 0 Then
If Len(Text.Text) >Pointv + PositionVirgule Then: KeyAscii 256
End If
Case 8:
Case 45:
If signe False Then: KeyAscii 256
If Len(Text) <> 0 Then: KeyAscii = 256
Case 46:
If virgule False Then: KeyAscii 256
If Len(Text) = 0 Then
KeyAscii = 256
Else

If Len(Text) = 1 Then
If Text = "-" Then
KeyAscii = 256
Else

End If
Else
If Pointv <> 0 Then
KeyAscii = 256
Else

End If
End If
End If
Case Else: KeyAscii = 256
End Select

End Sub
cs_Targhan Messages postés 13 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 24 mai 2005
24 mai 2005 à 00:26
L'intention est louable. :)
L'idée de limiter le nombre de décimales peut être intéressante dans certains cas...
Bibinutz pourrait rajouter ce paramètre dans sa sub...
cs_NICK123 Messages postés 29 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 22 juin 2009
24 mai 2005 à 00:05
Désolé, je veux seulement aider
cs_Targhan Messages postés 13 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 24 mai 2005
23 mai 2005 à 23:25
Nick, ton code autorise n'importe quel caractère en première position...
Je voudrais pas chipoter, mais il me semble que ce n'est pas le but recherché...
cs_NICK123 Messages postés 29 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 22 juin 2009
23 mai 2005 à 16:16
désolu, j'ai envoyé la solution deux fois
cs_NICK123 Messages postés 29 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 22 juin 2009
23 mai 2005 à 16:12
Voici une autre solution :
N.B. : KeyAscii 256> n'accepte rien

Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim char
Dim Pointv As Integer
Dim Pointm As Integer
If KeyAscii = 8 Then: GoTo okk
Pointv = InStr(1, Text1, ".")
If Pointv <> 0 Then
If Len(Mid(Text1, Pointv + 1, 2)) 2 Then: KeyAscii 256
End If
If KeyAscii = 45 Then
If Len(Text1) <> 0 Then
KeyAscii = 256
GoTo okk
End If
End If
If KeyAscii = 46 Then
If Len(Text1) = 0 Then
KeyAscii = 256
Else

If Len(Text1) = 1 Then
If Text1 = "-" Then
KeyAscii = 256
Else
GoTo okk
End If
Else
If Pointv <> 0 Then
KeyAscii = 256
Else
GoTo okk
End If
End If
End If
End If

If (KeyAscii > 47) And (KeyAscii < 58) Then
Else
If Len(Text1) = 0 Then
GoTo okk
End If
If KeyAscii <> 8 Then
KeyAscii = 256
End If
End If
okk:
End Sub
cs_Targhan Messages postés 13 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 24 mai 2005
21 mai 2005 à 17:02
Gobillot, keyascii 46 c'est le ".", pas le "+" et tu peux donc l'avoir autrement qu'en première position, mais tu ne peux en avoir qu'un.
Du coup, je pense que ceci pourrait peut-être convenir :

Select Case KeyAscii
Case 46 ' "."
If InStr(1, TextBox, Chr(KeyAscii)) <> 0 Then KeyAscii = 0
Case 45 ' "-"
If Len(TextBox) <> 0 Then KeyAscii = 0
Case 8, 48 To 57: 'accepté
Case Else: KeyAscii = 0
End Select
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
20 mai 2005 à 15:14
en fait, on peut pas avoir le "+" et "-" autrement qu'en première position

Select Case KeyAscii
Case 45, 46: If Asc(TextBox) KeyAscii then KeyAscii 0
Case 48 To 57: 'accepté
Case Else: KeyAscii = 0
End Select
cs_Targhan Messages postés 13 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 24 mai 2005
20 mai 2005 à 14:19
Ne pourrait-on pas remplacer ça :
'on teste si l'utilisateur a appuyé sur la touche -
If keyascii = 45 Then
'on teste un par un les caractères de la textbox et si l'on trouve un signe '-' on incrémente j
For p = 1 To Len(textbox)
If Asc(Mid(textbox, p, 1)) 45 Then j j + 1
Next
End If

'on teste si l'utilisateur a appuyé sur la touche '.'
If keyascii = 46 Then
'on teste un par un les caractères de la textbox et si l'on trouve un signe . on incrémente k
For p = 1 To Len(textbox)
If Asc(Mid(textbox, p, 1)) 46 Then k k + 1
Next
End If
'on teste les variables j et k et par ce moyen on autorise un seul caractère '-' ou '.' par textbox
If j 2 Then keyascii 24
If k 2 Then keyascii 24
par ça :
If (KeyAscii 45 Or KeyAscii 46) And InStr(1, TextBox, Chr(KeyAscii)) <> 0 Then KeyAscii = 24
?
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
19 mai 2005 à 22:14
Je savais pas qu'on pouvait mettre 2 valeurs dans Select Case (?)
pour info (True And True) donne True et toute autre valeur donne False. donc si (virgule=False) ou (signe=False) on passe dans le deuxième cas.

le Select Case marche très bien avec KeyAscii:
Select Case KeyAscii
Case 45, 46: '- et +
Case 48 To 57: '0 à 9
End Select

pour le test avec j=2 c'est raté il faut pas compter le caractère en cours qui n'est pas encore pris en compte.

et pourquoi ce choix KeyAscii = 24 ????
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
19 mai 2005 à 22:03
Bah tu pourrais remplacer tout
If keyascii <> 45 And keyascii <> 46 And keyascii <> 48 And keyascii <> 49 And keyascii <> 50 _
And keyascii <> 51 And keyascii <> 52 And keyascii <> 53 And keyascii <> 54 And keyascii <> 55 _
And keyascii <> 56 And keyascii <> 57 And keyascii <> 8 Then keyascii = 24

par :

if (keyascii < 45 and keyascii > 57) and keyascii <> 8 then keyascii = 24

c'est bcp plus propre lol



les lignes suivantes:
If keyascii = 45 Then
'on teste un par un les caractères de la textbox et si l'on trouve un signe '-' on incrémente j
For p = 1 To Len(textbox)
If Asc(Mid(textbox, p, 1)) 45 Then j j + 1
Next
End If

'on teste si l'utilisateur a appuyé sur la touche '.'
If keyascii = 46 Then
'on teste un par un les caractères de la textbox et si l'on trouve un signe . on incrémente k
For p = 1 To Len(textbox)
If Asc(Mid(textbox, p, 1)) 46 Then k k + 1
Next
End If
'on teste les variables j et k et par ce moyen on autorise un seul caractère '-' ou '.' par textbox
If j 2 Then keyascii 24
If k 2 Then keyascii 24








par simplement


If keyascii = 45 Then
'on teste un par un les caractères de la textbox et si l'on trouve un signe '-' on incrémente j
For p = 1 To Len(textbox)
If Asc(Mid(textbox, p, 1)) 45 Then keyascii 24 : exit for
Next
End If

'on teste si l'utilisateur a appuyé sur la touche '.'
If keyascii = 46 Then
'on teste un par un les caractères de la textbox et si l'on trouve un signe . on incrémente k
For p = 1 To Len(textbox)
If Asc(Mid(textbox, p, 1)) 46 Then keyascii 24 :exit for
Next
End If



du coup tu sauve du temp d'execution et de la mémoire puisque tu utilise 2 variable de moin ...


je vois pas pourquoi tu utilise virgule As Boolean, signe As Boolean

Puisque de toute fasson tu vérifie seulement si les 2 sont vrai ou si les 2 sont faut ...

et puis le True and True peu etre remplacer par un simple True. Meme chose pour le false and false...

voila c'est tout ce que j'ai a dire lol


Que la prog soit avec toi :)
Et prend pas mal mes remarques , c'est juste dans le but de t'aider ;-)
Rejoignez-nous