IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Internationaliser une application


Sujet :

Contribuez

  1. #1
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut Internationaliser une application
    Internationalisation d’une application.
    A completer.

    Application.International(index).
    Exemple :
    MsgBox Application.International(xlCurrencyBefore)

    : xlCurrencyBefore indique si le symbole monetaire est place avant ou apres la valeur numerique.

    : xlCurrencyDigits indique a combien de decimales doit etre arrondie la valeur monetaire.

    : xlCurrencyMinusSign indique si la langue regionale active utilise le signe ( -) ou des parentheses si la valeur est negative.

    : xlCurrencyNegative indique la position du signe (-)
    1 = le signe (–) est a l'extreme gauche independamment de $ qui peut etre a droite ou a gauche : -900.00 $
    3 = le signe (-) est a l'extreme droite independamment de $ qui peut etre a droite ou a gauche : $ 900.00-
    2 = le signe (–) est du meme cote que $ mais pres du nombre : $ -900.00
    0 = le signe (–) est remplace par des parentheses qui entourent $ et nombre: ($ 900.00)

    Exemples :

    xlCurrencyNegative = 0
    Francais Canada (1 234 567,46 $)
    Anglais Etats-Unis ($1,234,567.46)

    xlCurrencyNegative = 1
    Francais Maurice (Ile) -1 234 567 Rs
    Francais Polynesie fr -1 234 567 FCFP

    xlCurrencyNegative = 2
    Espagnol Chili $-1.234.567
    Italien Suisse CHF -1’234’567.46
    Allemand Suisse CHF -1’234’567.46
    Neerlandais Pays-Bas € -1.234.567,46

    xlCurrencyNegative = 3
    Frison occidental € 1.234.567,46-

    : xlCurrencySpaceBefore indique si on doit mettre un espace avant ou apres le symbole monetaire.

    Si VRAI, il y a un espace avant ou apres le symbole monetaire.
    Francais France -1 234 567,46 €
    Allemand Lichstenstein -CHF 1’234’567.46

    Si FAUX, il n’y a pas d'espace avant ou apres le symbole monetaire.
    Anglais Etats-Unis ($1,234,567.46)
    Chinois Hong Kong (HK$1,234,567.46)
    Kabyle Algerie -1 234 567,46DA
    Cordialement

    Docmarti.

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour Kiki.

    Merci pour le lien. Mais je n'ai pas l'intention de me baser sur Application.International pour obtenir la propriete Numberformat Monetaire des 552 langues regionales sauf pour quelques langues regionales qui causent probleme et pour lesquelles je vais peut-etre devoir recourir a Application.International(xlCurrencyDigits).
    Cordialement

    Docmarti.

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Voici une fonction pour internationaliser l'ecriture des valeurs monetaires afin que la propriete Value de la cellule soit de type "Currency" et que la propriete NumberFormat affiche le format monetaire local.

    Je l'ai testee sur les 561 langues regionales offertes sur Excel 2007.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     Sub testMonetaireInternational()
     Dim cel As Range
     Dim v As Double
     Dim result As String
     
     Set cel = Cells(2, 1)
     v = -1234567.4567
     result = EcrireFormatMonetaire(cel, v)
     End Sub
     
    Function EcrireFormatMonetaire(ByRef cel As Range, ByRef ValeurNumerique) As String
     Dim LeTypeAttendu As String
     Dim curNombre As Currency
     Dim dNombre As Double
     
    LeTypeAttendu = "Currency"
     
    'Fixer le nombre de decimales dans la valeur avec Round() ou laisser FormulaLocal fixer le nombre de decimales selon les parametres regionaux
    curNombre = ValeurNumerique  'Je choisis de laisser FormulaLocal arrondir les valeurs monetaires au nombre de decimales selon les parametres linguistiques regionaux de Windows
     
    cel.NumberFormat = "General"  'La propriete Numberformat de la cellule ne doit pas etre typee afin que Excel genere lui-meme la propriete NumberFormat monetaire.
    cel.FormulaLocal = curNombre 'On ecrit une valeur de type Currency avec FormulaLocal
     
    'Quand la valeur curNombre est de type Currency, FormulaLocal donne toujours le bon Numberformat dans la cellule
    'mais ne donne pas toujours le type Currency dans la valeur de la cellule.
     
    If TypeName(cel.Value) <> LeTypeAttendu Then
     'L'ecriture d'une valeur de type Currency a cause probleme et a ete convertie en valeur de type String. Donc il faut corriger
     
     'On ecrit une valeur de type Double parce que la valeur de type Currency cause probleme.
      dNombre = Round(curNombre, Application.International(xlCurrencyDigits))
      cel.Value = dNombre 'On ecrit une valeur de type Double. Elle sera convertie en type Currency par VBA etant donne que la propriete NumberFormat de la cellule a ete typee "Currency" par cel.FormulaLocal = curNombre
     
    End If
    If Application.International(xlCurrencyDigits) = 3 Then
     'Si on veut afficher 3 decimales au lieu de 2. (Facultatif)
     cel.NumberFormat = "#,##0.000 $;-#,##0.000 $" 'Format monetaire a 3 decimales
    End If
     
    If TypeName(cel.Value) <> "Currency" Then
     EcrireFormatMonetaire = "Erreur de type"
    End If
     
    End Function
    Cordialement

    Docmarti.

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Il faut remplacer Round par Application.WorksheetFunction.Round
    Parce que si v = 124.5
    Application.WorksheetFunction.Round(v, 0) donne 125
    alors que Round(v,0) donne 124
    Cordialement

    Docmarti.

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Voici une version modifiee du test sur les valeurs monetaires.

    Tester avec ces langues regionales.

    355 Albanais Albanie
    377 Albanais Kosovo
    389 Albanais Macedoine
    423 Allemand Lichstenstein
    41 Allemand Suisse
    213 Arabe Algerie
    966 Arabe Arabie Saoud
    973 Arabe Bahrein
    20 Arabe Egypte
    971 Arabe Emirats arabes unis
    291 Arabe Erythree
    964 Arabe Irak
    972 Arabe Israel
    962 Arabe Jordanie
    965 Arabe Koweit
    961 Arabe Liban
    218 Arabe Lybie
    212 Arabe Maroc
    222 Arabe Mauritanie
    388 Arabe Monde
    968 Arabe Oman
    974 Arabe Qatar
    252 Arabe Somalie
    249 Arabe Soudan
    211 Arabe Soudan du Sud
    963 Arabe Syrie
    235 Arabe Tchad
    216 Arabe Tunisie
    216 Arabe Yemen
    374 Armenien Armenie
    91 Assamais Inde
    34 Asturien Espagne
    1 Francais Canada
    33 Francais France
    216 Francais Tunisie
    31 Frison occidental Pays-Bas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Sub testMonetaire_International()
     Dim cel As Range
     Dim v As Double
     Dim result As String
     
     Set cel = Cells(2, 2)
     
     dern = Cells(Rows.Count, 1).End(xlUp).Row + 1
     Set cel = Cells(dern, 2)
     cel.Select
     
     v = -1234567.4567
     result = EcrireFormatMonetaire(cel, v)
     End Sub
     
    Function EcrireFormatMonetaire(ByRef cel As Range, ByRef ValeurNumerique) As String
     Dim LeTypeAttendu As String
     Dim curNombre As Currency
     Dim dNombre As Double
     
    LeTypeAttendu = "Currency"
     
    'Fixer le nombre de decimales dans la valeur avec Round() ou laisser FormulaLocal fixer le nombre de decimales selon les parametres regionaux
    curNombre = ValeurNumerique  'Je choisis de laisser FormulaLocal arrondir les valeurs monetaires au nombre de decimales selon les parametres linguistiques regionaux de Windows
     
    cel.NumberFormat = "General"  'La propriete Numberformat de la cellule ne doit pas etre typee afin que Excel genere lui-meme la propriete NumberFormat monetaire.
    cel.FormulaLocal = curNombre 'On ecrit une valeur de type Currency avec FormulaLocal
     
    'Quand la valeur curNombre est de type Currency, FormulaLocal donne toujours le bon Numberformat dans la cellule
    'mais ne donne pas toujours le type Currency dans la valeur de la cellule.
     
    If TypeName(cel.Value) <> LeTypeAttendu Then
     'L'ecriture d'une valeur de type Currency a cause probleme et a ete convertie en valeur de type String. Donc il faut corriger
     
     erreur = TypeName(cel.Value)
     'On ecrit une valeur de type Double parce que la valeur de type Currency cause probleme.
      dNombre = Application.WorksheetFunction.Round(curNombre, Application.International(xlCurrencyDigits))
      cel.Value = dNombre 'On ecrit une valeur de type Double. Elle sera convertie en type Currency par VBA etant donne que la propriete NumberFormat de la cellule a ete typee "Currency" par cel.FormulaLocal = curNombre
     
    End If
    If Application.International(xlCurrencyDigits) = 3 Then
     '(Facultatif) Si on veut afficher 3 decimales au lieu de 2.
      cel.NumberFormat = "#,##0.000 $;-#,##0.000 $" 'Format monetaire a 3 decimales
    End If
     
    If TypeName(cel.Value) <> "Currency" Then
     EcrireFormatMonetaire = "Erreur de type"
    End If
     
     Columns(cel.Column).AutoFit
     cel.Offset(, 1) = "'" & cel.Text
     cel.Offset(, 2) = "'" & cel.NumberFormat
     cel.Offset(, 3) = erreur & " - " & EcrireFormatMonetaire
     cel.Offset(, -1).NumberFormat = ""
     cel.Offset(, -1) = Application.International(xlCountrySetting)
     
     Columns("A:D").AutoFit
    End Function
    Cordialement

    Docmarti.

  7. #7
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Dans les posts precedents, j'utilise, pour ecrire les valeurs monetaires locales, le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cel.NumberFormat = "General" 'ou cel.NumberFormat = "". C'est la meme chose.
    cel.FormulaLocal = curNombre 'curNombre etant une valeur de type Currency
    Quand j'utilise ce code 560 fois de suite en changeant a chaque fois de langue regionale, VBA envoie dans la cellule une valeur de type Currency et change la propriete Numberformat afin que la cellule affiche le format monetaire de la langue regionale telle que definie dans les parametres regionaux de Windows.

    Ces parametres definissent quel est le symbole monetaire regional, la place de ce symbole monetaire ( a droite ou a gauche de la valeur numerique ), le nombre de decimales que doit contenir la valeur numerique, s'il faut un espace entre la valeur numerique et le symbole monetaire, si une valeur numerique negative est indiquee par le signe negatif (-) ou par des parentheses et finalement la place du signe negatif.

    Tous ces parametres vont generer eventuellement quelques centaines de proprietes Numberformat differentes. Mais pas immediatement. Car si on regarde les 560 proprietes Numberformat generees, on constate qu'on retrouve seulement 3 proprietes Numberformat differentes:

    $#,##0_);($#,##0)

    $#,##0.00_);($#,##0.00)

    #,##0.000 $;-#,##0.000 $

    La premiere quand la valeur monetaire ne doit contenir aucune decimale.
    Bambara latin Mali -CFA1,234,567

    La seconde quand la valeur monetaire ne doit contenir que 2 decimales.
    Gallois Royaume-Uni -£1,234,567.46

    Et la troisieme quand la valeur monetaire doit contenir 3 decimales.
    Francais Tunisie -1 234 567,457 DT


    Donc ces 3 proprietes Numberformat permettent a Excel d'afficher les valeurs monetaires des 560 langues regionales.
    Cordialement

    Docmarti.

  8. #8
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Pour obtenir les 560 valeurs monetaires regionales, j'ai utilise FormulaLocal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cel.FormulaLocal = curNombre 'curNombre etant une valeur de type Currency
    Pourrais-je utiliser Value au lieu de FormulaLocal?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cel.Value = curNombre
    J'ai teste Value sur les 560 langues regionales et le resultat est concluant :
    Value arrondit toujours les valeurs de type Currency a 2 decimales. Jamais a 0 decimale ou a 3 decimales.
    Avec Value, la propriete Numberformat est toujours la meme : $#,##0.00_);($#,##0.00)

    Cela pose un probleme avec les 122 langues regionales qui exigent 0 decimale dans leur valeur monetaire et avec les 7 langues regionales qui en exigent 3.

    Il semble bien que Value ne prenne pas en compte les parametres linguistiques regionaux de Windows contrairement a FormulaLocal qui, lui, en tient compte.

    Se pourrait-il que Value soit americain et que FormulaLocal soit international?
    Cordialement

    Docmarti.

  9. #9
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Le post #6 montre comment afficher les valeurs monetaires des 560 langues regionales.

    Pour afficher les valeurs comptables ( comptabilite ) des 560 langues regionales, on remplace dans le code du post #6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Application.International(xlCurrencyDigits) = 3 Then
      cel.NumberFormat = "#,##0.000 $;-#,##0.000 $" 'Format monetaire a 3 decimales
    End If
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    If Application.International(xlCurrencyDigits) = 3 Then
     
     cel.NumberFormat = "_-* #,##0.000 $_-;-* #,##0.000 $_-;_-* ""-""??? $_-;_-@_-"
    ElseIf Application.International(xlCurrencyDigits) = 2 Then
     
     cel.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
    Else
     
     cel.NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)"
    End If
    Cordialement

    Docmarti.

  10. #10
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Voici un demo d'une technique qui permet l'internationalisation des ecritures sur une feuille Excel, en eliminant toute ecriture de valeurs de type Date ainsi que de type Currency, qui sont converties, avant l'ecriture, en valeurs de type Double qui n'est pas susceptible de causer de probleme lors de l'ecriture.
    Pour permettre l'internationalisation d'une application, ce demo utilise uniquement, pour les dates, heures, valeurs monetaires et comptables, les formats de nombre suivants qui sont les formats qu'utilise Excel pour les 560 langues regionales:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
          ' "Short Date" '12/01/2017
            cel.NumberFormat = "m/d/yyyy"
     
          ' "Long Date" 'vendredi 10 août 2018
            cel.NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
     
          ' "Date Heure"  '12/01/2017 23:05:06
            cel.NumberFormat = "m/d/yyyy h:mm"
     
           ' "Heure"  ' 23:05:06
            cel.NumberFormat = "[$-F400]h:mm:ss AM/PM"
     
          ' "Monetaire"
            cel.NumberFormat = "$#,##0.00_);($#,##0.00)" 
     
            cel.NumberFormat = "$#,##0_);($#,##0)"
     
     
          ' "Comptabilite"
            cel.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)" 
     
            cel.NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
    Sub Demo()
        Dim Valeur As Variant
        Dim cel As Range
        Dim TypeNumerique As Long
        Dim strErreurs As String
        Dim annee As Long, mois As Long, jour As Long
        Dim hh As Long, mm As Long, ss As Long, hms As String
        Dim lngDerniere As Long
     
        lngDerniere = Cells(Rows.Count, 2).End(xlUp).Row + 1
     
        TypeNumerique = 1 '"Date courte" '12/01/2017
        Set cel = Cells(lngDerniere, 3)
        annee = 2017:  mois = 1:  jour = 12
        Valeur = DateSerial(annee, mois, jour)
        strErreurs = EcrireTypeDouble(TypeNumerique, cel, Valeur)
     
        TypeNumerique = 2 '"Date longue" 'vendredi 10 août 2018
        Set cel = cel.Offset(, 5)
        annee = 2017:  mois = 1:  jour = 12
        Valeur = DateSerial(annee, mois, jour)
        strErreurs = EcrireTypeDouble(TypeNumerique, cel, Valeur)
     
        TypeNumerique = 3 '"Date Heure" '12/01/2017 23:05:06
        Set cel = cel.Offset(, 5)
        hh = 23:  mm = 5:  ss = 6
        annee = 2017:  mois = 1:  jour = 12
        Valeur = TimeSerial(hh, mm, ss) + DateSerial(annee, mois, jour)
        strErreurs = EcrireTypeDouble(TypeNumerique, cel, Valeur)
     
        TypeNumerique = 4 '"Heure" '23:05:06
        Set cel = cel.Offset(, 5)
        hh = 23:  mm = 5:  ss = 6:
        Valeur = TimeSerial(hh, mm, ss)
        strErreurs = EcrireTypeDouble(TypeNumerique, cel, Valeur)
     
        TypeNumerique = 5 '"Monetaire"
        Set cel = cel.Offset(, 5)
        Valeur = -1234567.4567
        strErreurs = EcrireTypeDouble(TypeNumerique, cel, Valeur)
     
        TypeNumerique = 6 '"Comptabilite"
        Set cel = cel.Offset(, 5)
        Valeur = -1234567.4567
        strErreurs = EcrireTypeDouble(TypeNumerique, cel, Valeur)
     
        TypeNumerique = 7 '"Pourcentage"
        Set cel = cel.Offset(, 5)
        Valeur = 1 / 3
        strErreurs = EcrireTypeDouble(TypeNumerique, cel, Valeur)
     
    End Sub
     
    Function EcrireTypeDouble(ByVal TypeNumerique As Long, ByVal cel As Range, ByVal Valeur) As String
        Dim Titre
        Dim ValeurAttendue As Variant
        Dim LeTypeAttendu
        Dim dblNombre As Double
        Dim FormatDeNombre As String
     
        Cells(cel.Row, ActiveCell.Column).Select
        dblNombre = Valeur
     
        Select Case TypeNumerique
     
            Case 1: Titre = "Short Date" '12/01/2017
            FormatDeNombre = "m/d/yyyy"
            cel.NumberFormat = FormatDeNombre 'Typer la cellule avant d'y ecrire une valeur de type Double qui sera convertie
            cel.FormulaLocal = CDbl(Valeur) 'Ou bien cel.Value =
            LeTypeAttendu = "Date"
     
            Case 2: Titre = "Long Date" 'vendredi 10 août 2018
            FormatDeNombre = "[$-F800]dddd, mmmm dd, yyyy"
            cel.NumberFormat = FormatDeNombre  'Typer la cellule avant d'y ecrire une valeur de type Double qui sera convertie
            cel.FormulaLocal = CDbl(Valeur) 'Ou bien cel.Value =
            LeTypeAttendu = "Date"
     
            Case 3: Titre = "Date Heure"  '12/01/2017 23:05:06
            FormatDeNombre = "m/d/yyyy h:mm"
            cel.NumberFormat = FormatDeNombre 'Typer la cellule avant d'y ecrire une valeur de type Double qui sera convertie
            cel.FormulaLocal = CDbl(Valeur) 'Ou bien cel.Value =
            LeTypeAttendu = "Date"
     
            Case 4: Titre = "Heure"  ' 23:05:06
            FormatDeNombre = "[$-F400]h:mm:ss AM/PM"
            cel.NumberFormat = FormatDeNombre
            cel.FormulaLocal = CDbl(Valeur) 'Ou bien cel.Value =
            LeTypeAttendu = "Double"
     
            Case 5: Titre = "Monetaire"
            If Application.International(xlCurrencyDigits) > 0 Then
                cel.NumberFormat = "$#,##0.00_);($#,##0.00)" 'Typer la cellule avant d'y ecrire une valeur de type Double qui sera convertie
            Else
                cel.NumberFormat = "$#,##0_);($#,##0)"
            End If
            dblNombre = Application.WorksheetFunction.Round(Valeur, Application.International(xlCurrencyDigits))
            cel.FormulaLocal = CDbl(dblNombre) 'Ou bien cel.Value =
            LeTypeAttendu = "Currency"
     
            Case 6: Titre = "Comptabilite"
            If Application.International(xlCurrencyDigits) > 0 Then
                cel.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)" 'Typer la cellule avant d'y ecrire une valeur de type Double qui sera convertie
            Else
                cel.NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)"
            End If
            dblNombre = Application.WorksheetFunction.Round(Valeur, Application.International(xlCurrencyDigits))
            cel.FormulaLocal = CDbl(dblNombre) 'Ou bien cel.Value =
            LeTypeAttendu = "Currency"
     
            Case 7: Titre = "Pourcentage"
            FormatDeNombre = "0.00%"
            cel.NumberFormat = FormatDeNombre
            cel.FormulaLocal = CDbl(Valeur) 'Ou bien cel.Value =
            LeTypeAttendu = "Double"
     
            Case Else
            MsgBox "Type numerique inconnu."
            Exit Function
     
        End Select
     
        Cells(1, cel.Column + 1) = Titre
     
        If TypeName(cel.Value) <> LeTypeAttendu Then MsgBox "Erreur"
     
        If Math.Abs(cel - dblNombre) <> 0 Then MsgBox "Erreur"
     
        If InStr(cel.Value, "#") Then MsgBox "Erreur"
     
        Call DescriptionCellule(cel, "")
     
    End Function
     
     
    Function DescriptionCellule(cel As Range, erreur)
     
        cel.Parent.Columns(cel.Column).AutoFit
     
        cel.Offset(, 1) = "'" & cel.Text
        cel.Offset(, 2) = "'" & cel.NumberFormat
        cel.Offset(, 3) = erreur
        cel.Offset(, -1).NumberFormat = ""
        cel.Offset(, -1) = Application.International(xlCountrySetting)
     
        cel.Parent.Range(Cells(1, cel.Offset(, -1).Column), cel.Offset(, 3)).Columns.AutoFit
     
    End Function
    Cordialement

    Docmarti.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/06/2013, 17h59
  2. Internationaliser une application
    Par RT222 dans le forum ALM
    Réponses: 1
    Dernier message: 25/11/2011, 10h53
  3. Internationaliser une application
    Par miron dans le forum C
    Réponses: 9
    Dernier message: 15/03/2007, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo