OVH Cloud OVH Cloud

VBA et langue

3 réponses
Avatar
Stéphane Gauthier
J'ai d=E9velopp=E9 une macro sous VBA pour Excel version=20
fran=E7aise. Lorsque je la teste sous un Excel en anglais,=20
j'ai une erreur.=20
Le probl=E8me se passe sur un RANGE:
- en fran=E7ais: RANGE("A1:B1,A3:B3")
- en anglais: RANGE("A1:B1;A3:B3")

=3D=3D> le s=E9parateur est soit la virgule soit le point=20
virgule.

Comment puis-je faire pour corriger ce probl=E8me? D=E9tecter=20
la langue d'install de Excel? Dans ce cas, comment?=20
Utiliser une syntaxe sp=E9cifique?

3 réponses

Avatar
Eugenio Andruskiewitsch
Essayez de modifier le "List separator" dans les "Regionals Settings ->
Number", Il'y a un API (je ne me suviens pas lequel) pour detecter la
configuration regionale.

Eugenio

"Stéphane Gauthier" wrote in message
news:07d301c3da90$59c0cfe0$
J'ai développé une macro sous VBA pour Excel version
française. Lorsque je la teste sous un Excel en anglais,
j'ai une erreur.
Le problème se passe sur un RANGE:
- en français: RANGE("A1:B1,A3:B3")
- en anglais: RANGE("A1:B1;A3:B3")

==> le séparateur est soit la virgule soit le point
virgule.

Comment puis-je faire pour corriger ce problème? Détecter
la langue d'install de Excel? Dans ce cas, comment?
Utiliser une syntaxe spécifique?
Avatar
ng
Salut,

Comment récupérer le symbole décimal et le séparateur des milliers défini
par l'utilisateur dans le panneau de configuration ?
=> http://faq.vb.free.fr/index.php?questiong

Comment convertir une chaîne en nombre indépendamment des séparateurs
décimaux et milliers ?
=> http://faq.vb.free.fr/index.php?questionV

--
Nicolas.
http://www.ngsoft-fr.com
"Stéphane Gauthier" a écrit dans le
message de news: 07d301c3da90$59c0cfe0$
J'ai développé une macro sous VBA pour Excel version
française. Lorsque je la teste sous un Excel en anglais,
j'ai une erreur.
Le problème se passe sur un RANGE:
- en français: RANGE("A1:B1,A3:B3")
- en anglais: RANGE("A1:B1;A3:B3")

==> le séparateur est soit la virgule soit le point
virgule.

Comment puis-je faire pour corriger ce problème? Détecter
la langue d'install de Excel? Dans ce cas, comment?
Utiliser une syntaxe spécifique?
Avatar
Zoury
Bonjour à vous! :O)

Essayez de modifier le "List separator" dans les "Regionals Settings ->
Number", Il'y a un API (je ne me suviens pas lequel) pour detecter la
configuration regionale.



L'API se nomme Get/SetLocaleInfo.. Mais au lieu de modifier le setting,
j'ajusterais mon code afin de me conformé à ceux-ci... il ne faut pas
oublier que notre programme n'est pas le seul qui s'exécute sur le système..

Voici un exemple d'utilisation de GetLocaleInfo :

'***
' Module1
Option Explicit

Private Const LOCALE_USER_DEFAULT As Long = &H400

