Déterminer la langue de l’utilisateur


Si vous créez une macro un peu plus complexe ou directement une application en Excel, il se peut que ce programme soit multilingue. Dans ce cas, vous pouvez prévoir une langue par défaut qui sera utilisé avant que l'utilisateur choisisse lui-même une langue. Mais il existe une meilleure méthode qui donnera un aspect plus professionnel à votre fichier: détecter la langue d'Excel que l'utilisateur utilise et prendre celle-ci comme langue de référence. Dans la plupart des cas, il s'agira de la langue de l'utilisateur et il ne devra même pas faire le choix – la langue correcte lui sera proposée dès le début.

Pour cela, il est nécessaire de trouver la langue dans laquelle MS Excel a été installé. Cela peut être fait grâce à la fonction suivante:

 
Application.LanguageSettings.LanguageID(msoLanguageIDUI)

Cette fonction ne retourne pas le nom de la langue mais son code numérique. Il nous faudra donc traduire ce code en un nom de la langue.

La liste complète des langues avec leur codes (cliquez pour afficher la liste)

Codes de langue en Windows

LanguePays / RégionCode LCID
AfrikaansSouth Africa1078
AlbanianAlbania1052
Alsatian1156
AmharicEthiopia1118
ArabicSaudi Arabia1025
ArabicAlgeria5121
ArabicBahrain15361
ArabicEgypt3073
ArabicIraq2049
ArabicJordan11265
ArabicKuwait13313
ArabicLebanon12289
ArabicLibya4097
ArabicMorocco6145
ArabicOman8193
ArabicQatar16385
ArabicSyria10241
ArabicTunisia7169
ArabicU.A.E.14337
ArabicYemen9217
ArmenianArmenia1067
Assamese1101
Azeri (Cyrillic)2092
Azeri (Latin)1068
Bashkir1133
Basque1069
Belarusian1059
Bengali (India)1093
Bengali (Bangladesh)2117
Bosnian (Bosnia/Herzegovina)5146
Breton1150
Bulgarian1026
Burmese1109
Catalan1027
CherokeeUnited States1116
ChinesePeople's Republic of China2052
ChineseSingapore4100
ChineseTaiwan1028
ChineseHong Kong SAR3076
ChineseMacao SAR5124
Corsican1155
Croatian1050
Croatian (Bosnia/Herzegovina)4122
Czech1029
Danish1030
Dari1164
Divehi1125
DutchNetherlands1043
DutchBelgium2067
Edo1126
EnglishUnited States1033
EnglishUnited Kingdom2057
EnglishAustralia3081
EnglishBelize10249
EnglishCanada4105
EnglishCaribbean9225
EnglishHong Kong SAR15369
EnglishIndia16393
EnglishIndonesia14345
EnglishIreland6153
EnglishJamaica8201
EnglishMalaysia17417
EnglishNew Zealand5129
EnglishPhilippines13321
EnglishSingapore18441
EnglishSouth Africa7177
EnglishTrinidad11273
EnglishZimbabwe12297
Estonian1061
Faroese1080
Farsi1065
Filipino1124
Finnish1035
FrenchFrance1036
FrenchBelgium2060
FrenchCameroon11276
FrenchCanada3084
FrenchDemocratic Rep. of Congo9228
FrenchCote d'Ivoire12300
FrenchHaiti15372
FrenchLuxembourg5132
FrenchMali13324
FrenchMonaco6156
FrenchMorocco14348
FrenchNorth Africa58380
FrenchReunion8204
FrenchSenegal10252
FrenchSwitzerland4108
FrenchWest Indies7180
FrisianNetherlands1122
FulfuldeNigeria1127
FYRO Macedonian1071
Galician1110
Georgian1079
GermanGermany1031
GermanAustria3079
GermanLiechtenstein5127
GermanLuxembourg4103
GermanSwitzerland2055
Greek1032
Greenlandic1135
GuaraniParaguay1140
Gujarati1095
HausaNigeria1128
HawaiianUnited States1141
Hebrew1037
Hindi1081
Hungarian1038
IbibioNigeria1129
Icelandic1039
IgboNigeria1136
Indonesian1057
Inuktitut1117
Irish2108
ItalianItaly1040
ItalianSwitzerland2064
Japanese1041
K'iche1158
Kannada1099
KanuriNigeria1137
Kashmiri2144
Kashmiri (Arabic)1120
Kazakh1087
Khmer1107
Kinyarwanda1159
Konkani1111
Korean1042
Kyrgyz (Cyrillic)1088
Lao1108
Latin1142
Latvian1062
Lithuanian1063
Luxembourgish1134
MalayMalaysia1086
MalayBrunei Darussalam2110
Malayalam1100
Maltese1082
Manipuri1112
MaoriNew Zealand1153
Mapudungun1146
Marathi1102
Mohawk1148
Mongolian (Cyrillic)1104
Mongolian (Mongolian)2128
Nepali1121
NepaliIndia2145
Norwegian (Bokmål)1044
Norwegian (Nynorsk)2068
Occitan1154
Oriya1096
Oromo1138
Papiamentu1145
Pashto1123
Polish1045
PortugueseBrazil1046
PortuguesePortugal2070
Punjabi1094
Punjabi (Pakistan)2118
QuechaBolivia1131
QuechaEcuador2155
QuechaPeru3179
RhaetoRomanic1047
Romanian1048
RomanianMoldava2072
Russian1049
RussianMoldava2073
Sami (Lappish)1083
Sanskrit1103
Scottish Gaelic1084
Sepedi1132
Serbian (Cyrillic)3098
Serbian (Latin)2074
SindhiIndia1113
SindhiPakistan2137
SinhaleseSri Lanka1115
Slovak1051
Slovenian1060
Somali1143
Sorbian1070
SpanishSpain (Modern Sort)3082
SpanishSpain (Traditional Sort)1034
SpanishArgentina11274
SpanishBolivia16394
SpanishChile13322
SpanishColombia9226
SpanishCosta Rica5130
SpanishDominican Republic7178
SpanishEcuador12298
SpanishEl Salvador17418
SpanishGuatemala4106
SpanishHonduras18442
SpanishLatin America22538
SpanishMexico2058
SpanishNicaragua19466
SpanishPanama6154
SpanishParaguay15370
SpanishPeru10250
SpanishPuerto Rico20490
SpanishUnited States21514
SpanishUruguay14346
SpanishVenezuela8202
Sutu1072
Swahili1089
Swedish1053
SwedishFinland2077
Syriac1114
Tajik1064
Tamazight (Arabic)1119
Tamazight (Latin)2143
Tamil1097
Tatar1092
Telugu1098
Thai1054
TibetanBhutan2129
TibetanPeople's Republic of China1105
TigrignaEritrea2163
TigrignaEthiopia1139
Tsonga1073
Tswana1074
Turkish1055
Turkmen1090
UighurChina1152
Ukrainian1058
Urdu1056
UrduIndia2080
Uzbek (Cyrillic)2115
Uzbek (Latin)1091
Venda1075
Vietnamese1066
Welsh1106
Wolof1160
Xhosa1076
Yakut1157
Yi1144
Yiddish1085
Yoruba1130
Zulu1077
HID (Human Interface Device)1279

