FORMATER SAISIE D'UNE PLAQUE IMMATRICULATION [TEXTBOX]

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 - 5 déc. 2005 à 22:15
Thalyee Messages postés 26 Date d'inscription mardi 22 octobre 2002 Statut Membre Dernière intervention 14 mai 2006 - 6 déc. 2005 à 15:12
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/34934-formater-saisie-d-une-plaque-immatriculation-textbox

Thalyee Messages postés 26 Date d'inscription mardi 22 octobre 2002 Statut Membre Dernière intervention 14 mai 2006
6 déc. 2005 à 15:12
Ok c'était tard désolé je vais mettre en
false c'est des mauvaises habitudes d'un autre langage
pour les problèmes des saisie c'est aussi pour ça que j'utilise le gotfocus, un tab: changement de zone, un tab arrière: on reviens sur la zone Immat (mise à blanc) et on recommence la saisie. Je sais que c'est loin d'être parfait, désolé mais j'en ai besoin et ça marche tout de même.
Merci pour les points de vue ça guide.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
6 déc. 2005 à 10:42
2 choses :
Je reviens sur la mise a zero. Econs ne t'as pas dit de la supprimer mais de remplacer TstFin 0 par TstFin False car c'est plus lisible.

Par contre a aucun moment tu ne tiens compte de la position du curseur (Text1.SelStart). Car si en cours de saisie je reviens en arriere et j'insere autre chose... aie aie aie.
Exemple : J'ai deja saisi "1243 X" et que je replace mon curseur entre le 2 et le 4 et que je resaisi qelque chose. Que va-t-il se passer ???
Thalyee Messages postés 26 Date d'inscription mardi 22 octobre 2002 Statut Membre Dernière intervention 14 mai 2006
5 déc. 2005 à 23:29
Merci pour la compression
----> If Not K Like "[0-9a-zA-Z]" Then
pour
---> Utilise plutôt 'Sai' dans le If
aussi
La mise à zéro c'est parce que le textbox en question n'est pas seul et si on tabule vaut mieux la faire sinon ça marche plus
Pour la pile j'ai pas trouvé mieux pour l'instant, y a t il moyen de parer à cela??
Merci
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
5 déc. 2005 à 22:15
Effectivement, çà peut être raccourci :
Ceci par exemple, pour éviter " If

If Not K Like "[0-9a-zA-Z]" Then
KeyAscii = 0
End If

---------------------------------

Sai = Len(Text1.Text)
If Len(Text1.Text) <> 0 Then 'Pour le cas gotfocus ;-)

Tu recalcules deux fois la longueur de la chaine. Utilise plutôt 'Sai' dans le If

---------------------------------

# Private Sub Text1_gotFocus()
# Text1.Text = ""
# TstChf = 0
# TstLtt = 0
# TstFin = 0
# End Sub

Les trois variables mises à zéro sont des Booléens. Une mise à zéro est tout à fait correcte, mais il y a des débutants qui s'y perdront. Mets plutôt les variables à 'False', on y verra plus clair.

-------------------------------


Private Sub Text1_Change()
Sai = Len(Text1.Text)

If Len(Text1.Text) <> 0 Then 'Pour le cas gotfocus ;-)
If TstFin = 0 Then ' Test chiffres Département
If TstLtt = 0 Then ' Test Lettres
If TstChf = 0 Then 'Test chiffres du début saisie
If Not IsNumeric(Text1) Then 'saisie d'un carac non num
Prov1 = Mid$(Text1.Text, 1, Sai - 1)
Prov = UCase(Mid$(Text1.Text, Sai, 1))
TstChf = 1 'On passe aux lettres
Text1.Text = Prov1 & " " & Prov <----------


-------------------------

Quand tu exécutes la ligne marquée d'une flèche, tu modifies le contenu de Text1.
Par conséquent, tu lèves l'evénement 'Change' de la Textbox. Du coup, tu re-rentres dans la procédure, tu repasses au même endroit, tu re-lèves l'evénement 'Change', ... et la valeur de Text1.Text gonfle ... gonfle ... jusqu'à faire exploser la pile.
Rejoignez-nous