0% found this document useful (0 votes)
70 views5 pages

NUmlettre

This document contains the code for a function that converts a number to its written word equivalent in various languages and formats. It includes options for currency, language, case, and whether to include trailing zeros. The function breaks down the number into pieces representing thousands, millions, billions etc. and converts each piece before combining them with appropriate separators.

Uploaded by

Hacene Kaabeche
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
70 views5 pages

NUmlettre

This document contains the code for a function that converts a number to its written word equivalent in various languages and formats. It includes options for currency, language, case, and whether to include trailing zeros. The function breaks down the number into pieces representing thousands, millions, billions etc. and converts each piece before combining them with appropriate separators.

Uploaded by

Hacene Kaabeche
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

'***********

' Devise=0 aucune


' =1 Euro �
' =2 Dollar $
' =3 �uro �
' Langue=0 Fran�ais
' =1 Belgique
' =2 Suisse
' Casse =0 Minuscule
' =1 Majuscule en d�but de phrase
' =2 Majuscule
' =3 Majuscule en d�but de chaque mot
' ZeroCent=0 Ne mentionne pas les cents s'ils sont �gal � 0
' =1 Mentionne toujours les cents
'***********
' 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 ConvNumberLetter1(Nombre As Double, Optional Devise As Byte = 0, _


Optional Langue As Byte = 0, _
Optional Casse As Byte = 0, _
Optional ZeroCent 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
ConvNumberLetter1 = "#TropGrand"
Exit Function
End If
Else
If dblEnt > 9999999999999.99 Then
ConvNumberLetter1 = "#TropGrand"
Exit Function
End If
End If
Select Case Devise
Case 1
If byDec > 0 Then strDev = " virgule "
Case 0
strDev = " D.A"
If dblEnt >= 1000000 And Right(dblEnt, 6) = "000000" Then strDev = "
d'Euro"
If byDec > 0 Then strCentimes = strCentimes & " Cent"
If byDec > 1 Then strCentimes = strCentimes & "s"
Case 2
strDev = " Dollar"
If byDec > 0 Then strCentimes = strCentimes & " Cent"
Case 3
strDev = " �uro"
If dblEnt >= 1000000 And Right(dblEnt, 6) = "000000" Then strDev = "
d'�uro"
If byDec > 0 Then strCentimes = strCentimes & " Cent"
If byDec > 1 Then strCentimes = strCentimes & "s"
End Select
If dblEnt > 1 And Devise <> 0 Then strDev = strDev & "s"
strDev = strDev & " "
If dblEnt = 0 Then
ConvNumberLetter1 = "z�ro " & strDev
Else
ConvNumberLetter1 = ConvNumEnt(CDbl(dblEnt), Langue) & strDev
End If
If byDec = 0 Then
If Devise <> 0 Then
If ZeroCent = 1 Then ConvNumberLetter1 = ConvNumberLetter1 & "z�ro
Cent"
End If
Else
If Devise = 0 Then
ConvNumberLetter1 = ConvNumberLetter1 & _
ConvNumDizaine(byDec, Langue, True) & strCentimes
Else
ConvNumberLetter1 = ConvNumberLetter1 & _
ConvNumDizaine(byDec, Langue, False) & strCentimes
End If
End If
ConvNumberLetter1 = Replace(ConvNumberLetter1, " ", " ")
If Left(ConvNumberLetter1, 1) = " " Then
ConvNumberLetter1 = Right(ConvNumberLetter1, Len(ConvNumberLetter1) -
1)
If Right(ConvNumberLetter1, 1) = " " Then
ConvNumberLetter1 = Left(ConvNumberLetter1, Len(ConvNumberLetter1) - 1)
Select Case Casse
Case 2
ConvNumberLetter1 = LCase(ConvNumberLetter1)
Case 1
ConvNumberLetter1 = UCase(Left(ConvNumberLetter1, 1)) & _
LCase(Right(ConvNumberLetter1, Len(ConvNumberLetter1) - 1))
Case 0
ConvNumberLetter1 = UCase(ConvNumberLetter1)
Case 3
ConvNumberLetter1 =
Application.WorksheetFunction.Proper(ConvNumberLetter1)
If Devise = 3 Then _
ConvNumberLetter1 = Replace(ConvNumberLetter1, "�Uros",
"�uros", , , vbTextCompare)
End Select
End Function

******************************

Private Function ConvNumEnt(Nombre As Double, Langue As Byte)


Dim iTmp As Variant, dblReste As Double
Dim strTmp As String
Dim iCent As Integer, iMille As Integer, iMillion As Integer
Dim iMilliard As Integer, iBillion As Integer
iTmp = Nombre - (Int(Nombre / 1000) * 1000)
iCent = CInt(iTmp)
ConvNumEnt = Nz(ConvNumCent(iCent, Langue))
dblReste = Int(Nombre / 1000)
If iTmp = 0 And dblReste = 0 Then Exit Function
iTmp = dblReste - (Int(dblReste / 1000) * 1000)
If iTmp = 0 And dblReste = 0 Then Exit Function
iMille = CInt(iTmp)
strTmp = ConvNumCent(iMille, Langue)
Select Case iTmp
Case 0
Case 1
strTmp = " mille "
Case Else
strTmp = strTmp & " mille "
End Select
If iMille = 0 And iCent > 0 Then ConvNumEnt = "et " & ConvNumEnt
ConvNumEnt = Nz(strTmp) & ConvNumEnt
dblReste = Int(dblReste / 1000)
iTmp = dblReste - (Int(dblReste / 1000) * 1000)
If iTmp = 0 And dblReste = 0 Then Exit Function
iMillion = CInt(iTmp)
strTmp = ConvNumCent(iMillion, Langue)
Select Case iTmp
Case 0
Case 1
strTmp = strTmp & " million "
Case Else
strTmp = strTmp & " millions "
End Select
If iMille = 1 Then ConvNumEnt = "et " & ConvNumEnt
ConvNumEnt = Nz(strTmp) & ConvNumEnt
dblReste = Int(dblReste / 1000)
iTmp = dblReste - (Int(dblReste / 1000) * 1000)
If iTmp = 0 And dblReste = 0 Then Exit Function
iMilliard = CInt(iTmp)
strTmp = ConvNumCent(iMilliard, Langue)
Select Case iTmp
Case 0
Case 1
strTmp = strTmp & " milliard "
Case Else
strTmp = strTmp & " milliards "
End Select
If iMillion = 1 Then ConvNumEnt = "et " & ConvNumEnt
ConvNumEnt = Nz(strTmp) & ConvNumEnt
dblReste = Int(dblReste / 1000)
iTmp = dblReste - (Int(dblReste / 1000) * 1000)
If iTmp = 0 And dblReste = 0 Then Exit Function
iBillion = CInt(iTmp)
strTmp = ConvNumCent(iBillion, Langue)
Select Case iTmp
Case 0
Case 1
strTmp = strTmp & " billion "
Case Else
strTmp = strTmp & " billions "
End Select
If iMilliard = 1 Then ConvNumEnt = "et " & ConvNumEnt
ConvNumEnt = Nz(strTmp) & ConvNumEnt
End Function

******************************

Private Function ConvNumDizaine(Nombre As Byte, Langue As Byte, bDec As Boolean) As


String
Dim TabUnit As Variant, TabDiz As Variant
Dim byUnit As Byte, byDiz As Byte
Dim strLiaison As String

If bDec Then
TabDiz = Array("z�ro", "", "vingt", "trente", "quarante", "cinquante", _
"soixante", "soixante", "quatre-vingt", "quatre-vingt")
Else
TabDiz = Array("", "", "vingt", "trente", "quarante", "cinquante", _
"soixante", "soixante", "quatre-vingt", "quatre-vingt")
End If
If Nombre = 0 Then
TabUnit = Array("z�ro")
Else
TabUnit = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept",
_
"huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze",
_
"seize", "dix-sept", "dix-huit", "dix-neuf")
End If
If Langue = 1 Then
TabDiz(7) = "septante"
TabDiz(9) = "nonante"
ElseIf Langue = 2 Then
TabDiz(7) = "septante"
TabDiz(8) = "huitante"
TabDiz(9) = "nonante"
End If
byDiz = Int(Nombre / 10)
byUnit = Nombre - (byDiz * 10)
strLiaison = "-"
If byUnit = 1 Then strLiaison = " et "
Select Case byDiz
Case 0
strLiaison = " "
Case 1
byUnit = byUnit + 10
strLiaison = ""
Case 7
If Langue = 0 Then byUnit = byUnit + 10
Case 8
If Langue <> 2 Then strLiaison = "-"
Case 9
If Langue = 0 Then
byUnit = byUnit + 10
strLiaison = "-"
End If
End Select
ConvNumDizaine = TabDiz(byDiz)
If byDiz = 8 And Langue <> 2 And byUnit = 0 Then ConvNumDizaine =
ConvNumDizaine & "s"
If TabUnit(byUnit) <> "" Then
ConvNumDizaine = ConvNumDizaine & strLiaison & TabUnit(byUnit)
Else
ConvNumDizaine = ConvNumDizaine
End If
End Function

******************************

Private Function ConvNumCent(Nombre As Integer, Langue As Byte) As String


Dim TabUnit As Variant
Dim byCent As Byte, byReste As Byte
Dim strReste As String

TabUnit = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _


"huit", "neuf", "dix")
byCent = Int(Nombre / 100)
byReste = Nombre - (byCent * 100)
strReste = ConvNumDizaine(byReste, Langue, False)
Select Case byCent
Case 0
ConvNumCent = strReste
Case 1
If byReste = 0 Then
ConvNumCent = "cent"
Else
ConvNumCent = "cent " & strReste
End If
Case Else
If byReste = 0 Then
ConvNumCent = TabUnit(byCent) & " cts"
Else
ConvNumCent = TabUnit(byCent) & " cent " & strReste
End If
End Select
End Function

******************************

Private Function Nz(strNb As String) As String


If strNb <> " z�ro" Then Nz = strNb
End Function

You might also like