Cette liste se base sur le site officiel de Microsoft: https://msdn.microsoft.com/en-us/goglobal/bb964664

Nous avons donc le numéro de la langue et le nom de la langue correspondant. Il ne reste plus qu'à combiner ces deux information pour en faire une fonction VBA utilisable.

Voici donc deux fonctions VBA:

  • la première indique les langues principales (anglais, français, allemand,…) et remplace les autres (roumain, tamoul,…) par la langue par défaut (dans l'exemple par l'anglais)
  • la deuxième distingue toutes les langues, même les plus exotiques. A vous de l'adapter pour qu'elle corresponde au mieux à vos besoins

Fonction simplifiée pour déterminer la langue d'utilisateur

Public Function LangueSysteme()
'par: http://excel-malin.com

On Error GoTo FunctionErreur

Dim CodeLangueSysteme As Single
'trouver le code de la langue
CodeLangueSysteme = Application.LanguageSettings.LanguageID(msoLanguageIDUI)

'associer le code à la langue (langues principales, les autres sont remplacées par l'anglais"
Select Case CodeLangueSysteme
Case 1036, 2060, 11276, 3084, 9228, 12300, 15372, 5132, 13324, 6156, 14348, 58380, 8204, 10252, 4108, 7180: LangueSysteme = "Français"
Case 1033, 2057, 3081, 10249, 4105, 9225, 15369, 16393, 14345, 6153, 8201, 17417, 5129, 13321, 18441, 7177, 11273, 12297: LangueSysteme = "Anglais"
Case 1031, 3079, 5127, 4103, 2055: LangueSysteme = "Allemand"
Case 2052, 4100, 1028, 3076, 5124: LangueSysteme = "Chinois"
Case 1043, 2067: LangueSysteme = "Néerlandais"
Case 1040, 2064: LangueSysteme = "Italien"
Case 3082, 1034, 11274, 16394, 13322, 9226, 5130, 7178, 12298, 17418, 4106, 18442, 22538, 2058, 19466, 6154, 15370, 10250, 20490, 21514, 14346, 8202: LangueSysteme = "Espagnol"
Case 1025, 5121, 15361, 3073, 2049, 11265, 13313, 12289, 4097, 6145, 8193, 16385, 10241, 7169, 14337, 9217: LangueSysteme = "Arabe"
Case Else: LangueSysteme = "Anglais"
End Select

