Excel et les paramètres régionaux : Application.International

Jean-Philippe ANDRÉ

La gestion des particularités de chaque pays quant à la gestion des formats de date (19/01/1984, 01/19/1984,1984/01/19, 19.01.1984, etc.) ou de nombre (1234.56, 1 234.56, 1234,56) sont autant de spécificités qui empêchent les développeurs de prévoir tous les cas de figure possibles. Les valeurs des paramètres régionaux récupérés par Application.International() sont une solution particulièrement efficace en ce sens. Commentez

- Titre : Excel et les paramètres régionaux : Application.International

- Auteur : Jean-Philippe ANDRÉ

- Parution : 19 juillet 2015

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2015 Jean-Philippe ANDRÉ. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.

Sommaire

- I. Introduction

- II. Les paramètres régionaux Windows

- II-1. Accéder aux paramètres régionaux

- II-2. Différence entre paramètres Système et paramètres Utilisateurs

- III. Les paramètres régionaux sous Excel

- III-1. Les options Excel

- III-2. Les formats d'affichage

- III-2-a. Formats Date et Heure

- III-2-b. Format personnalisé

- IV. Application.International

- IV-1. Fonction générique

- IV-2. Accolades et crochets

- IV-3. Paramètres de pays/région

- IV-4. Monnaie

- IV-5. Date et Heure

- IV-5-i. Exemples VBA

- IV-6. Système de mesure

- IV-7. Séparateurs

- V. Conclusion

- VI. Remerciements

- VII. Sources

I - Introduction

Le développement d'applications sous Excel a ceci de particulier qu'il peut être défini pour un utilisateur final qui se trouve aussi bien dans le même pays que le vôtre, qu'à l'autre bout du monde. Un client qui ne parle pas la même langue, mais aussi qui n'utilise pas de la même façon que vous sa machine. Il est donc primordial de prendre en compte le fait que cet utilisateur doit pouvoir utiliser lui aussi l'application que vous lui avez développée, qu'il utilise un point (.) ou une virgule (,) pour séparer les nombres décimaux, ou que sa date de naissance s'écrive 19/01/1984 ou 1984.01.19 ! Ce court article passe en revue cette propriété de l'application Excel qu'est Application.International().

II - Les paramètres régionaux Windows

II-1 - Accéder aux paramètres régionaux

Les paramètres régionaux Windows sont accessibles en passant par le Panneau de configuration>Région et langue

Interface du Panneau de configuration (Windows 7)

Interface du Panneau de configuration (Windows 10)

Les principaux formats proposés sont ceux de la date. Pour accéder aux autres formats, cliquer sur Paramètres supplémentaires.

Région et langue (Windows 7)

Région et langue d'une version anglophone (Windows 7)

Personnaliser le format (Windows 7)

Personnaliser le format d'une version anglophone (Windows 7)

II-2 - Différence entre paramètres Système et paramètres Utilisateurs

Bien que les paramètres régionaux Système et les paramètres régionaux Utilisateur semblent parfois impossibles à distinguer, ils ont de nombreuses différences.

III - Les paramètres régionaux sous Excel

III-1 - Les options Excel

Lorsque vous lancez Excel, vous avez la possibilité d'accéder aux paramètres spécifiques Excel, dans l'onglet Fichier>Options.

Séparateurs système ou séparateurs personnalisés ?

III-2 - Les formats d'affichage

III-2-a - Formats Date et Heure

Lorsque vous utilisez Excel, vous pouvez choisir le format d'affichage des données qui vous convient. Vous pouvez accéder à ces formats dans l'onglet Accueil>Nombre.

Visuel de la zone de liste déroulante Nombre

En cliquant sur la zone de liste déroulante puis en sélectionnant Autres formats numériques vous obtiendrez le formulaire suivant :

Formulaire Format de Cellule

Les différents formats d'affichage sont répartis par catégories. Celles qui sont liées aux paramètres régionaux sont celles de Date et Heure.

Format de cellule de catégorie Date

