Superrrrrrrrrrrr
J'ai cherché depuis longtemps comment changer automatiquement le symbole de décimal ........
Bravooooooooooo et Merciiiiiiiii
cs_santiago69
Messages postés91Date d'inscriptionjeudi 18 novembre 2004StatutMembreDernière intervention17 décembre 2008 20 déc. 2006 à 09:37
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
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és91Date d'inscriptionjeudi 18 novembre 2004StatutMembreDernière intervention17 décembre 2008 20 déc. 2006 à 00:17
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és940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 17 nov. 2006 à 20:20
Ok c cool
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 17 nov. 2006 à 20:16
Tu peux aussi placer des commentaires, comme ici.
Disons qu'une source est censée être indépendante (et donc pas un bout de code)
A la limite (si t'as le temps), tu pourrais faire une petite interface, avec un bouton, une listbox pour proposer différents séparateurs afin d'accompagner ton code (et choix, soit de la modif du séparateur décimal, soit du séparateur monétaire) ;)
Ca pourrait être sympa et les membres qui en ont le besoin auront la possibilité de tester ça, avant d'intégrer le code dans leur dev)
@++
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 17 nov. 2006 à 20:03
C'est un bout de code utile, avec commentaire et moins complexe (à mon avis) pour les débutants que sur codyx.
Je n'ai déposé que des sources jusqu'à maintenant et je ne sais pas où on dépose les fameux "snippet" désolé.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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) ;)
'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
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.
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 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)...
2 nov. 2012 à 21:32
J'ai cherché depuis longtemps comment changer automatiquement le symbole de décimal ........
Bravooooooooooo et Merciiiiiiiii
20 déc. 2006 à 09:37
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
20 déc. 2006 à 08:14
20 déc. 2006 à 00:17
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
17 nov. 2006 à 20:20
17 nov. 2006 à 20:16
Ce sont les mêmes logs que Codes-Sources.
Tu peux aussi placer des commentaires, comme ici.
Disons qu'une source est censée être indépendante (et donc pas un bout de code)
A la limite (si t'as le temps), tu pourrais faire une petite interface, avec un bouton, une listbox pour proposer différents séparateurs afin d'accompagner ton code (et choix, soit de la modif du séparateur décimal, soit du séparateur monétaire) ;)
Ca pourrait être sympa et les membres qui en ont le besoin auront la possibilité de tester ça, avant d'intégrer le code dans leur dev)
@++
17 nov. 2006 à 20:03
Je n'ai déposé que des sources jusqu'à maintenant et je ne sais pas où on dépose les fameux "snippet" désolé.
17 nov. 2006 à 19:08
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
17 nov. 2006 à 13:52
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
17 nov. 2006 à 13:32
17 nov. 2006 à 13:24
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)...
17 nov. 2006 à 12:01
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é)