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
Les principaux formats proposés sont ceux de la date. Pour accéder aux autres formats, cliquer sur Paramètres supplémentaires.
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.
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.
En cliquant sur la zone de liste déroulante puis en sélectionnant Autres formats numériques vous obtiendrez le formulaire suivant :
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.
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).
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.
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).
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.InternationalApplication.International