Option Explicit
'***********
' Devise=0 aucune
' =1 Euro €
' =2 Dollar
' Langue=0 Français
' =1 Belgique
' =2 Suisse
'***********
' Conversion limitée à 999 999 999 999 999 ou 9 999 999 999 999,99
' si le nombre contient plus de 2 décimales, il est arrondit à 2 décimales
Public Function ConvNumberLetter(Nombre As Double, Optional Devise As Byte = 0, _
Optional Langue As Byte = 0) As String
Dim dblEnt As Variant, byDec As Byte
Dim bNegatif As Boolean
Dim strDev As String, strCentimes As String
If Nombre < 0 Then
bNegatif = True
Nombre = Abs(Nombre)
End If
dblEnt = Int(Nombre)
byDec = CInt((Nombre - dblEnt) * 100)
If byDec = 0 Then
If dblEnt > 999999999999999# Then
ConvNumberLetter = "#TropGrand"
Exit Function
End If
Else
If dblEnt > 9999999999999.99 Then
ConvNumberLetter = "#TropGrand"
Exit Function
End If
End If
Select Case Devise
Case 0
If byDec > 0 Then strDev = " virgule "
Case 1
strDev = " Euro"
[/TR]
[TR]
[TD] If dblEnt >= 1000000 And Right$(dblEnt, 6) = "000000" Then strDev = " d'Euro"[/TD]
[/TR]
[TR]
[TD] If byDec > 0 Then strCentimes = strCentimes & " Cent"[/TD]
[/TR]
[TR]
[TD] If byDec > 1 Then strCentimes = strCentimes & "s"[/TD]
[/TR]
[TR]
[TD] Case 2[/TD]
[/TR]
[TR]
[TD] strDev = " Dollar"[/TD]
[/TR]
[TR]
[TD] If byDec > 0 Then strCentimes = strCentimes & " Cent"[/TD]
[/TR]
[TR]
[TD] End Select[/TD]
[/TR]
[TR]
[TD] If dblEnt > 1 And Devise <> 0 Then strDev = strDev & "s"[/TD]
[/TR]
[TR]
[TD] strDev = strDev & " "[/TD]
[/TR]
[TR]
[TD] If dblEnt = 0 Then[/TD]
[/TR]
[TR]
[TD] ConvNumberLetter = "zéro " & strDev[/TD]
[/TR]
[TR]
[TD] Else[/TD]
[/TR]
[TR]
[TD] ConvNumberLetter = ConvNumEnt(CDbl(dblEnt), Langue) & strDev[/TD]
[/TR]
[TR]
[TD] End If[/TD]
[/TR]
[TR]
[TD] If byDec = 0 Then[/TD]
[/TR]
[TR]
[TD] If Devise <> 0 Then ConvNumberLetter = ConvNumberLetter & "zéro Cent"[/TD]
[/TR]
[TR]
[TD] Else[/TD]
[/TR]
[TR]
[TD] If Devise = 0 Then[/TD]
[/TR]
[TR]
[TD] ConvNumberLetter = ConvNumberLetter & _[/TD]
[/TR]
[TR]
[TD] ConvNumDizaine(byDec, Langue, True) & strCentimes[/TD]
[/TR]
[TR]
[TD] Else[/TD]
[/TR]
[TR]
[TD] ConvNumberLetter = ConvNumberLetter & _[/TD]
[/TR]
[TR]
[TD] ConvNumDizaine(byDec, Langue, False) & strCentimes[/TD]
[/TR]
[TR]
[TD] End If[/TD]
[/TR]
[TR]
[TD] End If[/TD]
[/TR]
[TR]
[TD] ConvNumberLetter = Replace(ConvNumberLetter, " ", " ")[/TD]
[/TR]
[TR]
[TD] If Left(ConvNumberLetter, 1) = " " Then ConvNumberLetter = _[/TD]
[/TR]
[TR]
[TD] Right$(ConvNumberLetter, Len(ConvNumberLetter) - 1)[/TD]
[/TR]
[TR]
[TD] If Right$(ConvNumberLetter, 1) = " " Then ConvNumberLetter = _[/TD]
[/TR]
[TR]
[TD] Left(ConvNumberLetter, Len(ConvNumberLetter) - 1)[/TD]
[/TR]
[TR]
[TD]End Function[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[TR]
[TD]Private Function ConvNumEnt(Nombre As Double, Langue As Byte)[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[TR]
[TD] Dim iTmp As Variant, dblReste As Double[/TD]
[/TR]
[TR]
[TD] Dim strTmp As String[/TD]
[/TR]
[TR]
[TD] Dim iCent As Integer, iMille As Integer, iMillion As Integer[/TD]
[/TR]
[TR]
[TD] Dim iMilliard As Integer, iBillion As Integer[/TD]
[/TR]
[TR]
[TD] [/TD]
[/TR]
[TR]
[TD] iTmp = Nombre - (Int(Nombre / 1000) * 1000)[/TD]
[/TR]
[TR]
[TD] iCent = CInt(iTmp)[/TD]
[/TR]
[TR]
[TD] ConvNumEnt = Nz(ConvNumCent(iCent, Langue))[/TD]
[/TR]
[TR]
[TD] dblReste = Int(Nombre / 1000)[/TD]
[/TR]
[TR]
[TD] If iTmp = 0 And dblReste = 0 Then Exit Function[/TD]
[/TR]
[TR]
[TD] iTmp = dblReste - (Int(dblReste / 1000) * 1000)[/TD]
[/TR]
[TR]
[TD] If iTmp = 0 And dblReste = 0 Then Exit Function[/TD]
[/TR]
[TR]
[TD] iMille = CInt(iTmp)[/TD]
[/TR]
[TR]
[TD] strTmp = ConvNumCent(iMille, Langue)[/TD]
[/TR]
[TR]
[TD] Select Case iTmp[/TD]
[/TR]
[TR]
[TD] Case 0[/TD]
[/TR]
[TR]
[TD] Case 1[/TD]
[/TR]
[TR]
[TD] strTmp = " mille "[/TD]
[/TR]
[TR]
[TD] Case Else[/TD]
[/TR]
[TR]
[TD] strTmp = strTmp & " mille "[/TD]
[/TR]
[TR]
[TD] End Select[/TD]
[/TR]
[TR]
[TD] If iMille = 0 And iCent > 0 Then ConvNumEnt = "et " & ConvNumEnt[/TD]
[/TR]
[TR]
[TD] ConvNumEnt = Nz(strTmp) & ConvNumEnt[/TD]
[/TR]
[TR]
[TD] dblReste = Int(dblReste / 1000)[/TD]
[/TR]
[TR]
[TD] iTmp = dblReste - (Int(dblReste / 1000) * 1000)[/TD]
[/TR]
[TR]
[TD] If iTmp = 0 And dblReste = 0 Then Exit Function[/TD]
[/TR]
[TR]
[TD] iMillion = CInt(iTmp)[/TD]
[/TR]
[TR]
[TD] strTmp = ConvNumCent(iMillion, Langue)[/TD]
[/TR]
[TR]
[TD] Select Case iTmp[/TD]
[/TR]
[TR]
[TD] Case 0[/TD]
[/TR]
[TR]
[TD] Case 1[/TD]
[/TR]
[TR]
[TD] strTmp = strTmp & " million "[/TD]
[/TR]
[TR]
[TD] Case Else[/TD]
[/TR]
[TR]
[TD] strTmp = strTmp & " millions "[/TD]
[/TR]
[TR]
[TD] End Select[/TD]
[/TR]
[TR]
[TD] If iMille = 1 Then ConvNumEnt = "et " & ConvNumEnt[/TD]
[/TR]
[TR]
[TD] ConvNumEnt = Nz(strTmp) & ConvNumEnt[/TD]
[/TR]
[TR]
[TD] dblReste = Int(dblReste / 1000)[/TD]
[/TR]
[TR]
[TD] iTmp = dblReste - (Int(dblReste / 1000) * 1000)[/TD]
[/TR]
[TR]
[TD] If iTmp = 0 And dblReste = 0 Then Exit Function[/TD]
[/TR]
[TR]
[TD] iMilliard = CInt(iTmp)[/TD]
[/TR]
[TR]
[TD] strTmp = ConvNumCent(iMilliard, Langue)[/TD]
[/TR]
[TR]
[TD] Select Case iTmp[/TD]
[/TR]
[TR]
[TD] Case 0[/TD]
[/TR]
[TR]
[TD] Case 1[/TD]
[/TR]
[TR]
[TD] strTmp = strTmp & " milliard "[/TD]
[/TR]
[TR]
[TD] Case Else[/TD]
[/TR]
[TR]
[TD] strTmp = strTmp & " milliards "[/TD]
[/TR]
[TR]
[TD] End Select[/TD]
[/TR]
[TR]
[TD] If iMillion = 1 Then ConvNumEnt = "et " & ConvNumEnt[/TD]
[/TR]
[TR]
[TD] ConvNumEnt = Nz(strTmp) & ConvNumEnt[/TD]
[/TR]
[TR]
[TD] dblReste = Int(dblReste / 1000)[/TD]
[/TR]
[TR]
[TD] iTmp = dblReste - (Int(dblReste / 1000) * 1000)[/TD]
[/TR]
[TR]
[TD] If iTmp = 0 And dblReste = 0 Then Exit Function[/TD]
[/TR]
[TR]
[TD] iBillion = CInt(iTmp)[/TD]
[/TR]
[TR]
[TD] strTmp = ConvNumCent(iBillion, Langue)[/TD]
[/TR]
[TR]
[TD] Select Case iTmp[/TD]
[/TR]
[TR]
[TD] Case 0[/TD]
[/TR]
[TR]
[TD] Case 1[/TD]
[/TR]
[TR]
[TD] strTmp = strTmp & " billion "[/TD]
[/TR]
[TR]
[TD] Case Else[/TD]
[/TR]
[TR]
[TD] strTmp = strTmp & " billions "[/TD]
[/TR]
[TR]
[TD] End Select[/TD]
[/TR]
[TR]
[TD] If iMilliard = 1 Then ConvNumEnt = "et " & ConvNumEnt[/TD]
[/TR]
[TR]
[TD] ConvNumEnt = Nz(strTmp) & ConvNumEnt[/TD]
[/TR]
[TR]
[TD]End Function[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[TR]
[TD]Private Function ConvNumDizaine(Nombre As Byte, Langue As Byte, bDec As Boolean) As String[/TD]
[/TR]
[TR]
[TD] Dim TabUnit As Variant, TabDiz As Variant[/TD]
[/TR]
[TR]
[TD] Dim byUnit As Byte, byDiz As Byte[/TD]
[/TR]
[TR]
[TD] Dim strLiaison As String[/TD]
[/TR]
[TR]
[TD] [/TD]
[/TR]
[TR]
[TD] If bDec Then[/TD]
[/TR]
[TR]
[TD] TabDiz = Array("zéro", "", "vingt", "trente", "quarante", "cinquante", _[/TD]
[/TR]
[TR]
[TD] "soixante", "soixante", "quatre-vingt", "quatre-vingt")[/TD]
[/TR]
[TR]
[TD] Else[/TD]
[/TR]
[TR]
[TD] TabDiz = Array("", "", "vingt", "trente", "quarante", "cinquante", _[/TD]
[/TR]
[TR]
[TD] "soixante", "soixante", "quatre-vingt", "quatre-vingt")[/TD]
[/TR]
[TR]
[TD] End If[/TD]
[/TR]
[TR]
[TD] If Nombre = 0 Then[/TD]
[/TR]
[TR]
[TD] TabUnit = Array("zéro")[/TD]
[/TR]
[TR]
[TD] Else[/TD]
[/TR]
[TR]
[TD] TabUnit = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _[/TD]
[/TR]
[TR]
[TD] "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", _[/TD]
[/TR]
[TR]
[TD] "seize", "dix-sept", "dix-huit", "dix-neuf")[/TD]
[/TR]
[TR]
[TD] End If[/TD]
[/TR]
[TR]
[TD] If Langue = 1 Then[/TD]
[/TR]
[TR]
[TD] TabDiz(7) = "septante"[/TD]
[/TR]
[TR]
[TD] TabDiz(9) = "nonante"[/TD]
[/TR]
[TR]
[TD] ElseIf Langue = 2 Then[/TD]
[/TR]
[TR]
[TD] TabDiz(7) = "septante"[/TD]
[/TR]
[TR]
[TD] TabDiz(8) = "huitante"[/TD]
[/TR]
[TR]
[TD] TabDiz(9) = "nonante"[/TD]
[/TR]
[TR]
[TD] End If[/TD]
[/TR]
[TR]
[TD] byDiz = Int(Nombre / 10)[/TD]
[/TR]
[TR]
[TD] byUnit = Nombre - (byDiz * 10)[/TD]
[/TR]
[TR]
[TD] strLiaison = "-"[/TD]
[/TR]
[TR]
[TD] If byUnit = 1 Then strLiaison = " et "[/TD]
[/TR]
[TR]
[TD] Select Case byDiz[/TD]
[/TR]
[TR]
[TD] Case 0[/TD]
[/TR]
[TR]
[TD] strLiaison = " "[/TD]
[/TR]
[TR]
[TD] Case 1[/TD]
[/TR]
[TR]
[TD] byUnit = byUnit + 10[/TD]
[/TR]
[TR]
[TD] strLiaison = ""[/TD]
[/TR]
[TR]
[TD] Case 7[/TD]
[/TR]
[TR]
[TD] If Langue = 0 Then byUnit = byUnit + 10[/TD]
[/TR]
[TR]
[TD] Case 8[/TD]
[/TR]
[TR]
[TD] If Langue <> 2 Then strLiaison = "-"[/TD]
[/TR]
[TR]
[TD] Case 9[/TD]
[/TR]
[TR]
[TD] If Langue = 0 Then[/TD]
[/TR]
[TR]
[TD] byUnit = byUnit + 10[/TD]
[/TR]
[TR]
[TD] strLiaison = "-"[/TD]
[/TR]
[TR]
[TD] End If[/TD]
[/TR]
[TR]
[TD] End Select[/TD]
[/TR]
[TR]
[TD] ConvNumDizaine = TabDiz(byDiz)[/TD]
[/TR]
[TR]
[TD] If byDiz = 8 And Langue <> 2 And byUnit = 0 Then ConvNumDizaine = ConvNumDizaine & "s"[/TD]
[/TR]
[TR]
[TD] If TabUnit(byUnit) <> "" Then[/TD]
[/TR]
[TR]
[TD] ConvNumDizaine = ConvNumDizaine & strLiaison & TabUnit(byUnit)[/TD]
[/TR]
[TR]
[TD] Else[/TD]
[/TR]
[TR]
[TD] ConvNumDizaine = ConvNumDizaine[/TD]
[/TR]
[TR]
[TD] End If[/TD]
[/TR]
[TR]
[TD]End Function[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[TR]
[TD]Private Function ConvNumCent(Nombre As Integer, Langue As Byte) As String[/TD]
[/TR]
[TR]
[TD] Dim TabUnit As Variant[/TD]
[/TR]
[TR]
[TD] Dim byCent As Byte, byReste As Byte[/TD]
[/TR]
[TR]
[TD] Dim strReste As String[/TD]
[/TR]
[TR]
[TD] [/TD]
[/TR]
[TR]
[TD] TabUnit = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _[/TD]
[/TR]
[TR]
[TD] "huit", "neuf", "dix")[/TD]
[/TR]
[TR]
[TD] byCent = Int(Nombre / 100)[/TD]
[/TR]
[TR]
[TD] byReste = Nombre - (byCent * 100)[/TD]
[/TR]
[TR]
[TD] strReste = ConvNumDizaine(byReste, Langue, False)[/TD]
[/TR]
[TR]
[TD] Select Case byCent[/TD]
[/TR]
[TR]
[TD] Case 0[/TD]
[/TR]
[TR]
[TD] ConvNumCent = strReste[/TD]
[/TR]
[TR]
[TD] Case 1[/TD]
[/TR]
[TR]
[TD] If byReste = 0 Then[/TD]
[/TR]
[TR]
[TD] ConvNumCent = "cent"[/TD]
[/TR]
[TR]
[TD] Else[/TD]
[/TR]
[TR]
[TD] ConvNumCent = "cent " & strReste[/TD]
[/TR]
[TR]
[TD] End If[/TD]
[/TR]
[TR]
[TD] Case Else[/TD]
[/TR]
[TR]
[TD] If byReste = 0 Then[/TD]
[/TR]
[TR]
[TD] ConvNumCent = TabUnit(byCent) & " cents"[/TD]
[/TR]
[TR]
[TD] Else[/TD]
[/TR]
[TR]
[TD] ConvNumCent = TabUnit(byCent) & " cent " & strReste[/TD]
[/TR]
[TR]
[TD] End If[/TD]
[/TR]
[TR]
[TD] End Select[/TD]
[/TR]
[TR]
[TD]End Function[/TD]
[/TR]
[TR]
[TD][/TD]
[/TR]
[TR]
[TD]Private Function Nz(strNb As String) As String[/TD]
[/TR]
[TR]
[TD] If strNb <> " zéro" Then Nz = strNb[/TD]
[/TR]
[TR]
[TD]End Function[/TD]
[/TR]
[/TABLE]