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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| Sub test()
'Debug.Print nombre_toutes_lettre3("1", , "euro")
Debug.Print nombre_toutes_lettre3("1,1", , "euro")
Debug.Print nombre_toutes_lettre3("0,27", , "euro")
Debug.Print nombre_toutes_lettre3("1,27", , "point")
Debug.Print nombre_toutes_lettre3("580,27", , "dirham")
Debug.Print nombre_toutes_lettre3("10,275", True, "metre")
Debug.Print nombre_toutes_lettre3("1000,56", , "euro")
Debug.Print nombre_toutes_lettre3("1000000", , "euro")
Debug.Print nombre_toutes_lettre3("1000000", , "dollars")
Debug.Print nombre_toutes_lettre3("1001000000", , "euro")
Debug.Print nombre_toutes_lettre3("100,86", , "dollars")
Debug.Print nombre_toutes_lettre3("45,23", , "point")
Debug.Print nombre_toutes_lettre3("1012101,56")
Debug.Print nombre_toutes_lettre3("2221,56", True)
Debug.Print nombre_toutes_lettre3("2437,56", True)
Debug.Print nombre_toutes_lettre3("3571291245,562", , "dollars")
Debug.Print nombre_toutes_lettre3("1000000000", True)
Debug.Print nombre_toutes_lettre3("1000000001", True)
Debug.Print " Et juste pour le fun "
Debug.Print nombre_toutes_lettre3("990073548236458235430002211305,25")
Debug.Print ":):):):):):):)"
End Sub
Function nombre_toutes_lettre3(nombre As String, Optional recomm1990 As Boolean = False, Optional monnaie As String = " virgule ")
Dim dec, unit1, unit10, ms, ds$, i&, cen$, dix$, u$, diz$, Part, msx&, T&, ET$, result$, centi$
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", "zéro")
unit10 = Array("", " dix", " vingt", " trente", " quarante", " cinquante", " soixante", " soixante-dix", " quatre-vingt", " quatre-vingt-dix", " cent")
ms = Array("", " mille ", " million ", " milliard ", " Billion ", " Billiard ", " Trillion ", " Quatrillion ", " Quintillion ", " sextillion ", "")
dec = Split(Replace(nombre, ".", ","), ",")
ReDim Preserve dec(0 To 1)
If monnaie <> " virgule " And monnaie <> "metre" Then dec(1) = Mid(dec(1), 1, 2)
devise dec, monnaie, centi
For i = 0 To UBound(dec)
dec(i) = Trim(Format(dec(i), IIf(Len(dec(i)) < 3, "000", Application.Rept("@@@ ", 15))))
Part = Split(dec(i), " "): msx = UBound(Part): dec(i) = ""
For T = 0 To UBound(Part)
Part(T) = Right("00" & Part(T), 3)
If ms(msx - T) <> " mille " And ms(msx - T) <> "" Then ms(msx - T) = IIf(Val(Part(T)) > 1, RTrim(ms(msx - T)) & "s ", ms(msx - T))
cen = Val(Left(Part(T), 1)): dix = Val(Right(Part(T), 2)): diz = Val(Mid(Part(T), 2, 1)): u = Val(Right(Part(T), 1))
If Val(cen) = 1 Then cen = " cent" Else If Val(cen) > 1 Then cen = unit1(cen) & " cent" Else cen = unit1(Val(cen))
If dix > 10 And dix < 20 Then diz = 0: u = u + 10
If dix > 70 And dix < 80 Or dix > 90 And dix < 100 Then diz = diz - 1: u = u + 10
If dix > 20 And dix < 80 And Right(u, 1) Like "*1*" Then ET = " et " Else If u > 1 And diz > 0 Then ET = "-" Else ET = " "
If dix = 80 Then ds = "s" Else ds = ""
dix = unit10(diz) & ds & ET & unit1(u)
If ms(msx - T) = " mille " And Val(Part(T)) = 1 Then dix = " mille ": Part(T) = 0
dec(i) = dec(i) & cen & dix & IIf(Val(Part(T)) > 0 And i = 0, ms(msx - T), " ")
Next
If recomm1990 Then dec(i) = Replace(Application.Trim(dec(i)), " ", "-")
Next
nombre_toutes_lettre3 = Application.Trim(dec(0) & " " & monnaie & " " & dec(1) & " " & centi)
End Function
Function devise(dec, mon, centi)
Dim DE
If Left(mon, 1) Like "[a-e-i-o-u-y]" Then DE = " d'" Else DE = " de "
Select Case mon
Case "euro", "dirham"
If Val(dec(0)) = 1000000 Or Val(dec(0)) > 2000000 And Right(dec(0), 1) = 0 Then mon = DE & mon
mon = " " & mon & IIf(Val(dec(0)) > 1, "s", "") & IIf(Val(dec(1)) > 0, " et ", "")
If Val(dec(1)) > 0 Then centi = " centime" & IIf(Val(dec(1)) > 1, "s", "")
If Val(dec(0)) = 0 Then mon = ""
Case "dollars"
If Val(dec(0)) = 1000000 Or Val(dec(0)) > 2000000 And Right(dec(0), 1) = 0 Then mon = " de " & mon
mon = " " & mon & " ": If Val(dec(1)) > 0 Then centi = " cent" & IIf(Val(dec(1)) > 1, "s", "")
Case "point"
If Val(dec(0)) = 1000000 Or Val(dec(0)) > 2000000 Then mon = " " & DE & " " & mon
If Val(dec(0)) > 1 Then mon = " " & mon & "s ": centi = ""
Case "metre"
If Val(dec(0)) = 1000000 Or Val(dec(0)) > 2000000 Then mon = " " & DE & " " & mon
If Val(dec(0)) > 1 Then mon = " " & mon & "s " & IIf(Val(dec(1)) > 0, " et ", ""): centi = "milimetre" & IIf(Val(dec(1)) > 1, "s", "")
Case "litre"
Case " virgule ": If Val(dec(1)) = 0 Then mon = ""
Case "coup dans ta gueule"
End Select
End Function |
Partager