Remplacer le symbole décimal

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 613 fois - Téléchargée 25 fois

Contenu du snippet

Pour tous ceux qui ont été déçu par la précédente source et qui ont des soucis avec le symbole décimal, voici une méthode que j'utilise afin de changer le symbole décimal au lancement de mon programme. Cela peut poser un problème dans la mesure où ce code change le symbole décimale des options régionales et linguistiques (pendant la durée où le programme est ouvert), donc pour ceux qui utilisent des programmes qui ont un autre symbole décimal que celui qu'on veut dans le programme, ça peut poser quelques problèmes, mais bon, souvent, cela ne pose aucun problème et arrange pas mal les choses...

Source / Exemple :


'Dans un module il faut déclarer les API suivantes:
Public Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Public Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
Public SepDec As String            'Stockage du symbole décimal de la machine avant le lancement du programme
Public SepDecM As String           'Stockage du symbole décimal monétaire de la machine avant le lancement du programme
'Ecrivez les fonctions suivantes:
'Renvoie le séparateur décimal du système
Public Function SysSepDec() As String
    Dim Sep As String * 2
    GetLocaleInfo 0, &HE, Sep, 2
    SysSepDec = Left$(Sep, 1)
End Function
'Renvoie le SEParateur DECimal Monétaire du SYStème
Public Function SysSepDecM() As String
    Dim Sep As String * 2
    GetLocaleInfo 0, &H16, Sep, 2
    SysSepDecM = Left$(Sep, 1)
End Function
'Change le SEParateur DECimal existant par le "Nouveau"
Public Sub ChangeSepDec(Nouveau As String)
    'séparateur décimal
    SetLocaleInfo 0, &HE, Nouveau
End Sub
'Change le SEParateur DECimal Monétaire par le "Nouveau"
Public Sub ChangeSepDecM(Nouveau As String)
    'séparateur décimal monétaire
    SetLocaleInfo 0, &H16, Nouveau
End Sub
'##############
'Dans le Form_load écrivez
'Récupération du SepDec du système pr nombre et monétaire
SepDec = SysSepDec
SepDecM = SysSepDecM
If (SepDec = ",") Then ChangeSepDec "."   'On passe les "," en "."
If (SepDecM = ",") Then ChangeSepDecM "."
'##############
'Dans le Form_Unload donc à la fermeture du programme on remet le séparateur comme il était à l'origine
ChangeSepDec SepDec   'Remet le séparateur décimal comme il était avant le lancement du programme
ChangeSepDecM SepDecM 'Remet le séparateur décimal monétaire

Conclusion :


Il n'y a pas de Zip, mais en suivant les instructions et en recopiant le code, vous pourrez vous en sortir...
Bon courage, j'espère que cela vous aidera autant que moi :)

A voir également

Ajouter un commentaire

Commentaires

habib13520
Messages postés
11
Date d'inscription
jeudi 7 octobre 2004
Statut
Membre
Dernière intervention
14 novembre 2012
2 -
Superrrrrrrrrrrr
J'ai cherché depuis longtemps comment changer automatiquement le symbole de décimal ........
Bravooooooooooo et Merciiiiiiiii
cs_santiago69
Messages postés
91
Date d'inscription
jeudi 18 novembre 2004
Statut
Membre
Dernière intervention
17 décembre 2008
-
C'est vrai, l'exercice est interessant a presenter, mais il ne faut pas proposer de faire setsymbol en debut d'appli puis resetsymbol a la fin.
De plus, moi qui suis pourtant souvent confronte a des probleme de compatibilite de notation numerique, je n'ai jamais compris pourquoi windows separe le separateur decimal numerique et monetaire (moi perso si j'ecrit 1 234,56 kilos, j'ecris aussi 1 234,56 $). Je rassemblerais donc la modification des symboles dans la meme fonction. Non ?
Il est par ailleurs indispensable de modifier en meme temps le parametre separateur de milliers (&HF et &H17). Generalement dans les systemes internationaux, on ecrit 1,234.56. Si on passe en separateur decimal francais (,) on a l'air con d'afficher 1,234,56.
Donc pourquoi pas ne pas proposer :

Sub SetSymbol(DecSep as String, Optional ThousandSep as String)
SetLocaleInfo 0, &HE, DecSep
SetLocaleInfo 0, &H16, DecSep
SetLocaleInfo 0, &HF, ThousandSep
SetLocaleInfo 0, &H17, ThousandSep
End Sub

Voila c'est tout.
Santiago
Drikce06
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
5 -
santiago69, effectivement bonne remarque! Mais je dirais également que beaucoup d'utilisateur ne savent même pas qu'on peut changer ce paramètre!
cs_santiago69
Messages postés
91
Date d'inscription
jeudi 18 novembre 2004
Statut
Membre
Dernière intervention
17 décembre 2008
-
C'est enervant de voir que beaucoup d'entre vous essayent de changer le symbole decimal qu'a choisi l'utilisateur plutot que d'adapter leur application a ce symbole.
Il ne faut pas modifier les choix de l'utilisateur !
Pourquoi ne pas tout simplement recuperer le symbole au debut du programme et s'en servir dans les fonctions de calcul et d'affichage ?
Santiago
tbbuim1
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
7 -
Ok c cool

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.