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]