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

Signaler
Messages postés
592
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2008
-
bibinutz
Messages postés
32
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
13 janvier 2009
-
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

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

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

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

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

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

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

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

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

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
21
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

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
21
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

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 ;-)