Remplacer le symbole décimal

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 469 fois - Téléchargée 27 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
Drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
17 nov. 2006 à 12:01
Salut, j'ai pas testé ton code, mais tu déclare pas &HE comme constante! Bon, c'est pas un drame non plus!

Sinon autres méthodes pour appliquer cela à tout le système ou juste à une application (excel par exemple)

http://www.codyx.org/snippet_modifier-separateur-decimale-options-regionales-linguistiques_264.aspx

(pas noté)
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
17 nov. 2006 à 13:24
Tu n'as pas besoin de déclarer &HE, puisque c'est un long...
En fait, tu as besoin de déclarer si tu mets
Public Const DECIMAL_MESCOUI.... = &HE
Or, je passe directement la valeur &HE, donc c moins lisible, mais c bon..!

Pour codyx, j'ai déjà vu ton poste sur l'autre source merci. J'étais au courant, mais ce que je regrette sur cet exemple de codyx, c qu'il ne parle que du symbol décimal &HE (justement) et pas du symbol décimal monétaire (&H16)...
Drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
17 nov. 2006 à 13:32
Oui effectivement, c'était juste pour montrer une façon de faire! Sinon c'est facilement adaptable au signe monétaire suffit de remplacer la constante &HE par &H16 et le tour est joué! Enfin je pense! Je vais tester.
Drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
17 nov. 2006 à 13:52
ça fonctionne :

Option Explicit

'Déclaration des fonctions API
Private 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
Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCTYPE As Long, ByVal lpLCData As String) As Long
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long

'Déclaration de la constante séparateur décimal
Private Const LOCALE_SMONATARY = &H16

Public Property Get MonetarySeparator() As String
Dim nLength As Long
Dim nLocale As Long
nLocale = GetUserDefaultLCID()
nLength = GetLocaleInfo(nLocale, LOCALE_SMONATARY, vbNullString, 0) - 1
MonetarySeparator = Space$(nLength)
GetLocaleInfo nLocale, LOCALE_SMONATARY, MonetarySeparator, nLength
End Property

Public Property Let MonetarySeparator(ByRef Value As String)
Dim nLocale As Long
If Value <> MonetarySeparator Then
If Value "." Or Value "," Then
nLocale = GetUserDefaultLCID()
SetLocaleInfo nLocale, LOCALE_SMONATARY, Value
End If
End If
End Property
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
17 nov. 2006 à 19:08
Salut,

heu c'est une source ça ?
Ou un bout de code ! Perso, je ne l'aurai pas mis là, mais bon..
D'autant plus que notre ami Drikce et moi même avons déposé un "snippet" (et pas une source) ;)

Bref, code que l'on peut trouver ici :
http://www.codyx.org/snippet_modifier-separateur-decimale-options-regionales-linguistiques_264.aspx

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.