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

Macros et VBA Excel Discussion :

nombres en lettres [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 10
    Par défaut nombres en lettres
    bonjour, je m'occupe d'une association et je dois envoyer les reçus fiscaux aux adhérents. Sur ces reçus doit figurer le montant de la cotisation en toutes lettres mais je n'arrive pas à trouver comment faire (j'avais trouvé une macro mais impossible de l'appliquer à l'ensemble du tableau)

    merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut convertisseur
    Bonjour tkitoa, et Bonjour le Forum

    En préambule, je tenais à exprimer tous mes voeux aux membres de ce forum qui nous aident à progresser.
    Je tenais particulièrement à saluer ceux qui m'ont apporté leurs lumières, et ce avec amabilité et compréhension (...)

    Pour ta conversion tkitoa, voici une fonction prise sur le net (pas mal de sujets traités mais celui-ci me semble assez complet)

    Pour l'appliquer à ton cas

    Ecrire dans ta feuille Excel

    =ConvNumberLetter(ta référence de cellule;1)

    Voici la fonction :

    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
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    Option Explicit
     
     
    '***********
    ' Devise=0   aucune
    '       =1   Euro €
    '       =2   Dollar $
    ' Langue=0   Français
    '       =1   Belgique
    '       =2   Suisse
    '***********
    ' Conversion limitée à 999 999 999 999 999 ou 9 999 999 999 999,99
    ' si le nombre contient plus de 2 décimales, il est arrondit à 2 décimales
     
     
    Public Function ConvNumberLetter(Nombre As Double, Optional Devise As Byte = 0, _
                                        Optional Langue As Byte = 0) As String
     
        Dim dblEnt As Variant, byDec As Byte
        Dim bNegatif As Boolean
        Dim strDev As String, strCentimes As String
     
        If Nombre < 0 Then
            bNegatif = True
            Nombre = Abs(Nombre)
        End If
        dblEnt = Int(Nombre)
        byDec = CInt((Nombre - dblEnt) * 100)
        If byDec = 0 Then
            If dblEnt > 999999999999999# Then
                ConvNumberLetter = "#TropGrand"
                Exit Function
            End If
        Else
            If dblEnt > 9999999999999.99 Then
                ConvNumberLetter = "#TropGrand"
                Exit Function
            End If
        End If
        Select Case Devise
            Case 0
                If byDec > 0 Then strDev = " virgule "
            Case 1
                strDev = " Euro"
                If dblEnt >= 1000000 And Right$(dblEnt, 6) = "000000" Then strDev = " d'Euro"
                If byDec > 0 Then strCentimes = strCentimes & " Cent"
                If byDec > 1 Then strCentimes = strCentimes & "s"
            Case 2
                strDev = " Dollar"
                If byDec > 0 Then strCentimes = strCentimes & " Cent"
        End Select
        If dblEnt > 1 And Devise <> 0 Then strDev = strDev & "s"
        strDev = strDev & " "
        If dblEnt = 0 Then
            ConvNumberLetter = "zéro " & strDev
        Else
            ConvNumberLetter = ConvNumEnt(CDbl(dblEnt), Langue) & strDev
        End If
        If byDec = 0 Then
            If Devise <> 0 Then ConvNumberLetter = ConvNumberLetter & "zéro Cent"
        Else
            If Devise = 0 Then
                ConvNumberLetter = ConvNumberLetter & _
                    ConvNumDizaine(byDec, Langue, True) & strCentimes
            Else
                ConvNumberLetter = ConvNumberLetter & _
                    ConvNumDizaine(byDec, Langue, False) & strCentimes
            End If
        End If
        ConvNumberLetter = Replace(ConvNumberLetter, "  ", " ")
        If Left(ConvNumberLetter, 1) = " " Then ConvNumberLetter = _
            Right$(ConvNumberLetter, Len(ConvNumberLetter) - 1)
        If Right$(ConvNumberLetter, 1) = " " Then ConvNumberLetter = _
            Left(ConvNumberLetter, Len(ConvNumberLetter) - 1)
    End Function
     
    Private Function ConvNumEnt(Nombre As Double, Langue As Byte)
     
        Dim iTmp As Variant, dblReste As Double
        Dim strTmp As String
        Dim iCent As Integer, iMille As Integer, iMillion As Integer
        Dim iMilliard As Integer, iBillion As Integer
     
        iTmp = Nombre - (Int(Nombre / 1000) * 1000)
        iCent = CInt(iTmp)
        ConvNumEnt = Nz(ConvNumCent(iCent, Langue))
        dblReste = Int(Nombre / 1000)
        If iTmp = 0 And dblReste = 0 Then Exit Function
        iTmp = dblReste - (Int(dblReste / 1000) * 1000)
        If iTmp = 0 And dblReste = 0 Then Exit Function
        iMille = CInt(iTmp)
        strTmp = ConvNumCent(iMille, Langue)
        Select Case iTmp
            Case 0
            Case 1
                strTmp = " mille "
            Case Else
                strTmp = strTmp & " mille "
        End Select
        If iMille = 0 And iCent > 0 Then ConvNumEnt = "et " & ConvNumEnt
        ConvNumEnt = Nz(strTmp) & ConvNumEnt
        dblReste = Int(dblReste / 1000)
        iTmp = dblReste - (Int(dblReste / 1000) * 1000)
        If iTmp = 0 And dblReste = 0 Then Exit Function
        iMillion = CInt(iTmp)
        strTmp = ConvNumCent(iMillion, Langue)
        Select Case iTmp
            Case 0
            Case 1
                strTmp = strTmp & " million "
            Case Else
                strTmp = strTmp & " millions "
        End Select
        If iMille = 1 Then ConvNumEnt = "et " & ConvNumEnt
        ConvNumEnt = Nz(strTmp) & ConvNumEnt
        dblReste = Int(dblReste / 1000)
        iTmp = dblReste - (Int(dblReste / 1000) * 1000)
        If iTmp = 0 And dblReste = 0 Then Exit Function
        iMilliard = CInt(iTmp)
        strTmp = ConvNumCent(iMilliard, Langue)
        Select Case iTmp
            Case 0
            Case 1
                strTmp = strTmp & " milliard "
            Case Else
                strTmp = strTmp & " milliards "
        End Select
        If iMillion = 1 Then ConvNumEnt = "et " & ConvNumEnt
        ConvNumEnt = Nz(strTmp) & ConvNumEnt
        dblReste = Int(dblReste / 1000)
        iTmp = dblReste - (Int(dblReste / 1000) * 1000)
        If iTmp = 0 And dblReste = 0 Then Exit Function
        iBillion = CInt(iTmp)
        strTmp = ConvNumCent(iBillion, Langue)
        Select Case iTmp
            Case 0
            Case 1
                strTmp = strTmp & " billion "
            Case Else
                strTmp = strTmp & " billions "
        End Select
        If iMilliard = 1 Then ConvNumEnt = "et " & ConvNumEnt
        ConvNumEnt = Nz(strTmp) & ConvNumEnt
    End Function
     
    Private Function ConvNumDizaine(Nombre As Byte, Langue As Byte, bDec As Boolean) As String
        Dim TabUnit As Variant, TabDiz As Variant
        Dim byUnit As Byte, byDiz As Byte
        Dim strLiaison As String
     
        If bDec Then
            TabDiz = Array("zéro", "", "vingt", "trente", "quarante", "cinquante", _
                "soixante", "soixante", "quatre-vingt", "quatre-vingt")
        Else
            TabDiz = Array("", "", "vingt", "trente", "quarante", "cinquante", _
                "soixante", "soixante", "quatre-vingt", "quatre-vingt")
        End If
        If Nombre = 0 Then
            TabUnit = Array("zéro")
        Else
            TabUnit = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _
                "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", _
                "seize", "dix-sept", "dix-huit", "dix-neuf")
        End If
        If Langue = 1 Then
            TabDiz(7) = "septante"
            TabDiz(9) = "nonante"
        ElseIf Langue = 2 Then
            TabDiz(7) = "septante"
            TabDiz(8) = "huitante"
            TabDiz(9) = "nonante"
        End If
        byDiz = Int(Nombre / 10)
        byUnit = Nombre - (byDiz * 10)
        strLiaison = "-"
        If byUnit = 1 Then strLiaison = " et "
        Select Case byDiz
            Case 0
                strLiaison = " "
            Case 1
                byUnit = byUnit + 10
                strLiaison = ""
            Case 7
                If Langue = 0 Then byUnit = byUnit + 10
            Case 8
                If Langue <> 2 Then strLiaison = "-"
            Case 9
                If Langue = 0 Then
                    byUnit = byUnit + 10
                    strLiaison = "-"
                End If
        End Select
        ConvNumDizaine = TabDiz(byDiz)
        If byDiz = 8 And Langue <> 2 And byUnit = 0 Then ConvNumDizaine = ConvNumDizaine & "s"
        If TabUnit(byUnit) <> "" Then
            ConvNumDizaine = ConvNumDizaine & strLiaison & TabUnit(byUnit)
        Else
            ConvNumDizaine = ConvNumDizaine
        End If
    End Function
     
    Private Function ConvNumCent(Nombre As Integer, Langue As Byte) As String
        Dim TabUnit As Variant
        Dim byCent As Byte, byReste As Byte
        Dim strReste As String
     
        TabUnit = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _
            "huit", "neuf", "dix")
        byCent = Int(Nombre / 100)
        byReste = Nombre - (byCent * 100)
        strReste = ConvNumDizaine(byReste, Langue, False)
        Select Case byCent
            Case 0
                ConvNumCent = strReste
            Case 1
                If byReste = 0 Then
                    ConvNumCent = "cent"
                Else
                    ConvNumCent = "cent " & strReste
                End If
            Case Else
                If byReste = 0 Then
                    ConvNumCent = TabUnit(byCent) & " cents"
                Else
                    ConvNumCent = TabUnit(byCent) & " cent " & strReste
                End If
        End Select
    End Function
     
    Private Function Nz(strNb As String) As String
        If strNb <> " zéro" Then Nz = strNb
    End Function
    En espérant que ce développement te sera utile.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour tkitoa,

    bienvenue sur DVP

    as-tu pu utiliser le code propose dans les ressources a ta disposition ?
    notamment
    http://access.developpez.com/sources...ffresEnLettres

    tu dis que tu souhaites l'appliquer a un tableau, comment t'y es tu pris ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 10
    Par défaut
    tout d'abord merci pour vos réponses
    malheureusement je crois que je ne suis pas assez callé pour appliquer vos conseils

    j'ai un tableau avec des colonnes : nom-montant cotisation-date paiement-etc . . . .

    je voudrais faire apparaitre ce montant en lettres dans une autre colonne

    ou bien :
    j'édite ensuite des reçus par publipostage et dans une case ce montant doit apparaitre en lettres
    C'est peut-être là que je peux intervenir pour cettre transformation mais je ne sais pas faire

    j'espère être assez clair dans mes explications merci encore

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut convertisseur
    tkitoa,

    Pour ce qui me concerne, tu peux
    - recopier le développement dans un module de ton VBE
    - écrire ta formule dans la colonne concernée pour ta 1ère cellule
    - recopier cette formule dans l'ensemble de ta colonne

    Tout d'abord, après avoir effectué ta recopie du développement, essaie sur une cellule quelconque de ta feuille

    Ex : en A2 35,60
    en A3 =ConvNumberLetter(A2;1)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 10
    Par défaut
    je pense en effet que mes connaissances sont trop faibles pour m'atterler à cette tâche
    je vais devoir étudier une autre solution

    je vous remercie d'avoir essayé de m'aider

    Tki

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Pas d'accord.

    Décris où cela peine.
    On prendra le temps nécessaire pour expliciter les étapes à suivre.

    As-tu suivi la démarche indiquée ?

    Dans l'attente de ta réponse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction de conversion de nombre en lettres
    Par david_chardonnet dans le forum Langage
    Réponses: 21
    Dernier message: 08/12/2021, 17h51
  2. [VB6 Debutant] separer les nombres et lettre !!
    Par maximus001ma dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/05/2006, 18h27
  3. Réponses: 5
    Dernier message: 10/02/2006, 10h02
  4. écrire un nombre en lettre
    Par dibak dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 19/05/2004, 11h27
  5. Comment compter le nombre de lettre identique ?
    Par divableue dans le forum ASP
    Réponses: 3
    Dernier message: 07/11/2003, 15h01

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