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

Nombre en toute lettre de base

patricktoulon

XLDnaute Barbatruc
patricktoulon a posté une nouvelle ressource :

Nombre en toute lettre de base - converti un nombre en nombre en toute lettre


En savoir plus sur cette ressource...
 

patricktoulon

XLDnaute Barbatruc
re
petite correction apporté suite au constat de Modeste geedee

VB:
'
Function NombreEnLettre(chain As String, Optional decimale As Long = 2) As String
    Dim t, dixx&, dix&, cxx&, u&, uL
    uL = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf", "cent ")
    Diz = Array("", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix", "cent")
    ms = Array("", " decilliard", " decillion", " nonilliard", " nonillion", " octillard", " octillion", " septilliard", " septillion", " sextilliard", " sextillion", " quintilliard ", " Quintillion", " quadrilliard", " quadrillion", " trilliard", " trillion", " Billiard", " billion", " milliard", " million", " mille", "")
    x = UBound(ms)
    t = Split(chain, ",")
    If UBound(t) > 0 And Val(t(1)) = 0 Then t = Array(t(c))
    For c = 0 To UBound(t)
        chaine = t(c)
        If c = 0 Then chaine = "00" & t(c)
        If c = 1 Then chaine = "0" & Left(chaine & "0000", decimale): If Len(chaine) > 4 Then chaine = Left(chaine, 4)
        Z = 0

        For i = Len(chaine) - 2 To 1 Step -3
            Z = Z + 1: seg = Mid(chaine, i, 3)
            cxx = Left(seg, 1): dixx = Right(seg, 2): dix = Mid(seg, 2, 1): u = Right(seg, 1)
            If cxx = 1 Then cxx = 20: cc = "" Else cc = IIf(cxx > 0, "-cents ", "")
            If dix = 9 Or dix = 7 And u >= 1 Then dix = dix - 1: u = u + 10
            If dixx > 9 And dixx < 20 Then dix = 0: u = u + 10
            If dix >= 2 And dix <= 7 And (u = 1 Or u = 11) Then et = " et " Else et = IIf(dix <> 0, IIf(u <> 0, "-", " "), " ")
            If Val(seg) = 0 Then ms(UBound(ms) - Z + 1) = ""
            If Z = 2 And Val(seg) = 1 Then uL(1) = ""
            If c = 0 Then entier = Application.Trim(Application.Trim(uL(cxx) & cc & Diz(dix) & et & uL(u)) & " " & ms(x) & IIf(Val(seg) > 1 And Z > 2, "s", "") & " " & entier)
            uL(1) = "un"
            If c > 0 Then dec = dec & "," & Application.Trim(Application.Trim(uL(cxx) & cc & Diz(dix) & et & uL(u)))
            x = x - 1
        Next
    Next
    NombreEnLettre = Replace(entier & dec, " ", "-")
End Function

pour tester
Code:
Sub test()
    'MsgBox NombreEnLettre("4597367987967825932589,5")
    'MsgBox NombreEnLettre("1000000,56")
    'MsgBox NombreEnLettre("100000,56")
    'MsgBox NombreEnLettre("1001000,56")
    MsgBox NombreEnLettre("1001000,5667", 3)
    MsgBox NombreEnLettre("1001000,564")
    MsgBox NombreEnLettre(12345.0025, 3)    '
    MsgBox NombreEnLettre(12345.0025)    '
    MsgBox NombreEnLettre(12345.036, 3)
    MsgBox NombreEnLettre(12345.36, 3)
    MsgBox NombreEnLettre(12345.367, 3)
    MsgBox NombreEnLettre(12345.036)
    MsgBox NombreEnLettre(12345.44)
    'MsgBox NombreEnLettre(12345.25, 3)
    'MsgBox NombreEnLettre(12345.36, 3)
    'MsgBox NombreEnLettre(12345.44)
    'MsgBox NombreEnLettre("45345,00")
End Sub

autrement dit
0.5 devient 0.50
0.0025 devient 0.00 avec argument 2 et zero,deux avec argument 3
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Encore l'autre e***rdeur !... Si, vous l'avez dit ! je l'ai entendu...
je ne comprends pas l'utilisation de l'argument optional decimale =2 ???
 

patricktoulon

XLDnaute Barbatruc
re
oui 2 est d'office on est pas obligé de le mettre

avec 2 ou rien 1.123= 1.12 un,douze
avec 3 c'est = à 1.123 un,cent-vingt-trois
c'est juste une considération selon le besoins 2 ou 3 décimales
 

Discussions similaires

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