1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| Function nombre_en_lettre5(nombre As String, Optional sstr As String = " euro", Optional sstr2 As String = " centime")
Dim i As Long, unit1, unit10, tablo, e_dec(2), e As Long, u As Long, d As Long, c As Long, ct As String, cs As String, etE As String, a As String
Dim decs As Long, ddd As String, ms, cms As Long, h As Long, ds As Long, et As String
nombre = Replace(nombre, ".", ","): e_dec(0) = Split(nombre, ",")(0): e_dec(0) = Split(Trim(Format(e_dec(0), Application.Rept(" @@@", 20))), " ")
If InStr(nombre, ",") > 0 Then e_dec(1) = Left(Split(nombre, ",")(1), 2): e_dec(1) = Split(Trim(Format(e_dec(1), Application.Rept(" @@@", 20))), " "): decs = 1
etE = IIf(decs > 0, " et", ""): ddd = IIf(Val(Join(e_dec(0))) > 999000 And Right(Join(e_dec(0)), 6) = 0, IIf(sstr = " dollar", " de", " d'"), "")
unit1 = Array("", " Un", " Deux", " Trois", " Quatre", " Cinq", " Six", " Sept", " Huit", " Neuf", " Dix", " Onze", " Douze", " treize", " Quatorze", " Quinze", " Seize", " Dix-Sept", " Dix-Huit", " Dix-Neuf", " cent", " zero")
unit10 = Array("", " dix", " vingt", " trente", " quarante", " cinquante", " soixante", " soixante-dix", " quatre-vingt", " quatre-vingt-dix", " cent")
ms = Array("", " sextillion", " Quintillion", " Quatrillion", " Trillion", " Billiard", " Billion", " milliard", " million", " mille", ""): cms = UBound(ms)
For e = 0 To decs
tablo = e_dec(e): h = UBound(tablo)
For i = 0 To h
If e = 1 And i = h Then tablo(i) = "000" & Left(tablo(i), 2)
a = ms(cms - (h - i)): a = IIf(tablo(i) = 0 And i < h, "", a): a = IIf(tablo(i) > 1 And i < h - 1 And a <> " mille", a & "s", a)
tablo(i) = IIf(e = 0, Right("000" & tablo(i), 3), Mid(tablo(i) & "0", 3, 3))
d = (tablo(i) Mod 100)
c = Mid(tablo(i), 1, 1): c = IIf(c = 1, 20, c): ct = IIf(c < 9 And c > 1, " cent", ""): ct = IIf(tablo(i) Mod 100 = 0 And c <> 20 And c > 1, ct & "s", ct)
cs = IIf(e > 0 And tablo(0) > 1, "s", ""): ds = Mid(Right(tablo(i), 2), 1, 1): u = Right(tablo(i), 1)
u = IIf(Val(tablo(i)) = 1 And a = " mille", 0, u): u = IIf(tablo(i) = 0 And i = 0, 21, u)
If d > 10 And d < 20 Or d > 70 And d < 80 Or d > 90 Then u = Val(Right(d, 1)) + 10: ds = Left(d, 1) - 1 'on calcul ds et u par le resultat du mod 100
et = IIf(ds > 1 And ds < 9, IIf(Right(u, 1) = 1, IIf(ds = 8, "-", " et"), IIf(d Mod 10 = 0 And ds = 8, IIf(a = " mille", "", "s"), IIf(u = 0, "", "-"))), "")
et = IIf(ds > 1 And ds < 7 And d Mod 10 = 0 And et = "-", "", et)
If Join(e_dec(0)) = 0 And e = 0 Then sstr = "": etE = "": u = 0
nombre_en_lettre5 = nombre_en_lettre5 & unit1((c)) & ct & unit10(ds) & et & unit1(u) & a
Next
nombre_en_lettre5 = Replace(nombre_en_lettre5 & IIf(e = 0, ddd & sstr & IIf(Int(nombre) > 1, "s", "") & etE, sstr2 & cs), "- ", "-")
Next
End Function |
Partager