Exit Function

FunctionErreur:
LangueSysteme = ""
End Function

 

Fonction complète pour déterminer la langue d'utilisateur

Cliquez pour visualiser le code de la fonction (elle est assez longue)
Public Function LangueSysteme()
'par: http://excel-malin.com

On Error GoTo FunctionErreur
Dim CodeLangueSysteme As Single
'trouver le code de la langue
CodeLangueSysteme = Application.LanguageSettings.LanguageID(msoLanguageIDUI)

'associer le code à la langue (liste complète)
Select Case CodeLangueSysteme
Case 1036, 2060, 11276, 3084, 9228, 12300, 15372, 5132, 13324, 6156, 14348, 58380, 8204, 10252, 4108, 7180: LangueSysteme = "Français"
Case 1033, 2057, 3081, 10249, 4105, 9225, 15369, 16393, 14345, 6153, 8201, 17417, 5129, 13321, 18441, 7177, 11273, 12297: LangueSysteme = "Anglais"
Case 1031, 3079, 5127, 4103, 2055: LangueSysteme = "Allemand"
Case 2052, 4100, 1028, 3076, 5124: LangueSysteme = "Chinois"
Case 1043, 2067: LangueSysteme = "Néerlandais"
Case 1040, 2064: LangueSysteme = "Italien"
Case 3082, 1034, 11274, 16394, 13322, 9226, 5130, 7178, 12298, 17418, 4106, 18442, 22538, 2058, 19466, 6154, 15370, 10250, 20490, 21514, 14346, 8202: LangueSysteme = "Espagnol"
Case 1025, 5121, 15361, 3073, 2049, 11265, 13313, 12289, 4097, 6145, 8193, 16385, 10241, 7169, 14337, 9217: LangueSysteme = "Arabe"
Case 1078: LangueSysteme = "Afrikaans"
Case 1052: LangueSysteme = "Albanian"
Case 1156: LangueSysteme = "Alsatian"
Case 1118: LangueSysteme = "Amharic"
Case 1067: LangueSysteme = "Armenian"
Case 1101: LangueSysteme = "Assamese"
Case 2092: LangueSysteme = "Azeri (Cyrillic)"
Case 1068: LangueSysteme = "Azeri (Latin)"
Case 1133: LangueSysteme = "Bashkir"
Case 1069: LangueSysteme = "Basque"
Case 1059: LangueSysteme = "Belarusian"
Case 1093: LangueSysteme = "Bengali (India)"
Case 2117: LangueSysteme = "Bengali (Bangladesh)"
Case 5146: LangueSysteme = "Bosnian (Bosnia/Herzegovina)"
Case 1150: LangueSysteme = "Breton"
Case 1026: LangueSysteme = "Bulgare"
Case 1109: LangueSysteme = "Burmese"
Case 1027: LangueSysteme = "Catalan"
Case 1116: LangueSysteme = "Cherokee"
Case 1155: LangueSysteme = "Corsican"
Case 1050: LangueSysteme = "Croatian"
Case 4122: LangueSysteme = "Croatian (Bosnia/Herzegovina)"
Case 1029: LangueSysteme = "Tchèque"
Case 1030: LangueSysteme = "Danois"
Case 1164: LangueSysteme = "Dari"
Case 1125: LangueSysteme = "Divehi"
Case 1126: LangueSysteme = "Edo"
Case 1061: LangueSysteme = "Estonian"
Case 1080: LangueSysteme = "Faroese"
Case 1065: LangueSysteme = "Farsi"
Case 1124: LangueSysteme = "Filipino"
Case 1035: LangueSysteme = "Finnish"
Case 1122: LangueSysteme = "Frisian"
Case 1127: LangueSysteme = "Fulfulde"
Case 1071: LangueSysteme = "FYRO Macedonian"
Case 1110: LangueSysteme = "Galician"
Case 1079: LangueSysteme = "Georgian"
Case 1032: LangueSysteme = "Greek"
Case 1135: LangueSysteme = "Greenlandic"
Case 1140: LangueSysteme = "Guarani"
Case 1095: LangueSysteme = "Gujarati"
Case 1128: LangueSysteme = "Hausa"
Case 1141: LangueSysteme = "Hawaiian"
Case 1037: LangueSysteme = "Hebrew"
Case 1081: LangueSysteme = "Hindi"
Case 1038: LangueSysteme = "Hungarian"
Case 1129: LangueSysteme = "Ibibio"
Case 1039: LangueSysteme = "Icelandic"
Case 1136: LangueSysteme = "Igbo"
Case 1057: LangueSysteme = "Indonesian"
Case 1117: LangueSysteme = "Inuktitut"
Case 2108: LangueSysteme = "Irish"
Case 1041: LangueSysteme = "Japanese"
Case 1158: LangueSysteme = "K'iche"
Case 1099: LangueSysteme = "Kannada"
Case 1137: LangueSysteme = "Kanuri"
Case 2144: LangueSysteme = "Kashmiri"
Case 1120: LangueSysteme = "Kashmiri (Arabic)"
Case 1087: LangueSysteme = "Kazakh"
Case 1107: LangueSysteme = "Khmer"
Case 1159: LangueSysteme = "Kinyarwanda"
Case 1111: LangueSysteme = "Konkani"
Case 1042: LangueSysteme = "Korean"
Case 1088: LangueSysteme = "Kyrgyz (Cyrillic)"
Case 1108: LangueSysteme = "Lao"
Case 1142: LangueSysteme = "Latin"
Case 1062: LangueSysteme = "Latvian"
Case 1063: LangueSysteme = "Lithuanian"
Case 1134: LangueSysteme = "Luxembourgish"
Case 1086, 2110: LangueSysteme = "Malay"
Case 1100: LangueSysteme = "Malayalam"
Case 1082: LangueSysteme = "Maltese"
Case 1112: LangueSysteme = "Manipuri"
Case 1153: LangueSysteme = "Maori"
Case 1146: LangueSysteme = "Mapudungun"
Case 1102: LangueSysteme = "Marathi"
Case 1148: LangueSysteme = "Mohawk"
Case 1104: LangueSysteme = "Mongolian (Cyrillic)"
Case 2128: LangueSysteme = "Mongolian (Mongolian)"
Case 1121, 2145: LangueSysteme = "Nepali"
Case 1044: LangueSysteme = "Norwegian (Bokmål)"
Case 2068: LangueSysteme = "Norwegian (Nynorsk)"
Case 1154: LangueSysteme = "Occitan"
Case 1096: LangueSysteme = "Oriya"
Case 1138: LangueSysteme = "Oromo"
Case 1145: LangueSysteme = "Papiamentu"
Case 1123: LangueSysteme = "Pashto"
Case 1045: LangueSysteme = "Polish"
Case 1046, 2070: LangueSysteme = "Portuguese"
Case 1094: LangueSysteme = "Punjabi"
Case 2118: LangueSysteme = "Punjabi (Pakistan)"
Case 1131, 2155, 3179: LangueSysteme = "Quecha"
Case 1047: LangueSysteme = "Rhaeto"
Case 1048, 2072: LangueSysteme = "Romanian"
Case 1049, 2073: LangueSysteme = "Russian"
Case 1083: LangueSysteme = "Sami (Lappish)"
Case 1103: LangueSysteme = "Sanskrit"
Case 1084: LangueSysteme = "Scottish Gaelic"
Case 1132: LangueSysteme = "Sepedi"
Case 3098: LangueSysteme = "Serbian (Cyrillic)"
Case 2074: LangueSysteme = "Serbian (Latin)"
Case 1113, 2137: LangueSysteme = "Sindhi"
Case 1115: LangueSysteme = "Sinhalese"
Case 1051: LangueSysteme = "Slovak"
Case 1060: LangueSysteme = "Slovenian"
Case 1143: LangueSysteme = "Somali"
Case 1070: LangueSysteme = "Sorbian"
Case 1072: LangueSysteme = "Sutu"
Case 1089: LangueSysteme = "Swahili"
Case 1053, 2077: LangueSysteme = "Suédois"
Case 1114: LangueSysteme = "Syriac"
Case 1064: LangueSysteme = "Tajik"
Case 1119: LangueSysteme = "Tamazight (Arabic)"
Case 2143: LangueSysteme = "Tamazight (Latin)"
Case 1097: LangueSysteme = "Tamil"
Case 1092: LangueSysteme = "Tatar"
Case 1098: LangueSysteme = "Telugu"
Case 1054: LangueSysteme = "Thai"
Case 2129, 1105: LangueSysteme = "Tibetan"
Case 2163, 1139: LangueSysteme = "Tigrigna"
Case 1073: LangueSysteme = "Tsonga"
Case 1074: LangueSysteme = "Tswana"
Case 1055: LangueSysteme = "Turkish"
Case 1090: LangueSysteme = "Turkmen"
Case 1152: LangueSysteme = "Uighur"
Case 1058: LangueSysteme = "Ukrainian"
Case 1056, 2080: LangueSysteme = "Urdu"
Case 2115: LangueSysteme = "Uzbek (Cyrillic)"
Case 1091: LangueSysteme = "Uzbek (Latin)"
Case 1075: LangueSysteme = "Venda"
Case 1066: LangueSysteme = "Vietnamese"
Case 1106: LangueSysteme = "Welsh"
Case 1160: LangueSysteme = "Wolof"
Case 1076: LangueSysteme = "Xhosa"
Case 1157: LangueSysteme = "Yakut"
Case 1144: LangueSysteme = "Yi"
Case 1085: LangueSysteme = "Yiddish"
Case 1130: LangueSysteme = "Yoruba"
Case 1077: LangueSysteme = "Zulu"
Case 1279: LangueSysteme = "HID (Human Interface Device)"

Case Else: LangueSysteme = ""
End Select
Exit Function

FunctionErreur:
LangueSysteme = ""
End Function
 

Astuce

Cette fonction peut être utilisée directement dans la feuille de votre fichier Excel (comme une "UDF – User Defined Function") ou comme une partie de votre code VBA.

Dans une Feuille, la formule à utiliser serait: =LangueSysteme()

Pour simplifier l'utilisation de cette fonction dans votre code, il peut être intéressant de remplacer les noms des langues par leur code ISO: 639-1 en deux lettres (par ex. le français = "FR")  ou le 639-2 en trois lettres (par ex. le français = "FRA").

Plus d'infos et la liste des codes: Wikipédia – Liste des codes ISO 639-1

 

20 0

Pourrait vous intéresser

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.