EMPECHER DE SAISIR DES CARACTERES NON NUMERIQUES DANS UN TEXTBOX (SUPER SIMPLE!)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
9 juin 2004 à 19:25
Silmon
Messages postés85Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention 7 mai 2007
-
15 juin 2004 à 16:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Silmon
Messages postés85Date d'inscriptionmardi 6 janvier 2004StatutMembreDernière intervention 7 mai 2007 15 juin 2004 à 16:22
Salut tout le monde.
C'est moi qui ai proposé cette source, il se devait donc que je donne au moins un commentaire (je ne l'ai pas fait plus tot par manque de temps).
J'ai été étonné de l'engoument que ma source a suscité.
Et je remercie sincerment tout le monde pour les commentaires donnés, les sugestions et les remerciements.
Je dirai juste 3 trucs:
- 1: BruNews et Renfield, vous avez 100% raison
- 2: On a beaucoup insisté sur la lisibilité d'une source.
Je trouve ironique de parler de lisibilité et de simplicité quand les commentaires de certains sont aussi confus et difficiles à comprendre. Je pense qu'il y a un effort à faire la dessus. Utiliser un français correct et eviter les abréviations dans nos commentaires est au moins aussi important qu'un code lisible.
- 3: Ma source était simple et bien commentée, pratique et sans bugs. Bien qu'elle n'ait pas la pretention de faire 'complet' la note a été de 5/10! Un peu sévère comme même.
Alors j'ai ecris une nouvelle source dite 'complete' qui gere les nombres positifs/negatifs, la virgule et le copier/coller.
Voici le link:
http://www.vbfrance.com/code.aspx?ID=23713
Cette fois j'espere une bonne notation.
cs_moustachu
Messages postés1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDernière intervention 1 janvier 2012 14 juin 2004 à 09:55
Je savais pas qu'un test sur une textbox pouvait aller si loin... C'est du méga complet. Merci à vous !
++
moustachu
FeelCode
Messages postés278Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention27 avril 20061 13 juin 2004 à 20:14
BruNews et Renfield
Aux niveau binaire on est dac. sa fera moin de ligne pour el compilo :) le fait d'ecrire le moin de ligne n'aporte pas le gain de performance aussi (exemple: la récursiviter)
pour ce qui est de : appel SysAllocString interne je connaissait pas
merci BruNews pour cette info.
Là ou je suis pas dac c est sur le nombre de teste a faire ce qui a rien a voir avec du binaire ou un format quelqu'il soit. le fait est que :
Plus il teste plus il a de boulôt
donc plus il est lent. donc dans vos deux exemple vous rajouter des test qui compensse le peux de gain sur isnumerique sauf que c est moin lisible. et la vous ne teste qu'un faible partie des touche de clavier donc quess que sa va être quand il faudra toute les tester :)
il est claire que c est pas valable dans nôtre cas :)
Donc pour resumer si je puis me permettre ;D
optimiser une code ce fait dans son ensemble lisibiliter + optimisation comme la fait Renfield
Bon il y a aussi un truc que je trouve un peux inutile c est de récrire ce qui existe déjà. et c est pas la puissance qui est demander aux cpu pour le clavier qui demande de l'optimisation
Mai bon pourquoi pas, car on à pas tous un pc réscent ce qui est mon cas :)
Keep Cool :D
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 12 juin 2004 à 08:34
Bonjour tout le monde,
incursion dans ce debat qui me semble un peu sterile.
Rappel: un processeur travaille en format binaire donc tout ce qui se fera direct dans ce format n'aura aucun besoin de transformation, rapidite maximum, c'est le cas dans cette sub KeyPress ou le param est un integer. Une transformation string demandera un appel SysAllocString interne, trans de numeric en asccii, comparaison ascii et desalloc ulterieur, une aberration en terme de performance donc a bannir.
Le meilleur code n'est pas forcement celui qui parait le + court au niveau du script VB mais celui qui aura la meilleure logique d'execution.
Pour exemple on traitera: 8 ET (48 To 57)
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 8 Then Exit Sub
If (KeyAscii < 48) Or (KeyAscii > 57) Then KeyAscii = 0
End Sub
L'exec va se resoudre en 3 instructions de ce type generees par le compilo:
cmp EAX, constante ; avec sortie immediate
La solution de Renfield etait donc la meilleure.
BruNews, Admin CS, MVP Visual C++
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 12 juin 2004 à 02:30
Je cesserai toute discution sur ce sujet. J'ai dis ce que j'avais a dire, et j'ai apparemment du mal a me faire comprendre.
tu as dans ton exemple détourné le problème, puisque tu met en comparaison IsNumeric et un Select Case, pour des chaines de caractères.
le code proposé ici est inseré dans la procédure KeyPress
on traite donc ici un caractère (dont on nous donne la valeur Ascii), et non des suites de 300 et quelques caractères.
Il est évident que s'il s'etait agit de tester si "012345678" est numérique, j'aurais utilisé IsNumeric ; mais là n'etait pas la question.
quand a ton "toi tu teste des chiffre lol en plus il n'y a aucune instruction donc c est forcement plus rapide puis qu'il ne fait rien :)"
j'avoues ne pas comprendre....
les deux codes que j'ai ajouté plus haut sont identiques dans leur fonctionnement.
IsNumeric Chr$(a Mod 255) ne fais pas plus d'action.
mais essaies de mettre
IsNumeric a Mod 255
a la place. le fonctionnement ne sera pas identique, mais les temps d'execution entre nos 2 méthodes sont similaires. Ce qui prend en fait du temps, dans ton cas, c'est la conversion en caractère.
IsNumeric a besoin d'une chaine de caractères. Et Ce n'est pas parcequ'une ligne de code suffit, que l'execution sera plus rapide. On imagine par ailleurs très bien que IsNumeric, en interne, fonctionne avec des Select Case (Switch) sur le code ASCII des caractères.....
FeelCode
Messages postés278Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention27 avril 20061 11 juin 2004 à 16:34
arf j'ai oublier de coller la fonction pour le chrono :)
Public Function TempEcoule(TimeStart As Variant) As String 'renvoiye le temps d'execution
Dim Temp As Variant
Temp = TimeStart - Time
TempEcoule = CStr(Format(Temp, "h:mm:ss"))
End Function
FeelCode
Messages postés278Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention27 avril 20061 11 juin 2004 à 16:23
toi tu teste des chiffre lol en plus il n'y a aucune instruction donc
c est forcement plus rapide puis qu'il ne fait rien :)
Select Case KeyAscii n'est pas valable si tu doit tester sur une string de plusieur caractere
Car dans ton cas s'il a rentrer un mauvais caractere tu fait quoi ?
moi je teste sur la touche ou sur un autre evenement a la fin
si c est pas corecte je lui demande corriger et non pas a chaque faux caractere une boite de dialogue en pleine G*
prenon les chose dans la simpliciter
il nous faut un string pour faire ce teste que l'utilisateur a rentrer
dans le textbox en une fois suite a la touche enter
donc dans le form load nous avons:
Dim a As Long
Dim Tm As Variant
Dim Buff As String
' If Chr(KeyAscii) <> 13 Then Exit Sub 'fictif pour exemple
Buff = "123456789" 'le textbox contien cela
Tm = Time 'temp de départ utiliser en paramettre pour la fonction
For a = 0 To 9999999
If IsNumeric(Buff) Then
If Len(Buff) < 300 Then Buff = Buff & "1" 'petit truc bidon pour montrer la limite de isnumeric (aproximatif)
Else
MsgBox ("Veuilliez entrer seulment du numerique")'fictif
Exit For 'fictif uniquement pour exemple
'goto retour_case_depart etc
End If
Next a
Debug.Print "FeelCode : " & TempEcoule(Tm) & " : " & Buff
'vala tu me fais la meme chose avec ton select case en 12 ligne avec 3 variable et un nombre d'une longueur de 300 caractere(dans la boucle);D
'encore que une variable ser uniquement pour le tailming :) a la place du buff on pourrai utiliser le textbox donc sa nous ferais 1 variable seulment pour la boucle lol
chez moi sa a mis 40 sec d'execution donc sa gele l'ecrant vu qu'il n'y a pas de doevents :)
GlanduSchmoldu surper le surnom lol
Sa depant surtou du nombre de teste a faire
plus il y a de case et /ou case else
ou plus il y a de if et / ou else plus il doit tester apres s'il y en a un des deux qui est plus rapide que l'autre je pencherai plutôt pour le if
mai j'ai jamais tester. car il faut vraiment pinailler la lol
vala :D
GlanduSchmoldu
Messages postés199Date d'inscriptionmardi 23 décembre 2003StatutMembreDernière intervention27 octobre 20061 11 juin 2004 à 15:01
Question :
Select
Case machin
'rien du tout
Case Else
'qqchose
End Select
Est ce vraiment plus rapide que ceci ?
If Not machin Then 'qqchose
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 11 juin 2004 à 02:22
IsNumeric utilises une chaine de caractères... tu dois donc convertir ton caractère en chaine de caractère (fonction Chr , ce qui créee au passage une variable de type String en mémoire)
ensuite, il testes chacun des caractères pour tester si c'est un chiffre (il se base surement sur son code Ascii (alors qu'on l'avais au depart))
bref, moins de code, mais certainement pas moins de traitement..
la taille du code ou ca lisibilité ne suffisent bien souvent pas a ce qu'il soit rapide...
le Select Case est de plus un element de la syntaxe de base de VB...
Case 48 to 57 est en effet beaucoup plus rapide (en execution) que
Case 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 .... cette commande donc doit être optimisée en interne...
j'ai fait ce petit code pour tenter de quantifier la chose....
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Form_Load()
Dim a As Long
Dim Start As Long
Const Count As Long = 9999999
Start = GetTickCount
For a = 0 To Count
Select Case a Mod 255
Case 48 To 57
Case Else:
End Select
Next a
Debug.Print "Renfield : " & GetTickCount - Start
Start = GetTickCount
For a = 0 To Count
IsNumeric Chr$(a Mod 255)
Next a
Debug.Print "FeelCode : " & GetTickCount - Start
End Sub
(d'aucuns diront peut-etre qu'il faudrait tester sur un projet compilé, sans debug.print.... je m'en contenterait pourtant)
FeelCode
Messages postés278Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention27 avril 20061 11 juin 2004 à 01:16
Euh....
Avec tes testes à répetition sa m'etonnerais que sa soie plus rapide
que mon code car plus tu teste plus il ya de traitement.
Optimisation que tu dis ? je considere que le mien est plus claire plus simple avec moin de teste alors a moin que isnumeric soie beaucoup plus lent,evidament le seul moyen de le savoir c'est de le faire montre en main alors est ce que tu l'a fait? et si c est le cas combien de temps tu as gagnié ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 10 juin 2004 à 21:50
je ne suis pas d'accord sur l'utilisation ici de IsNumeric....
je vois juste ici un test sur la valeur d'un entier.....
l'utilisation de IsNumeric requiert une chaine de caractères....
et convertir en chaine pour gagner de la place dans le CODE ne fera que ralentir cela....
oh, bien sur, ca ne se verra pas, surtout dans ce cas (saisie au clavier donc lent ), mais optimiser quelques peu son code est un reflexe a prendre....
FeelCode
Messages postés278Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention27 avril 20061 10 juin 2004 à 17:08
if isnumeric("123")=True then 'c est du numerique else 'ben non
vala suffi de demander en une ligne d'autre question lol
cs_moustachu
Messages postés1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDernière intervention 1 janvier 2012 10 juin 2004 à 16:19
C'est si tu ne veux pas la séparation décimale ("." est numérique)
++
moustachu
Sirocooo
Messages postés412Date d'inscriptionmercredi 19 décembre 2001StatutMembreDernière intervention 7 avril 20081 10 juin 2004 à 10:01
pourquoi ne pas utiliser la fonction IsNumeric
cs_akzo
Messages postés133Date d'inscriptiondimanche 23 juin 2002StatutMembreDernière intervention 3 janvier 20153 10 juin 2004 à 03:25
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 8 Then Exit Sub
'ce qui suis pour aller dans un autre textbox
If KeyAscii 13 Then Text2.SelStart 0: Text2.SelLength = Len(Text2.Text): Text2.SetFocus: KeyAscii = 0
'ce qui suis pour choisir que des nombres
If InStr("0123456789", Chr(KeyAscii)) 0 Then KeyAscii 0
End Sub
quel est la difference avec ceci
cs_NoMitsu
Messages postés122Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention15 février 2011 9 juin 2004 à 22:18
il reste encore a verifier les caracteres lors d'un copier / coller !!
SkyRocKo
Messages postés174Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention18 février 2006 9 juin 2004 à 21:06
oupsss.............
excuse-moi Renfield pour ce commentaire (je n'avais pas vu le tiens)
SkyRocKo
Messages postés174Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention18 février 2006 9 juin 2004 à 20:54
Pour que ca gère la touche backspace (au dessus de enter) :
' On controle l'introduction de caractere a partir du clavier
' pour ne permettre que des nombres
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
' le KeyAscii 48 correspond au 0
' le KeyAscii 49 correspond au 1
' ...
' le KeyAscii 57 correspond au 9
' le KeyAscii 8 correspond à backspace
Case 48 To 57 And 8
' Ici on ne fait rien (pour permettre l'introduction des numero)
'-----------------------------------------------------------
' On anule le caractere si ce n'est pas un numero
Case Else: KeyAscii = 0
'-------------------------
End Select
End Sub
SkyRocKo
Messages postés174Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention18 février 2006 9 juin 2004 à 20:34
10/10
bonne continuation
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 9 juin 2004 à 19:25
petite correction :
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
' 8 -> Retour arriere
' 3,22,24 -> Presse Papiers
' 48 à 57 -> Chiffres
Case 8, 3, 22, 24, 48 To 57:
' Ici on ne fait rien (pour permettre l'introduction des CHIFFRES)
'-----------------------------------------------------------
' On anule les autres touches
Case Else: KeyAscii = 0
End Select
End Sub
15 juin 2004 à 16:22
C'est moi qui ai proposé cette source, il se devait donc que je donne au moins un commentaire (je ne l'ai pas fait plus tot par manque de temps).
J'ai été étonné de l'engoument que ma source a suscité.
Et je remercie sincerment tout le monde pour les commentaires donnés, les sugestions et les remerciements.
Je dirai juste 3 trucs:
- 1: BruNews et Renfield, vous avez 100% raison
- 2: On a beaucoup insisté sur la lisibilité d'une source.
Je trouve ironique de parler de lisibilité et de simplicité quand les commentaires de certains sont aussi confus et difficiles à comprendre. Je pense qu'il y a un effort à faire la dessus. Utiliser un français correct et eviter les abréviations dans nos commentaires est au moins aussi important qu'un code lisible.
- 3: Ma source était simple et bien commentée, pratique et sans bugs. Bien qu'elle n'ait pas la pretention de faire 'complet' la note a été de 5/10! Un peu sévère comme même.
Alors j'ai ecris une nouvelle source dite 'complete' qui gere les nombres positifs/negatifs, la virgule et le copier/coller.
Voici le link:
http://www.vbfrance.com/code.aspx?ID=23713
Cette fois j'espere une bonne notation.
14 juin 2004 à 09:55
++
moustachu
13 juin 2004 à 20:14
Aux niveau binaire on est dac. sa fera moin de ligne pour el compilo :) le fait d'ecrire le moin de ligne n'aporte pas le gain de performance aussi (exemple: la récursiviter)
pour ce qui est de : appel SysAllocString interne je connaissait pas
merci BruNews pour cette info.
Là ou je suis pas dac c est sur le nombre de teste a faire ce qui a rien a voir avec du binaire ou un format quelqu'il soit. le fait est que :
Plus il teste plus il a de boulôt
donc plus il est lent. donc dans vos deux exemple vous rajouter des test qui compensse le peux de gain sur isnumerique sauf que c est moin lisible. et la vous ne teste qu'un faible partie des touche de clavier donc quess que sa va être quand il faudra toute les tester :)
il est claire que c est pas valable dans nôtre cas :)
Donc pour resumer si je puis me permettre ;D
optimiser une code ce fait dans son ensemble lisibiliter + optimisation comme la fait Renfield
Bon il y a aussi un truc que je trouve un peux inutile c est de récrire ce qui existe déjà. et c est pas la puissance qui est demander aux cpu pour le clavier qui demande de l'optimisation
Mai bon pourquoi pas, car on à pas tous un pc réscent ce qui est mon cas :)
Keep Cool :D
12 juin 2004 à 08:34
incursion dans ce debat qui me semble un peu sterile.
Rappel: un processeur travaille en format binaire donc tout ce qui se fera direct dans ce format n'aura aucun besoin de transformation, rapidite maximum, c'est le cas dans cette sub KeyPress ou le param est un integer. Une transformation string demandera un appel SysAllocString interne, trans de numeric en asccii, comparaison ascii et desalloc ulterieur, une aberration en terme de performance donc a bannir.
Le meilleur code n'est pas forcement celui qui parait le + court au niveau du script VB mais celui qui aura la meilleure logique d'execution.
Pour exemple on traitera: 8 ET (48 To 57)
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 8 Then Exit Sub
If (KeyAscii < 48) Or (KeyAscii > 57) Then KeyAscii = 0
End Sub
L'exec va se resoudre en 3 instructions de ce type generees par le compilo:
cmp EAX, constante ; avec sortie immediate
La solution de Renfield etait donc la meilleure.
BruNews, Admin CS, MVP Visual C++
12 juin 2004 à 02:30
tu as dans ton exemple détourné le problème, puisque tu met en comparaison IsNumeric et un Select Case, pour des chaines de caractères.
le code proposé ici est inseré dans la procédure KeyPress
on traite donc ici un caractère (dont on nous donne la valeur Ascii), et non des suites de 300 et quelques caractères.
Il est évident que s'il s'etait agit de tester si "012345678" est numérique, j'aurais utilisé IsNumeric ; mais là n'etait pas la question.
quand a ton "toi tu teste des chiffre lol en plus il n'y a aucune instruction donc c est forcement plus rapide puis qu'il ne fait rien :)"
j'avoues ne pas comprendre....
les deux codes que j'ai ajouté plus haut sont identiques dans leur fonctionnement.
IsNumeric Chr$(a Mod 255) ne fais pas plus d'action.
mais essaies de mettre
IsNumeric a Mod 255
a la place. le fonctionnement ne sera pas identique, mais les temps d'execution entre nos 2 méthodes sont similaires. Ce qui prend en fait du temps, dans ton cas, c'est la conversion en caractère.
IsNumeric a besoin d'une chaine de caractères. Et Ce n'est pas parcequ'une ligne de code suffit, que l'execution sera plus rapide. On imagine par ailleurs très bien que IsNumeric, en interne, fonctionne avec des Select Case (Switch) sur le code ASCII des caractères.....
11 juin 2004 à 16:34
Public Function TempEcoule(TimeStart As Variant) As String 'renvoiye le temps d'execution
Dim Temp As Variant
Temp = TimeStart - Time
TempEcoule = CStr(Format(Temp, "h:mm:ss"))
End Function
11 juin 2004 à 16:23
c est forcement plus rapide puis qu'il ne fait rien :)
Select Case KeyAscii n'est pas valable si tu doit tester sur une string de plusieur caractere
Car dans ton cas s'il a rentrer un mauvais caractere tu fait quoi ?
moi je teste sur la touche ou sur un autre evenement a la fin
si c est pas corecte je lui demande corriger et non pas a chaque faux caractere une boite de dialogue en pleine G*
prenon les chose dans la simpliciter
il nous faut un string pour faire ce teste que l'utilisateur a rentrer
dans le textbox en une fois suite a la touche enter
donc dans le form load nous avons:
Dim a As Long
Dim Tm As Variant
Dim Buff As String
' If Chr(KeyAscii) <> 13 Then Exit Sub 'fictif pour exemple
Buff = "123456789" 'le textbox contien cela
Tm = Time 'temp de départ utiliser en paramettre pour la fonction
For a = 0 To 9999999
If IsNumeric(Buff) Then
If Len(Buff) < 300 Then Buff = Buff & "1" 'petit truc bidon pour montrer la limite de isnumeric (aproximatif)
Else
MsgBox ("Veuilliez entrer seulment du numerique")'fictif
Exit For 'fictif uniquement pour exemple
'goto retour_case_depart etc
End If
Next a
Debug.Print "FeelCode : " & TempEcoule(Tm) & " : " & Buff
'vala tu me fais la meme chose avec ton select case en 12 ligne avec 3 variable et un nombre d'une longueur de 300 caractere(dans la boucle);D
'encore que une variable ser uniquement pour le tailming :) a la place du buff on pourrai utiliser le textbox donc sa nous ferais 1 variable seulment pour la boucle lol
chez moi sa a mis 40 sec d'execution donc sa gele l'ecrant vu qu'il n'y a pas de doevents :)
GlanduSchmoldu surper le surnom lol
Sa depant surtou du nombre de teste a faire
plus il y a de case et /ou case else
ou plus il y a de if et / ou else plus il doit tester apres s'il y en a un des deux qui est plus rapide que l'autre je pencherai plutôt pour le if
mai j'ai jamais tester. car il faut vraiment pinailler la lol
vala :D
11 juin 2004 à 15:01
Select
Case machin
'rien du tout
Case Else
'qqchose
End Select
Est ce vraiment plus rapide que ceci ?
If Not machin Then 'qqchose
11 juin 2004 à 02:22
ensuite, il testes chacun des caractères pour tester si c'est un chiffre (il se base surement sur son code Ascii (alors qu'on l'avais au depart))
bref, moins de code, mais certainement pas moins de traitement..
la taille du code ou ca lisibilité ne suffisent bien souvent pas a ce qu'il soit rapide...
le Select Case est de plus un element de la syntaxe de base de VB...
Case 48 to 57 est en effet beaucoup plus rapide (en execution) que
Case 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 .... cette commande donc doit être optimisée en interne...
j'ai fait ce petit code pour tenter de quantifier la chose....
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Form_Load()
Dim a As Long
Dim Start As Long
Const Count As Long = 9999999
Start = GetTickCount
For a = 0 To Count
Select Case a Mod 255
Case 48 To 57
Case Else:
End Select
Next a
Debug.Print "Renfield : " & GetTickCount - Start
Start = GetTickCount
For a = 0 To Count
IsNumeric Chr$(a Mod 255)
Next a
Debug.Print "FeelCode : " & GetTickCount - Start
End Sub
(d'aucuns diront peut-etre qu'il faudrait tester sur un projet compilé, sans debug.print.... je m'en contenterait pourtant)
11 juin 2004 à 01:16
Avec tes testes à répetition sa m'etonnerais que sa soie plus rapide
que mon code car plus tu teste plus il ya de traitement.
Optimisation que tu dis ? je considere que le mien est plus claire plus simple avec moin de teste alors a moin que isnumeric soie beaucoup plus lent,evidament le seul moyen de le savoir c'est de le faire montre en main alors est ce que tu l'a fait? et si c est le cas combien de temps tu as gagnié ?
10 juin 2004 à 21:50
je vois juste ici un test sur la valeur d'un entier.....
l'utilisation de IsNumeric requiert une chaine de caractères....
et convertir en chaine pour gagner de la place dans le CODE ne fera que ralentir cela....
oh, bien sur, ca ne se verra pas, surtout dans ce cas (saisie au clavier donc lent ), mais optimiser quelques peu son code est un reflexe a prendre....
10 juin 2004 à 17:08
vala suffi de demander en une ligne d'autre question lol
10 juin 2004 à 16:19
++
moustachu
10 juin 2004 à 10:01
10 juin 2004 à 03:25
If KeyAscii = 8 Then Exit Sub
'ce qui suis pour aller dans un autre textbox
If KeyAscii 13 Then Text2.SelStart 0: Text2.SelLength = Len(Text2.Text): Text2.SetFocus: KeyAscii = 0
'ce qui suis pour choisir que des nombres
If InStr("0123456789", Chr(KeyAscii)) 0 Then KeyAscii 0
End Sub
quel est la difference avec ceci
9 juin 2004 à 22:18
9 juin 2004 à 21:06
excuse-moi Renfield pour ce commentaire (je n'avais pas vu le tiens)
9 juin 2004 à 20:54
' On controle l'introduction de caractere a partir du clavier
' pour ne permettre que des nombres
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
' le KeyAscii 48 correspond au 0
' le KeyAscii 49 correspond au 1
' ...
' le KeyAscii 57 correspond au 9
' le KeyAscii 8 correspond à backspace
Case 48 To 57 And 8
' Ici on ne fait rien (pour permettre l'introduction des numero)
'-----------------------------------------------------------
' On anule le caractere si ce n'est pas un numero
Case Else: KeyAscii = 0
'-------------------------
End Select
End Sub
9 juin 2004 à 20:34
bonne continuation
9 juin 2004 à 19:25
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
' 8 -> Retour arriere
' 3,22,24 -> Presse Papiers
' 48 à 57 -> Chiffres
Case 8, 3, 22, 24, 48 To 57:
' Ici on ne fait rien (pour permettre l'introduction des CHIFFRES)
'-----------------------------------------------------------
' On anule les autres touches
Case Else: KeyAscii = 0
End Select
End Sub