comment ajouter le mot ET a la fonction NBLETTRE ?

madou2003

XLDnaute Nouveau
ma question est :

90,50 euro ça donne: Quatre-Vingt-Dix Euros Cinquante Centimes

alors que ce que je veux obtenir est ça: Quatre-Vingt-Dix Euros ET Cinquante Centimes.

en PJ le code source de la formule.

Merci pour votre aide.
 

Pièces jointes

  • nblettre.txt
    9.1 KB · Affichages: 424
Dernière édition:

R@chid

XLDnaute Barbatruc
Re : comment ajouter le mot ET a la fonction NBLETTRE ?

Bonjour @ tous,
sans voir le code de la fonction, il sera difficile d'indiquer avec précision la partie de code à modifier
C'est une fonction de la macro complémentaire "Morefunc" peut etre je me rappelle pas bien si NBTEXTE ou NBLETTRE
Amicalement
 

Modeste geedee

XLDnaute Barbatruc
Re : comment ajouter le mot ET a la fonction NBLETTRE ?

Bonsour®
s'il s'agit de Morefunc, j'ai bien peur que le code ne soit pas accessible.. :(

sinon concernant : http://gerard.g.pagesperso-orange.fr/logiciels/Excel/numleter/NbLettre.xla

la modification peut etre faite ici :

ConvNumberLetter = ConvNumEnt(CDbl(dblEnt), Langue) & strDev & " et " & _
ConvNumDizaine(byDec, Langue) & strCentimes



NB: Misange est me semble-t-il dépositaire emphytéotique du regretté site Xcell05.free.fr du non moins regretté ??? Laurent Longre
initiateur du plus regretté MPFE...
peut-etre a-t'elle accès aux sources de MoreFunc ?
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : comment ajouter le mot ET a la fonction NBLETTRE ?

Re,

avec ceci:

=SI(A1<>ENT(A1);NBLETTRE(ENT(A1)) & "ET " & NBLETTRE(MOD(A1;1));NBLETTRE(A1))

mais ça manque cruellement de souplesse et ne résoudra pas la redondance "ZERO EURO"

il vaudrait mieux agir directement sur le code pour simplifier et utiliser uniquement

NBLETTRE(A1)

à+
Philippe