Deux choses à constater dans cette interface. La première est la zone de liste dans laquelle des valeurs sont précédées d'un astérisque, qui permet à Excel de nous indiquer que :
- les formats Date mais aussi les formats Heure, précédés d'un astérisque (*) répondent aux changements dans les paramètres régionaux de date et d'heure qui sont spécifiés pour le système d'exploitation ;
- les formats sans astérisque ne sont pas affectés par le système d'exploitation.
On peut dès lors choisir le format des paramètres régionaux que l'on veut (et qui peut être différent du paramètre régional Windows en cours).

Les astérisques et liste de paramètres régionaux disponibles

Exemple de format dans le format régional Allemand (Allemagne)

Cette liste de choix permettra aux utilisateurs de se mettre dans la situation de leurs collègues basés outre-Rhin par exemple, et de constater à quoi ressemblera la donnée.

Format de catégorie Heure

Exemple d'affichage d'une date au format Allemand(Allemagne)

Il est à noter que lorsque vous choisissez un paramètre régional différent de celui du système, les astérisques n'apparaîtront plus, ce qui est logique.

III-2-b - Format personnalisé

En plus des formats de cellules déterminés par catégorie, l'utilisateur a la possibilité de personnaliser le format d'affichage. L'interface Format de cellule permettra notamment de déterminer quelles lettres sont utilisées par Excel pour déterminer la présentation des jours, mois et années (ci-dessous j, m et a), et qui peuvent être différentes de celles utilisées dans VBA (nous en discuterons dans le chapitre suivant).

Format de cellule personnalisé

IV - Application.International

Travailler sous différents paramètres régionaux nécessite de la part du développeur de prendre en considération toutes les subtilités liées aux spécificités de séparateurs, ordre et autres caractères que chaque région utilise au quotidien.
Pour arriver à ses fins, le développeur a en sa possession une fonction générique sous VBA : Application.International.

IV-1 - Fonction générique

Cette fonction retourne un Variant, en lecture seule, qui permet de connaître les informations sur la région/le pays, ainsi que plus généralement les paramètres internationaux.
Exemple :

Debug.Print Application.International(xlDateOrder)

On distingue plusieurs catégories de valeurs retournées selon le paramètre passé à la fonction, une constante parmi celles de XlApplicationInternational.

IV-2 - Accolades et crochets

Constante

Type de retour

Signification

Exemple

xlLeftBrace

Chaîne

Caractère utilisé à la place de l'accolade gauche ({) dans les littérales de tableaux.

{

xlLeftBracket

Chaîne

Caractère utilisé à la place du crochet gauche ([) dans les références relatives de style R1C1.

[

xlLowerCaseColumnLetter

Chaîne

Référence de colonne en minuscules.

c

xlLowerCaseRowLetter

Chaîne

Référence de ligne en minuscules.

r

xlRightBrace

Chaîne

Caractère utilisé à la place de l'accolade droite (}) dans les littérales de tableaux.

}

xlRightBracket

Chaîne

Caractère utilisé à la place du crochet gauche (]) dans les références relatives de style R1C1.

]

xlUpperCaseColumnLetter

Chaîne

Référence de colonne en majuscules.

C

xlUpperCaseRowLetter

Chaîne

Référence de ligne en majuscules (pour les références de style R1C1).

R

IV-3 - Paramètres de pays/région

Constante

Type de retour

Signification

Exemple

xlCountryCode

Chaîne

Caractère utilisé à la place de l'accolade gauche ({) dans les littérales de tableaux.