Private Enum eLocaleSettings
lsILanguage = &H1 ' language id
lsSLanguage = &H2 ' localized Name of Language
lsSAbbrevLangName = &H3 ' Abbreviated Language Name
lsSNativeLangName = &H4 ' Native Name of Language
lsICountry = &H5 ' country code
lsSCountry = &H6 ' localized Name of Country
lsSAbbrevCtryName = &H7 ' abbreviated country Name
lsSNativeCtryName = &H8 ' Native Name of Country
lsIDefaultLanguage = &H9 ' default language id
lsIDefaultCountry = &HA ' default country code
lsIDefaultCodePage = &HB ' default code page
lsSList = &HC ' List item separator
lsSDecimal = &HE ' Decimal separator
lsIMeasure = &HD ' 0 = metric, 1 = US
lsSThousand = &HF ' thousand separator
lsSGrouping = &H10 ' digit Grouping
lsIDigits = &H11 ' number of fractional digits
lsILZero = &H12 ' leading zeros for decimal
lsSNativeDigits = &H13 ' Native ascii 0-9
lsSCurrency = &H14 ' local Monetary Symbol
lsSIntlSymbol = &H15 ' Intl Monetary Symbol
lsSMonDecimalSEP = &H16 ' Monetary Decimal separator
lsSMonGrouping = &H18 ' Monetary Grouping
lsSMonThousandSep = &H17 ' Monetary thousand separator
lsICurrDigits = &H19 ' # local monetary digits
lsIIntlCurrDigits = &H1A ' # intl monetary digits
lsICurrency = &H1B ' positive currency mode
lsINegCurr = &H1C ' negative currency mode
lsSTime = &H1E ' Time separator
lsSShortDate = &H1F ' short Date format string
lsIDate = &H21 ' short date format ordering
lsILDate = &H22 ' long date format ordering
lsITime = &H23 ' time format specifier
lsICentury = &H24 ' century format specifier
lsITLZero = &H25 ' leading zeros in time field
lsIDayLZero = &H26 ' leading zeros in day field
lsIMonlZero = &H27 ' leading zeros in month field
lsS1159 = &H28 ' AM designator
lsS2359 = &H29 ' PM designator
lsSDayName1 = &H2A ' Long Name for MonDay
lsSDayName2 = &H2B ' Long Name for TuesDay
lsSDayName3 = &H2C ' Long Name for WednesDay
lsSDayName4 = &H2D ' Long Name for ThursDay
lsSDayName5 = &H2E ' Long Name for FriDay
lsSDayName6 = &H2F ' Long Name for SaturDay
lsSDayName7 = &H30 ' Long Name for SunDay
lsSAbbrevDayName1 = &H31 ' abbreviated Name for MonDay
lsSAbbrevDayName2 = &H32 ' Abbreviated Name for TuesDay
lsSAbbrevDayName3 = &H33 ' Abbreviated Name for WednesDay
lsSAbbrevDayName4 = &H34 ' Abbreviated Name for ThursDay
lsSAbbrevDayName5 = &H35 ' Abbreviated Name for FriDay
lsSAbbrevDayName6 = &H36 ' Abbreviated Name for SaturDay
lsSAbbrevDayName7 = &H37 ' Abbreviated Name for SunDay
lsSMonthName1 = &H38 ' Long Name for January
lsSMonthName2 = &H39 ' Long Name for February
lsSMonthName3 = &H3A ' Long Name for March
lsSMonthName4 = &H3B ' Long Name for April
lsSMonthName5 = &H3C ' Long Name for May
lsSMonthName6 = &H3D ' Long Name for June
lsSMonthName7 = &H3E ' Long Name for July
lsSMonthName8 = &H3F ' Long Name for August
lsSMonthName9 = &H40 ' Long Name for September
lsSMonthName10 = &H41 ' Long Name for October
lsSMonthName11 = &H42 ' Long Name for November
lsSMonthName12 = &H43 ' Long Name for December
lsSAbbrevMonthName1 = &H44 ' Abbreviated Name for January
lsSAbbrevMonthName2 = &H45 ' Abbreviated Name for February
lsSAbbrevMonthName3 = &H46 ' Abbreviated Name for March
lsSAbbrevMonthName4 = &H47 ' Abbreviated Name for April
lsSAbbrevMonthName5 = &H48 ' Abbreviated Name for May
lsSAbbrevMonthName6 = &H49 ' Abbreviated Name for June
lsSAbbrevMonthName7 = &H4A ' Abbreviated Name for July
lsSAbbrevMonthName8 = &H4B ' Abbreviated Name for August
lsSAbbrevMonthName9 = &H4C ' Abbreviated Name for September
lsSAbbrevMonthName10 = &H4D ' Abbreviated Name for October
lsSAbbrevMonthName11 = &H4E ' Abbreviated Name for November
lsSAbbrevMonthName12 = &H4F ' Abbreviated Name for December
lsSPositiveSign = &H50 ' positive Sign
lsSNegativeSign = &H51 ' negative Sign
lsIPosSignPos = &H52 ' positive sign position
lsINegSignPos = &H53 ' negative sign position
lsIPosSymPrecedes = &H54 ' mon sym precedes pos amt
lsIPosSepBySpace = &H55 ' mon sym sep by space from pos amt
lsINegSymPrecedes = &H56 ' mon sym precedes neg amt
lsINegSepBYSPACE = &H57 ' mon sym sep by space from neg amt
lsSEngLanguage = &H1001 ' English Name of Language
lsSEngCountry = &H1002 ' English Name of Country
lsSTimeFormat = &H1003 ' Time format string
lsNoUserOverride = &H80000000 ' do not use user overrides
End Enum

Private Declare Function GetLocaleInfoA _
Lib "kernel32" _
( _
ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long _
) As Long

Private Function GetLocaleInfo(ByRef ls As eLocaleSettings) As String
GetLocaleInfo = Space$(256)
GetLocaleInfo = Left$(GetLocaleInfo, GetLocaleInfoA(LOCALE_USER_DEFAULT,
ls, GetLocaleInfo, 256))
End Function

Private Sub Main()
Debug.Print GetLocaleInfo(lsSList) ' Renvoit le séparateur de liste
End Sub
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous