Developpez.com

Plus de 2 000 forums
et jusqu'à 5 000 nouveaux messages par jour

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

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. 1 commentaire Donner une note à l'article (5)

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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

Image non disponible
Interface du Panneau de configuration (Windows 7)
Image non disponible
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.

Image non disponible
Région et langue (Windows 7)
Image non disponible
Région et langue d'une version anglophone (Windows 7)
Image non disponible
Personnaliser le format (Windows 7)
Image non disponible
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 : https://support.microsoft.com/fr-fr/kb/246007

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.

Image non disponible
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
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
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
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
Les astérisques et liste de paramètres régionaux disponibles
Exemple de format dans le format régional Allemand.
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
Format de catégorie Heure
Exemple d'affichage d'une date au format Allemand(Allemagne)
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é
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 :

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

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.