AUTORISER UNIQUEMENT LES CHIFFRES, POINT ET SIGNE - DANS UNE TEXTBOX
cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008
-
19 mai 2005 à 22:03
bibinutz
Messages postés32Date d'inscriptionmercredi 13 avril 2005StatutMembreDernière intervention13 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.
bibinutz
Messages postés32Date d'inscriptionmercredi 13 avril 2005StatutMembreDernière intervention13 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és32Date d'inscriptionmercredi 13 avril 2005StatutMembreDernière intervention13 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és29Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention22 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és13Date d'inscriptionvendredi 22 août 2003StatutMembreDernière intervention24 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és29Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention22 juin 2009 24 mai 2005 à 00:05
Désolé, je veux seulement aider
cs_Targhan
Messages postés13Date d'inscriptionvendredi 22 août 2003StatutMembreDernière intervention24 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és29Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention22 juin 2009 23 mai 2005 à 16:16
désolu, j'ai envoyé la solution deux fois
cs_NICK123
Messages postés29Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention22 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és13Date d'inscriptionvendredi 22 août 2003StatutMembreDernière intervention24 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és3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 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és13Date d'inscriptionvendredi 22 août 2003StatutMembreDernière intervention24 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és3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 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és592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDerniè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 ;-)
4 juin 2005 à 10:37
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
3 juin 2005 à 23:29
Salutations.
24 mai 2005 à 00:33
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
24 mai 2005 à 00:26
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...
24 mai 2005 à 00:05
23 mai 2005 à 23:25
Je voudrais pas chipoter, mais il me semble que ce n'est pas le but recherché...
23 mai 2005 à 16:16
23 mai 2005 à 16:12
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
21 mai 2005 à 17:02
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
20 mai 2005 à 15:14
Select Case KeyAscii
Case 45, 46: If Asc(TextBox) KeyAscii then KeyAscii 0
Case 48 To 57: 'accepté
Case Else: KeyAscii = 0
End Select
20 mai 2005 à 14:19
'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
?
19 mai 2005 à 22:14
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 ????
19 mai 2005 à 22:03
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 ;-)