{

xlCountrySetting

Chaîne

Caractère utilisé à la place du crochet gauche ([) dans les références relatives de style R1C1.

[

xlGeneralFormatName

Chaîne

Référence de colonne en minuscules.

c

IV-4 - Monnaie

Constante

Type de retour

Signification

Exemple

xlCurrencyBefore

Booléen

True si le symbole monétaire précède la valeur,
False s'il suit la valeur.

False (50 €)

xlCurrencyCode

Chaîne

Symbole monétaire.

€ ou £

xlCurrencyDigits

Entier long

Nombre de décimales à utiliser dans les formats monétaires.

2

xlCurrencyLeadingZeros

Booléen

True si des zéros sont affichés à gauche pour des valeurs monétaires nulles.

xlCurrencyMinusSign

Booléen

True si les nombres négatifs sont indiqués par un signe moins,
False s'ils sont indiqués par des parenthèses.

True pour -1 200,
False pour (1 200)

xlCurrencyNegative

Entier long

Format monétaire pour les valeurs monétaires négatives :
0 = ( symbolex) ou (x symbole)
1 = - symbolex ou -x symbole
2 = symbole-x ou x- symbole
3 = symbolex- ou x symbole-
où symbole correspond au symbole monétaire du pays ou de la région. La position du symbole monétaire est déterminée par la variable xICurrencyBefore.

xlCurrencySpaceBefore

Booléen

True si une espace est ajoutée devant le symbole monétaire.

True pour 1200 €,
False pour 1200€

xlCurrencyTrailingZeros

Booléen

True si des zéros sont affichés à droite pour des valeurs monétaires nulles.

xlNoncurrencyDigits

Entier long

Nombre de décimales à utiliser dans les formats non monétaires.

2

IV-5 - Date et Heure

Constante

Type de retour

Signification

Exemple

xl24HourClock

Booléen

True pour le format 24 heures,
False pour le format 12 heures.

True pour 23:50:00,
False pour 11:50:00

xl4DigitYears

Booléen

True si les années comportent quatre chiffres,
False si elles comportent deux chiffres.

xlDateOrder

Entier long

Ordre des éléments de la date :
0 = mois-jour-année
1 = jour-mois-année
2 = année-mois-jour

xlDateSeparator

Chaîne

Séparateur de date (/ ).

"." pour 19.01.1984

xlDayCode

Chaîne

Symbole du jour (j).

d si version anglophone

xlDayLeadingZero

Booléen

True si un zéro est affiché à gauche dans les jours.

True si 01/01/1984,
False si 1/01/1984

xlHourCode

Chaîne

Symbole des heures (h).

xlMDY

Booléen

True si la date complète utilise l'ordre mois-jour-année,
False si elle utilise l'ordre jour-mois-année.

True pour 01/19/1984,
False pour 19/01/1984

xlMinuteCode

Chaîne

Symbole des minutes (m).

xlMonthCode

Chaîne

Symbole du mois (m).

xlMonthLeadingZero

Booléen

True si un zéro est affiché à gauche dans les mois (lorsque les mois sont affichés sous forme numérique).

True pour 19/01/1984,
False pour 19/1/1984

xlMonthNameChars

Entier long

Cette propriété renvoie toujours trois caractères pour la compatibilité amont. Les noms de mois courts sont lus à partir de Microsoft Windows et peuvent avoir n'importe quelle longueur.

3

xlSecondCode

Chaîne

Symbole des secondes (s).

xlTimeSeparator

Chaîne

Séparateur d'heure (:).

xlTimeLeadingZero

Booléen

True si un zéro est affiché à gauche dans l'heure.

True pour 08:00:00,
False pour 8:00:00

xlWeekdayNameChars

Entier long

Cette propriété renvoie toujours trois caractères pour la compatibilité amont. Les noms de jours courts sont lus à partir de Microsoft Windows et peuvent avoir n'importe quelle longueur.

3

xlYearCode

Chaîne

Symbole de l'année dans les formats numériques (a).

y pour une version anglaise ou américaine

IV-5-i - Exemples VBA

Afin de ne pas avoir de problème pour manipuler les dates dans le format de l'utilisateur, voici deux exemples pour extraire correctement une date à partir d'une chaîne de caractères, mais également de générer une date au bon format.

Function ExtraireDateDepuisTexteGlobal(strDate As String) As Date
Dim annee As Integer
Dim mois As Integer
Dim jour As Integer
Dim Tableau As Variant
'première étape, on transforme le texte en tableau avec la fonction Split
Tableau = Split(strDate, Application.International(xlDateSeparator))
Select Case Application.International(xlDateOrder)
Case 0 'MJA
annee = Tableau(2)
mois = Tableau(0)
jour = Tableau(1)
Case 1 'JMA
annee = Tableau(2)
mois = Tableau(1)
jour = Tableau(0)
Case 2 'AMJ
annee = Tableau(0)
mois = Tableau(1)
jour = Tableau(2)
End Select
ExtraireDateDepuisTexteGlobal = DateSerial(annee, mois, jour)
End Function

On peut bien évidemment faire un code dans « l'autre sens » avec un affichage au format correct à partir d'une date.

Function AfficherAuBonFormatDate(dt As Date) As String
Dim annee As Integer
Dim mois As Integer
Dim jour As Integer
annee = Year(dt)
mois = Month(dt)
jour = Day(dt)
Dim Tableau(0 To 2) As String
Select Case Application.International(xlDateOrder)
Case 0 'MJA
Tableau(2) = annee
If Application.International(xlMonthLeadingZero) Then
Tableau(0) = Format(mois, "00")
Else
Tableau(0) = mois
End If
If Application.International(xlDayLeadingZero) Then
Tableau(1) = Format(jour, "00")
Else
Tableau(1) = Format(jour, "00")
End If
Case 1 'JMA
Tableau(2) = annee
If Application.International(xlMonthLeadingZero) Then
Tableau(1) = Format(mois, "00")
Else
Tableau(1) = mois
End If
If Application.International(xlDayLeadingZero) Then
Tableau(0) = Format(jour, "00")
Else
Tableau(0) = Format(jour, "00")
End If
Case 2 'AMJ
Tableau(0) = annee
If Application.International(xlMonthLeadingZero) Then
Tableau(1) = Format(mois, "00")
Else
Tableau(1) = mois
End If
If Application.International(xlDayLeadingZero) Then
Tableau(2) = Format(jour, "00")
Else
Tableau(2) = Format(jour, "00")
End If
End Select
AfficherAuBonFormatDate = Join(Tableau, Application.International(xlDateSeparator))
End Function

IV-6 - Système de mesure

Constante

Type de retour

Signification

Exemple

xlMetric

Booléen

True pour le système métrique,
False pour le système de mesure anglais.

xlNonEnglishFunctions

Booléen

True si les fonctions ne sont pas affichées en anglais.

IV-7 - Séparateurs

Constante

Type de retour

Signification

Exemple

xlAlternateArraySeparator

Chaîne

Autre séparateur d'éléments de tableaux à utiliser si le séparateur courant est identique au séparateur décimal.

@

xlColumnSeparator

Chaîne

Caractère utilisé pour séparer les colonnes dans les littérales de tableaux.

.

xlDecimalSeparator

Chaîne

Séparateur décimal.

,

xlListSeparator

Chaîne

Séparateur de listes.

;

xlRowSeparator

Chaîne

Caractère utilisé pour séparer les lignes dans les littérales de tableaux.

;

xlThousandsSeparator

Chaîne

Zéro ou séparateur de milliers.

V - Conclusion

Windows et Excel ont chacun leurs spécifications d'affichage, et la connaissance des moyens à votre disposition pour accéder aux informations est importante pour vous permettre d'avoir la main sur les machines sur lesquelles vous serez amenés à évoluer.
Grâce au passage en revue des différentes informations fournies directement par la fonction Application.International, il vous est désormais possible de développer de façon « internationale » toutes vos applications, d'où que vous soyez, pour le plus grand bonheur de vos utilisateurs !

VI - Remerciements

Je tiens à remercier l'équipe de Developpez.com pour la qualité du site, jacques_jean pour la relecture de cet article, et tous ceux qui contribuent à l'entraide autour du développement dans le cadre personnel et professionnel.

VII - Sources

Aide en ligne Microsoft : Application.International