Sub testj()
'EN NUMERIQUE !!!! on va jusqu'a 9 bilion 999 milliards 999 millions 999 mille 999
' NbToLettresBelge 9536985394573.45'test en numeique
'EN STRING !!!! on va jusqu'au quadrilion soit un nombre a 28 chiffres
NbToLettresBelge "7529698753265419536985394573.45" 'test en string
End Sub
Function NbToLettresBelge(chaine As String)
Dim TR, diz, Ul, Tranche, c, d, u, I&, Chain$, T, a
'array de tranche
Tranche = Array("", " 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")
'array des dizaines
diz = Array("", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "septante", "quatre-vingt", "nonante", "cent")
'separateur decimal pour vba
Chain = Replace(chaine, ".", ",") 'reformatage du nombre avec virgule
' on sort si chain vide
If Chain = "" Then NbToLettresBelge = "": Exit Function
'on coupe le nombre(entier/décimal) T devient un array de 1 ou 2 items
T = Split(Chain, ",") 'on coupe (entier/decimal)
For I = 0 To UBound(T) 'boucle de 0 a 1 0 si pas de decimal
'formatage du nombre de t(i)"000 000 000 000 000 etc....." en supprimant les "000 "
T(I) = Trim(Replace(Format(T(I), Application.Rept(" 000", 50)), "000 ", ""))
'debug du resulat du formatage
Debug.Print "partie (" & I + 1 & ") = " & T(I)
'maintenant on coupe cette partie par les espaces(donc par ensemble de 3 chiffres)
part = Split(T(I), " ")
'on determine l'index dans la tranche de départ
TR = UBound(Tranche) - UBound(part)
'maintenant on boucle sur ces ensembles de 3 chiffres
For a = 0 To UBound(part)
If Val(part(a)) > 1 And TR < UBound(Tranche) Then Tranche(TR) = Tranche(TR) & "s"
c = Left(part(a), 1) 'le premier chiffre est donc la centaine
If c > 1 Then centx = " cent" Else centx = ""
If c = 1 Then c = 0: centx = "cent"
d = Mid(part(a), 2, 1) 'le second chiffre est donc la dizaine
u = Right(part(a), 1) 'le dernier chiffre est donc les unités
If d = 1 And u > 0 Then d = 0: u = u + 10 'pour eviter le "dix-trois" au lieu de "treize"
'on debug la sequence de 3 chiffre en nombre et en lettre pour voir
Debug.Print part(a) & "--->" & Ul(c) & centx & " " & diz(d) & " " & Ul(u) & Tranche(TR)
TR = TR + 1
Next
If I = 0 Then Debug.Print "virgule"
Next
End Function