Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Aide sur la fonction ConvNumberLetter

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

DARRIEUX

XLDnaute Nouveau
Bonjour,
Je souhaite établir les dons et reçus fiscaux grâce fichier joint et publipostage PDF avec ou pas envoi mails
Sur le reçu il y a le montant en chiffres et je souhaite également transformer ce montant par du texte. J'ai téléchargé la fonction ConvNumberLetter. C'est bien, sauf que le mot virgule apparait dans le texte et je n'ai pas centimes pour les montants avec centimes.

Je viens vous demander de regarder le fichier Excel et me trouver la solution.

Encore Merci

Cordialement
 

Pièces jointes

re
il fallait aller cherche la FSB
le francais tout court

VB:
'*************************************
'Nombre en lettre FR 2021/2022
'monnaie euro ou virgule
'auteur: patricktoulon
'date version: 1.3 04/12/2021
'*************************************
Option Explicit

Sub testx()
    MsgBox NbtolettreFR("0.1")
End Sub

Function NbtolettreFR(chaine As String, Optional fric As String = "")
    Dim It&, TR$, diz, Ul, c, d, u, I&, Tranche, monnaie$, Ctme$, Chain$, T, X&, Ch, Et$, Entier$, Dec$, de$
    Chain = Replace(chaine, ".", ",")    'reformatage du nombre avec virgule
    If CDbl(Chain) = 0 Then NbtolettreFR = "zero" & monnaie: Exit Function
    Tranche = Array(" nonilliard", " nonillion", " octilliard", " octillion", " septilliard", " septillion", " sextilliard", " sextillion", " quintilliard", " quintillion", " quadrilliard", " quadrillion", " trilliard", " trillion", " billiard", " billion", " milliard", " million", " mille", "")
    Ul = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf")
    diz = Array("", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix", "cent")
    If Chain = "" Then NbtolettreFR = "chaine vide!": Exit Function

    T = Split(Chain, ",")    'on coupe (entier/decimal)
    monnaie = IIf(UBound(T) = 1, " virgule ", ""): Ctme = ""
    If UBound(T) = 1 Then T(1) = Left("0" & T(1) & "0", 3)
    If fric = "euro" Then fric = "fr": de = IIf(Len(Chain) > 6 And Val(Right(Chain, 6)) = 0, " d'", " "): monnaie = " euro" & IIf(T(0) > 1, "s", " "): Ctme = " centime"
    If UBound(T) = 1 Then
        If T(1) > 0 And monnaie <> " virgule " Then Ctme = Ctme & IIf(T(1) > 1, "s", "") Else Ctme = ""
        If Val(T(0)) = 0 And Ctme <> "" Then Ctme = Ctme & IIf(monnaie Like "*euro*", " d'", " ") & monnaie
        monnaie = IIf(T(1) > 0 And monnaie <> " virgule ", monnaie & " et ", monnaie)
    End If

    If Int(Val(Chain)) = 0 And monnaie <> " virgule " Then monnaie = ""
    If Int(Chain) = Chain Then Ctme = ""
    For X = 0 To UBound(T)
        If Int(Chain) = 0 And CDbl(Chain) > 0 And monnaie = " virgule " And X = 0 Then Ul(0) = "zéro" Else Ul(0) = ""
        Ch = Split(Format(T(X), "#,##0"), Chr(160))
        It = UBound(Tranche) - UBound(Ch)
        For I = 0 To UBound(Ch)
            Ch(I) = Format(Ch(I), "000")
            Select Case True: Case Ch(I) > 0: TR = Tranche(It + I) & IIf(It + I < UBound(Tranche) - 1 And Ch(I) > 1, "s", ""): Case Else: TR = "": Ch(I) = "": End Select
            c = IIf(Val(Ch(I)) < 100, "", Left(Ch(I), 1)): If c <> "" Then c = IIf(c > 1, Ul(c), Ul(0)) & IIf(c > 1, " ", "") & "cent" & IIf(Val(Ch(I)) Mod 100 = 0 And Ch(I) <> 100, "s", " ")
            d = Mid(Ch(I), 2, 1): u = Right(Ch(I), 1)
            If d Like "[1,7,9]" And u > 0 And fric = "fr" Then d = d - 1: u = u + 10:
            Et = IIf(d Like "[2,3,4,5,6,7]" And (u = 1 Or u = 11), " et ", " ")
            d = diz(Val(d)) & IIf(Val(d) = 8 And u = 0, "s", ""): u = Ul(Val(u))
            If Ch(I) = 1 And TR = " mille" Then u = ""
            Ch(I) = Replace(Application.Trim(c & d & Et & u), " ", "-") & TR
        Next
        Select Case X: Case 0: Entier = Trim(Join(Ch)): Case 1: Dec = Trim(Join(Ch)): End Select
        c = "": d = "": u = "": Et = "":
    Next
    NbtolettreFR = Application.Trim(Entier & de & monnaie & Dec & Ctme)
End Function

ou la FSB
Code:
'*************************************
'Nombre en lettre Special pays francophone
'Suisse  Belgique France
'monnaie euro , CHF(franc suisse),CFA(monnaie francais en afrique) , CFP(franc pacifique territoire francais outre mer)
'auteur: patricktoulon
'date version: 1.3 04/12/2021
'*************************************
Option Explicit

Sub testx()
    MsgBox NbToLettresFSB("0.1", "chf")
End Sub

Function NbToLettresFSB(chaine As String, Optional region As String = "")
    Dim It, TR, diz, Ul, c, d, u, dix, I&, Tranche, monnaie$, Ctme$, Chain$, T, X&, Ch, Et$, Entier$, Dec$, de, q
    Tranche = Array(" nonilliard", " nonillion", " octilliard", " octillion", " septilliard", " septillion", " sextilliard", " sextillion", " quintilliard", " quintillion", " quadrilliard", " quadrillion", " trilliard", " trillion", " billiard", " billion", " milliard", " million", " mille", "")
    Ul = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf")
    diz = Array("", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix", "cent")
    Chain = Replace(chaine, ".", ",")    'reformatage du nombre avec virgule
    'If Chain = "" Then NbToLettresFSB = "chaine vide!": Exit Function
If Chain = "" Then NbToLettresFSB = "": Exit Function

    T = Split(Chain, ",")    'on coupe (entier/decimal)
    monnaie = IIf(UBound(T) = 1, " virgule ", ""): Ctme = ""
    If UBound(T) = 1 Then T(1) = Left("0" & T(1) & "0", 3)
    region = LCase(region)
    Select Case region
    Case "be": diz(7) = "septante": diz(9) = "nonante":
    Case "se": diz(7) = "septante": diz(8) = "huitante": diz(9) = "nonante": region = "se"
    Case "euro": If region = "euro" Then region = "fr": de = IIf(Len(Chain) > 6 And Val(Right(Chain, 6)) = 0, " d'", " "): monnaie = " euro" & IIf(T(0) > 1, "s", " "): Ctme = " centime"
    Case "beuro": diz(7) = "septante": diz(9) = "nonante": region = "be": Ctme = " centime": de = IIf(Len(Chain) > 6 And Val(Right(Chain, 6)) = 0, " d'", ""): monnaie = " euro" & IIf(T(0) > 1, "s", " ")
    Case "chf": diz(7) = "septante": diz(8) = "huitante": diz(9) = "nonante": monnaie = " CHF ": region = "se": Ctme = " centime"
    Case "cfp", "cfa": de = IIf(Len(Chain) > 6 And Val(Right(Chain, 6)) = 0, " de ", ""): monnaie = " Franc" & IIf(T(0) > 1, "s ", " ") & UCase(region): region = "fr":: Ctme = " centime"
    Case Else: region = "fr"
    End Select
    If UBound(T) = 1 Then
        If T(1) > 0 And monnaie <> " virgule " Then Ctme = Ctme & IIf(T(1) > 1, "s", "") Else Ctme = ""
        If Val(T(0)) = 0 And Ctme <> "" Then Ctme = Ctme & IIf(Left(Trim(LCase(monnaie)), 1) Like "[a,e,i,o,u,y]", " d'", IIf(monnaie <> " CHF ", " de", "")) & monnaie
        monnaie = IIf(T(1) > 0 And monnaie <> " virgule ", monnaie & " et ", monnaie)
    End If

    If CDbl(Chain) = 0 Then NbToLettresFSB = "zero" & monnaie: Exit Function
    If Int(Val(Chain)) = 0 And monnaie <> " virgule " Then monnaie = ""
    If Int(Chain) = Chain Then Ctme = ""
    For X = 0 To UBound(T)
        If Int(Chain) = 0 And CDbl(Chain) > 0 And monnaie = " virgule " And X = 0 Then Ul(0) = "zéro" Else Ul(0) = ""
        Ch = Split(Format(T(X), "#,##0"), Chr(160))     '----->abandon de la rectification du formatage avec les zéros manquants
        It = UBound(Tranche) - UBound(Ch)
        For I = 0 To UBound(Ch)
            Ch(I) = Format(Ch(I), "000")    ' c'est dans chaque tranches que l'on formate a 3 chiffres
            Select Case True: Case Ch(I) > 0: TR = Tranche(It + I): Case Else: TR = "": Ch(I) = "": End Select
            If TR <> " mille" And TR <> "" And Val(Ch(I)) > 1 Then TR = TR & "s"
            c = IIf(Val(Ch(I)) < 100, "", Left(Ch(I), 1)): If c <> "" Then c = IIf(c > 1, Ul(c), Ul(0)) & IIf(c > 1, " ", "") & "cent" & IIf(Val(Ch(I)) Mod 100 = 0 And Ch(I) <> 100, "s", " ")
            d = Mid(Ch(I), 2, 1): u = Right(Ch(I), 1)
            If d Like "[7,9]" And u > 0 And region = "fr" Then d = d - 1: u = u + 10:
            If d = 1 And u > 0 Then d = d - 1: u = u + 10:
            Et = IIf(d Like "[2,3,4,5,6,7,9]" And (u = 1 Or u = 11), " et ", " "): Et = IIf(region = "se" And d = 8 And u = 1, " et ", Et)
            d = diz(Val(d)) & IIf(Val(d) = 8 And u = 0 And "befr" Like "*" & region & "*", "s", ""): u = Ul(Val(u))
            If Ch(I) = 1 And TR = " mille" Then u = ""
            Ch(I) = Replace(Application.Trim(c & d & Et & u), " ", "-") & TR
        Next
        Select Case X: Case 0: Entier = Trim(Join(Ch)): Case 1: Dec = Trim(Join(Ch)): End Select
        c = "": d = "": u = "": Et = "":
    Next
    NbToLettresFSB = Application.Trim(Entier & de & monnaie & Dec & Ctme)
End Function
 
Hi,
Juste pour le fun...
Les Francs CFP (Polynésie, Nouvelle-Calédonie, W et F, ....) ont pour symbole "XPF"
Et l'utilisation de centimes en XPF??? (je crois que les centimes n'existent pas en XPF, mais à vérifier...)
Enjoy
Bonne soirée
PS, Wiki montre bien les pièces et les billets du franc CFP, mais ne parle nullement des centimes
PS2, j'y ai pourtant vécu pendant 6 ans (4 ans en NC, 2 ans en PF), je devrais m'en souvenir.... C'est moche de vieillir... 🙂
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…