Sub test()
Nblettre ("321135628714356147139110015086418878")
End Sub
'
Function Nblettre(chaine As String) As String
Dim t, dixx&, dix&, cxx&, u&
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)
chaine = "00" & chaine
For I = Len(chaine) - 2 To 1 Step -3
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, "-", " ")
Texte = Application.Trim(Application.Trim(Ul(cxx) & cc & Diz(dix) & et & Ul(u)) & " " & ms(x) & " " & Texte)
'debug segment
Debug.Print Application.Trim(Ul(cxx) & cc & Diz(dix) & et & Ul(u)) & " (" & seg & ") " & ms(x)
x = x - 1
Next
'debug complet
Debug.Print Texte
End Function