SAISIE NUMÉRIQUE UNIVERSELLE AVEC TEXTBOX

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 17 juil. 2008 à 00:30
vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011 - 17 juil. 2008 à 21:33
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/47334-saisie-numerique-universelle-avec-textbox

vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011
17 juil. 2008 à 21:33
Aussi, pourqoi ne pas remplacer le code suivant:
If Right$(Text1.Text, 1) "0" Or Right$(Text1.Text, 1) "1" Or _ Right$(Text1.Text, 1) "2" Or Right$(Text1.Text, 1) "3" _ Or Right$(Text1.Text, 1) "4" Or Right$(Text1.Text, 1) "5" _ Or Right$(Text1.Text, 1) "6" Or Right$(Text1.Text, 1) "7" _ Or Right$(Text1.Text, 1) "8" Or Right$(Text1.Text, 1) "9" _ Or Right$(Text1.Text, 1) "." Or Right$(Text1.Text, 1) "-" Then

par...
if instr("0123456789.-",Right$(Text1.Text, 1)) then
?
ça fait une petite économie ;)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 juil. 2008 à 00:30
Du grand n'importe quoi...

tu te fiches des paramètres régionnaux. tu en cible des particuliers, voilà tout. tu interdis la frappe d'une virgule "," au profit d'un "."
Pourquoi ?
Sur un poste anglais, un type voulant placer des séparateurs des milliers se retrouveras avec des séparateurs décimaux... bel exemple d'universalité ^^

Les utilisateurs ont certains paramètres regionnaux, respectes les, c'est a ton programme de s'adapter (tu dois même faire le contraire que ce que tu fais, avec le pavé numérique : substituer une ',' au '.', si les regional settings l'exigent).

tu parles des fonctions de Cast (CSng, CDbl et CCur, principalement)
Elles utilisent, elles, les regional settings.
par contre, Val ou Str$ sont celles que l'on doit utiliser pour aller de/vers un format internationnal.

le controle de la saisie est effectivement un point sensible. mais il faut le faire bien.
comme pour les dates...
l'idée est de laisser l'utilisateur faire comme il lui semble.
Il devrait jouer avec ses regional settings.
On teste alors avec IsNumeric, voir s'il a fait n'importe quoi...
on peut alors utiliser CSng ou CDbl, pour obtenir notre donnée décimale.

Si IsNumeric renvoie False, on peut être tolérants, et tenter de jouer avec Val.
Au pire, il n'aura pas la valeur qu'il souhaitait... il aurait du faire gaffe ^^

Idem avec IsDate... fais confiance a l'utilisateur. Si la donnée est compréhensible en fonction de ses regional settings (sachant que VB ajuste seul parfois), tant mieux. Si la donnée n'est pas celle qu'il désire, tant pis pour lui...

Pas de Format$(Value, "0.00") ou pire : Format$(Now, "dd/mm/YYYY") c'est une faute grave. Utiliser FormatNumber et FormatDateTime (idem, avec FormatCurrency).

par contre, si tu génères un INI, ou tout autre sauvegarde du genre (textuel), on enregistre au format internationnal.

dernière chose, dans ton code, quand on modifie un textbox, le curseur n'est pas forcément a la fin...
dans ta form, je tapes 122
zut, je voulais ecrire 12,32
je décale mon caret, je tape ma virgule, et hop, mon curseur reviens en fin.

pas top ...
Rejoignez-nous