Forcer le "." point comme paramètre décimal dans les paramètres régionnaux ( ma solution)

Soyez le premier à donner votre avis sur cette source.

Vue 27 142 fois - Téléchargée 902 fois

Description

Il existait sur le site une source traitant de ce sujet qui avait même déclanshée pas mal de polémique. Elle avait l'avantage d'apporter pas mal de débat, solution avis sur la question. Malheureusement je viens de voir qu'elle a été désactivé par un ADMIN ! Pourqouoi ? pas d'infos c'est peut être un manque dans le site au lieu de mettre juste désactivé la raisson serait intéressante. La source s'appelait (TESTER SIMPLEMENT LA "," OU LE "." EN PARAMÈTRE REGIONAL http://www.vbfrance.com/code.aspx?id=32227 )

Enfin bref pour répondre à un problème récurent je poste ma solution à ce problème. C'est une solution un peu barbare qui consiste àa forcer le paramètre directement dans le registre. C'est pas propre mais efficace.

Le problème est le suivant dans les paramètres régionnaux sous windows tu peux fixer le format du symbol déciaml. En France c'est la virgule au US ou autre c'est le point. Le problème vient ensuite quand tu veux écrire ou relire un nonbre dans un fichier texte ou dans un controle. la conversion selon que tu as 0,2 ou 0.2 ne donnera pas la même chose. si tu es avec une virgule une fonction du type Val te retournera 0 de même l'écriture de 0.2 dans un fichier texte via une fonction comme format(MaValeurDouble,"0.000") ( pour écrire un nombre avec trois chiffres après la virgule te donnera 0,2 au lieu des 0.2 désirée.

Comme pour ma part toute mes applications utilise des format de type . avec séparateur décimal j'ai opté pour la solution radicale : Je force.

A l'ouverture du programme je test en regardant dans le registre le charactère (Y a plus simple voir autres sources sur le site ) si c'est pas le bon jécris le point et j'ouvre automatiquement le panneau des réglages régionnaux pour indiquer à l'utilisateur la modif. On est pas des bètes tout de même :)

Source / Exemple :


Private Sub Form_Load()
' test le charactere décimal
If test_decimal Then
    ' force le charactere à un point
    ' NE marche pas ...
    Call EcritureRegistre(HKEY_CURRENT_USER, "Control Panel\International", "sDecimal", REG_SZ, ".")
    Shell "rundll32 shell32,Control_RunDLL intl.cpl"    ' Regional setting
End If

End Sub

' test dans le registre le charactere de la décmal
Function test_decimal() As Boolean
Dim rc As Long
Dim SysDecimal As String
    

rc = GetKeyValue(HKEY_CURRENT_USER, "Control Panel\International", "sDecimal", SysDecimal)
If SysDecimal <> "," Then
    test_decimal = True
    MsgBox "Attention le caracthere décimal n'est pas un point"
Else
    test_decimal = False
End If

End Function

Conclusion :


Voilà vous pouvez Y aller de vos commentaires . Cette source est faites pour ca ...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1221
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018

Val utilise toujours le point quel que soit le séparateur décimal en vigueur : donc normalement le code de renfiled devrait fonctionner en france et dans les pays anglophones... sauf si on précise un séparateur décimal différent de virgule et point (rare !) et qu'on demande de traiter une chaine avec une virgule par exemple.
La solution est de lire le séparateur en vigueur, de regarder si elle est présente dans la chaine, et si oui de la remplacer par le point puis d'utiliser Val. Attention, la fonction IsNumeric peut être très longue : mieux vaut remplacer systématiquement le séparateur par le point et d'utiliser Val.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
sûr qu'il y a souvent un gouffre entre les bonnes moeurs et ce qui est fait dans le monde reel ^^
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

oui ok pour IsNumeric c'est juste mais j'ai lu ton article mais j'ai été confronté à un problème similaire où un client a envoyé son fichier data d'un vieux logiciel où le stockage n'était pas correcte (comme tu le relate d'ailleurs) et boom patatrac, en France, "123.456,7" renvoyait 123.456
D'où comme tu le soulignes, d'enregistrer de manière internationale !
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
j'avoue ne pas saisir.
Si la chaine est conforme aux parametres regionnaux du poste, IsNumeric la reconnaitra, quels que soient les parametres utilisés.

Sinon, on a affaire a une chaine formatée en utilisant le format international, et Val s'en sortira haut la main.

La seule alternative est une donnée mal formée, compte tenu des parametres du poste. Dans ce cas, ton code la trafique et tente d'en récupérer une valeur correcte.
Ce genre de manipulation est à éviter et met à jour une mauvaise conception a un endroit où a un autre.

Comme je le dit dans mon article, on doit toujours transmettre les données de manière internationale, sauf si le destinataire est un humain dont on peut présumer des parametres régionnaux. Auquel cas, on formatte la donnée de manière à ce qu'elle lui paraisse lisible et non ambigüe.
Messages postés
232
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
5 octobre 2012

Salut Renfiedl,
mais si le séparateur de millier est le point, ca marche pas dans ton cas. Ex : "123.456,7" renvoi 123.456

D'où dans ma fonction les "InStrRev"
Afficher les 43 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.