Edit: voici une code qui fonctionne (mais remis à la sauce Belge )
Code:
Function ChLettres(nombre As Double) As String
  Dim TRANCHE(1 To 4)
    Dim ECH As Variant
    Dim UNI As Variant
    Dim DN As Variant
    Dim DIZ As Variant
 
    Dim N3 As Integer
 
    If nombre >= 1000000000000# Then
        ChLettres = " !!! Nombre trop grand !!!"
        Exit Function
    End If
 

    ECH = Array("", "milliard", "million", "mille")
    UNI = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf")
    DN = Array("", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf")
    DIZ = Array("", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "septante", "quatre-vingt", "nonante")



'   Partie entière

    If Int(nombre) = 0 Then
        FIN = True
        ChLettres = " zéro"
    Else
        FIN = False
        reste = nombre
        N = Format(Int(nombre), "000000000000")
        J = 1
        For i = 0 To 3
            TRANCHE(J) = Mid(N, (i * 3) + 1, 3)
            J = J + 1
        Next i
        T = 1
    End If
    While T <= 4 And FIN = False
        If TRANCHE(T) > 0 Then
            c = Val(Mid(TRANCHE(T), 1, 1))
            D = Val(Mid(TRANCHE(T), 2, 1))
            U = Val(Mid(TRANCHE(T), 3, 1))
            '
            ' Traitement des centaines
            '
            Select Case c
            Case 1
                ChLettres = ChLettres & " " & "cent"
            Case Is > 1
                ChLettres = ChLettres & " " & UNI(c) & " cent"
                If (D * 10) + U = 0 And T = 4 Then
                    ChLettres = ChLettres & "s"
                    FIN = True
 
                Else
                    If (D * 10) + U = 0 And (T = 1 Or T = 2) Then ChLettres = ChLettres & "s"
 
                End If
            End Select
            '
            ' Traitement des dizaines et unités
            '
            If FIN = False Then
                Select Case D
                Case 0
                    Select Case U
                    Case 1
                        If T = 3 Then
                            If c <> 0 Then
                                ChLettres = ChLettres & " " & UNI(U)
                            End If
                        Else
                            ChLettres = ChLettres & " " & UNI(U)
                        End If
                    Case Is > 1
                        ChLettres = ChLettres & " " & UNI(U)
                    End Select
                Case 1
                    ChLettres = ChLettres & " " & DN(U + 1)
                Case 2 To 6
                    ChLettres = ChLettres & " " & DIZ(D)
                    Select Case U
                    Case 1
                        ChLettres = ChLettres & " et " & UNI(U)
                    Case Is > 1
                        ChLettres = ChLettres & "-" & UNI(U)
                    End Select
                 Case 7, 9
                    ChLettres = ChLettres & " " & DIZ(D)
                    If Pays = "F" Then
                      Select Case D * 10 + U
                      Case 71
                        ChLettres = ChLettres & " et " & DN(U + 1)
                      Case Else
                        ChLettres = ChLettres & "-" & DN(U + 1)
                      End Select
                    Else
                      Select Case U
                      Case 1
                        ChLettres = ChLettres & " et " & UNI(U)
                      Case Is > 1
                        ChLettres = ChLettres & "-" & UNI(U)
                      End Select
                   End If
                 Case Else
                    ChLettres = ChLettres & " " & DIZ(D)
                    Select Case U
                    Case 0
                        If T = 4 Then
                            ChLettres = ChLettres & "s"
                            FIN = True
 
                        Else
                            If T = 1 Or T = 2 Then ChLettres = ChLettres & "s"
   
                        End If
                    Case Else
                        ChLettres = ChLettres & "-" & UNI(U)
                    End Select
                End Select
            End If
  
            If FIN = False Then
                reste = reste - TRANCHE(T) * 1000 ^ (4 - T)
                Select Case T
                Case 1, 2
                    ChLettres = ChLettres & " " & ECH(T)
 
                    If TRANCHE(T) = 1 And Int(reste) = 0 Then
                        ChLettres = ChLettres & " de"
                        FIN = True
                    Else
                        If TRANCHE(T) > 1 Then
                            If Int(reste) = 0 Then
                                ChLettres = ChLettres & "s de"
                                FIN = True
                            Else
                                ChLettres = ChLettres & "s"
                            End If
                        End If
                    End If
 
                Case 3
                   ChLettres = ChLettres & " " & ECH(T)
                   If reste = 0 Then FIN = True
                Case 4
                    FIN = True
                End Select
            End If
        End If
        T = T + 1
    Wend
 
        If Right(ChLettres, 5) <> " euro" Then
 
            ChLettres = ChLettres & " euro"
        End If
        If Int(nombre) > 1 Then ChLettres = ChLettres & "s"

    
'   Partie fractionnaire

    N1 = nombre * 100
    N2 = Int(nombre) * 100
    N3 = N1 - N2
    If N3 <> 0 Then
        If Devise = "SD" Then
            ChLettres = ChLettres & " virgule"
        Else
            ChLettres = ChLettres & " & "
        End If
        Fract = Format(N3, "00")
        D = Val(Mid(Fract, 1, 1))
        U = Val(Mid(Fract, 2, 1))
        '
        ' Traitement des centièmes et dizièmes
        '
        Select Case D
        Case 0
            ChLettres = ChLettres & " " & UNI(U)
        Case 1
            ChLettres = ChLettres & " " & DN(U + 1)
        Case 2 To 6
            ChLettres = ChLettres & " " & DIZ(D)
            Select Case U
            Case 1
                ChLettres = ChLettres & " et " & UNI(U)
            Case Is > 1
                ChLettres = ChLettres & "-" & UNI(U)
            End Select
        Case 7, 9
           ChLettres = ChLettres & " " & DIZ(D)
           If Pays = "F" Then
             Select Case D * 10 + U
             Case 71
               ChLettres = ChLettres & " et " & DN(U + 1)
             Case Else
               ChLettres = ChLettres & "-" & DN(U + 1)
             End Select
           Else
             Select Case U
             Case 1
               ChLettres = ChLettres & " et " & UNI(U)
             Case Is > 1
               ChLettres = ChLettres & "-" & UNI(U)
             End Select
          End If
        Case Else
            ChLettres = ChLettres & " " & DIZ(D)
            Select Case U
            Case 0
                ChLettres = ChLettres & "s"
            Case Else
                ChLettres = ChLettres & "-" & UNI(U)
            End Select
        End Select
        

            ChLettres = ChLettres & " cent"
 
            If Fract > 1 Then ChLettres = ChLettres & "s"


    End If
End Function
 
Dernière édition:

MichD

XLDnaute Impliqué
Re : comment ajouter le mot ET a la fonction NBLETTRE ?

Bonjour,

Tu peux copier cette fonction dans un module standard. Cette fonction
fut publiée sous le nom de Youky que j'ai légèrement modifiée pour les
besoins de la cause.

Dans une cellule de la feuille : =chiffrelettre(A1) ou cette syntaxe : =chiffrelettre(125,63)

'------------------------------------------------------------------------
Function chiffrelettre(s) ' Youky

Dim a As Variant, gros As Variant
a = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _
"huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix sept", _
"dix huit", "dix neuf", "vingt", "vingt et un", "vingt deux", "vingt trois", "vingt quatre", _
"vingt cinq", "vingt six", "vingt sept", "vingt huit", "vingt neuf", "trente", "trente et un", _
"trente deux", "trente trois", "trente quatre", "trente cinq", "trente six", "trente sept", _
"trente huit", "trente neuf", "quarante", "quarante et un", "quarante deux", "quarante trois", _
"quarante quatre", "quarante cinq", "quarante six", "quarante sept", "quarante huit", _
"quarante neuf", "cinquante", "cinquante et un", "cinquante deux", "cinquante trois", _
"cinquante quatre", "cinquante cinq", "cinquante six", "cinquante sept", "cinquante huit", _
"cinquante neuf", "soixante", "soixante et un", "soixante deux", "soixante trois", _
"soixante quatre", "soixante cinq", "soixante six", "soixante sept", "soixante huit", _
"soixante neuf", "soixante dix", "soixante et onze", "soixante douze", "soixante treize", _
"soixante quatorze", "soixante quinze", "soixante seize", "soixante dix sept", _
"soixante dix huit", "soixante dix neuf", "quatre-vingts", "quatre-vingt un", _
"quatre-vingt deux", "quatre-vingt trois", "quatre-vingt quatre", "quatre-vingt cinq", _
"quatre-vingt six", "quatre-vingt sept", "quatre-vingt huit", "quatre-vingt neuf", _
"quatre-vingt dix", "quatre-vingt onze", "quatre-vingt douze", "quatre-vingt treize", _
"quatre-vingt quatorze", "quatre-vingt quinze", "quatre-vingt seize", "quatre-vingt dix sept", _
"quatre-vingt dix huit", "quatre-vingt dix neuf")
gros = Array("", "billions", "milliards", "millions", "mille", "Euros", "billion", _
"milliard", "million", "mille", "Euro")
sp = Space(1)
chaine = "00000000000000"
centime = s * 100 - (Int(s) * 100)
s = Str(Int(s)): lg = Len(s) - 1: s = Right(s, lg): lg = Len(s)
If lg < 15 Then chaine = Mid(chaine, 1, (15 - lg)) Else chaine = ""
s = chaine + s
'billions au centaines
gp = 1
For k = 1 To 5
x = Mid(s, gp, 1): c = a(Val(x))
x = Mid(s, gp + 1, 2): d = a(Val(x))
If k = 5 Then
If t2 <> "" And c & d = "" Then mydz = "Euros" & sp: GoTo fin
If t <> "" And c = "" And d = "un" Then mydz = "un Euros" & sp: GoTo fin
If t <> "" And t2 = "" And c & d = "" Then mydz = "d'Euros" & sp: GoTo fin
If t & c & d = "" Then myct = "": mydz = "": GoTo fin
End If
If c & d = "" Then GoTo fin
If d = "" And c <> "" And c <> "un" Then mydz = c & sp & "cents " & gros(k) & sp: GoTo fin
If d = "" And c = "un" Then mydz = "cent " & gros(k) & sp: GoTo fin
If d = "un" And c = "" Then myct = IIf(k = 4, gros(k) & sp, "un " & gros(k + 5) & sp): GoTo fin
If d <> "" And c = "un" Then mydz = "cent" & sp
If d <> "" And c <> "" And c <> "un" Then mydz = c & sp & "cent" + sp
myct = d & sp & gros(k) & sp
fin:
t2 = mydz & myct
t = t & mydz & myct
mydz = "": myct = ""
gp = gp + 3
Next
d = a(centime)
If t <> "" Then myct = IIf(centime = 1, " centime", " centimes")
If t = "" Then myct = IIf(centime = 1, " centime d'Euro", " centimes d'Euro")
If centime = 0 Then d = "": myct = ""
If d = "" Then
chiffrelettre = t '& " et " & d & myct
Else
chiffrelettre = t & " et " & d & myct
End If
End Function
'------------------------------------------------------------------------
 

madou2003

XLDnaute Nouveau
Re : comment ajouter le mot ET a la fonction NBLETTRE ?

Salut les amis,

merci pour vos propositions mais aucune n'est aussi complexe que celle que j'ai mis en PJ au premier message (maj/min, 3 devises, 2 langues...).

si quelqu'un d'autre a une proposition, je suis preneur.

Bonne soirée.
 

MichD

XLDnaute Impliqué
Re : comment ajouter le mot ET a la fonction NBLETTRE ?

Faut quand même prendre le temps de la poser ta question???????????????????????????????

En aucun moment n’avais-tu demandé que la procédure soumise devait avoir autant de variantes que celles que tu proposais!

Si tu veux ajouter une expression "et" dans d'autres langues, tu aurais pu au moins énoncer dans ta question l'expression consacrée équivalente en "Suisse" et en "Belge". Pour ces 2 dernières, sont-ce vraiment des langues?????????????
 
Dernière édition:

MichD

XLDnaute Impliqué
Re : comment ajouter le mot ET a la fonction NBLETTRE ?

Et si tu veux modifier la fonction originale, celle que tu as publiée,

Dans la fonction
'---------------------------------------
ConvNumberLetter(Nombre As Double, Optional Devise As Byte = 0, _
Optional Langue As Byte = 0, _
Optional Casse As Byte = 0, _
Optional ZeroCent As Byte = 0) As String
'---------------------------------------

Dans cette section : J'ai ajouté 2 variables T et C
et tu obtiens ce que tu désires en français seulement.

Je ne parle pas ni le "belge" ou le "suisse"! À toi de t'amuser... tu sais
au moins où intervenir!

'-----------------------------------------------
If byDec = 0 Then
If Devise <> 0 Then
If ZeroCent = 1 Then ConvNumberLetter = ConvNumberLetter & "zéro Cent"
End If
Else
If Devise = 0 Then
ConvNumberLetter = ConvNumberLetter & _
ConvNumDizaine(byDec, Langue, True) & strCentimes
Else
T = ConvNumDizaine(byDec, Langue, False)
C = IIf(t <> " un", strCentimes & "s", strCentimes)
ConvNumberLetter = ConvNumberLetter & " et " & _
T & C
' ConvNumberLetter = ConvNumberLetter & " et " & _
ConvNumDizaine(byDec, Langue, False) & strCentimes
End If
End If
'-----------------------------------------------
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 149
Messages
2 085 771
Membres
102 970
dernier inscrit
JMaurice