2 réponses
Salut,
J'ai crée 2 fonctions dans VBA :
ConversionNormale
ConversionDecimale
qui font la conversion des chiffres en lettres de façon suivante
ConversionNormale de 1 à 999.999
ConversionDecimale de 0,01 à 999.999,99
euro(s) et ajouté à la fin
Le code est assez long ( c'était mon début en VBA et dans la programmation) et je n'ai plus travaillé dessus. Peut-être tu vas trouver quelque chose plus simple.
Voilà le code:
======================================================
Option Explicit
Const cent = "cent"
Const cents = "cents"
Const mille = "mille"
Const euro = "euro"
Const euros = "euros"
Const centimes = "centimes"
Const zero = "zero"
Dim sConversionUnites As String
Dim sConversionDisaines As String
Dim sConversionCentaines As String
Dim sConversionApresUnites As String
Dim sMontant As String
Dim sMontantMille As String
Dim sMontantCentMille As String
Dim sDecimale As String
Public Sub Unites(sUnites As String)
Select Case sUnites
Case Is = 1
sConversionUnites = "un"
Case Is = 2
sConversionUnites = "deux"
Case Is = 3
sConversionUnites = "trois"
Case Is = 4
sConversionUnites = "quatre"
Case Is = 5
sConversionUnites = "cinq"
Case Is = 6
sConversionUnites = "six"
Case Is = 7
sConversionUnites = "sept"
Case Is = 8
sConversionUnites = "huit"
Case Is = 9
sConversionUnites = "neuf"
End Select
End Sub
Public Sub Disaines(sDisaines As String)
' Dim iLengthDisaines
' iLengthDisaines = 2
'iLengthDisaines = Len(sDisaines)
Select Case sDisaines
Case Is = 1
sConversionDisaines = "dix"
Case Is = 2
sConversionDisaines = "vingt"
Case Is = 3
sConversionDisaines = "trente"
Case Is = 4
sConversionDisaines = "quarante"
Case Is = 5
sConversionDisaines = "cinquante"
Case Is = 6
sConversionDisaines = "soixante"
Case Is = 7
sConversionDisaines = "soixante-dix"
Case Is = 8
sConversionDisaines = "quatre-vingt"
Case Is = 9
sConversionDisaines = "quatre-vingt-dix"
End Select
End Sub
Public Sub ApresUnites(sApresUnites As String)
Select Case sApresUnites
Case Is = 11
sConversionApresUnites = "onze"
Case Is = 12
sConversionApresUnites = "douze"
Case Is = 13
sConversionApresUnites = "treize"
Case Is = 14
sConversionApresUnites = "quatorze"
Case Is = 15
sConversionApresUnites = "quinze"
Case Is = 16
sConversionApresUnites = "seize"
Case Is = 17
sConversionApresUnites = "dix-sept"
Case Is = 18
sConversionApresUnites = "dix-huit"
Case Is = 19
sConversionApresUnites = "dix-neuf"
End Select
End Sub
Private Function conversion(sMontant As String)
Dim iLength As Integer
iLength = Len(sMontant)
Select Case iLength
Case Is = 1
Unites (sMontant)
conversion = sConversionUnites
Case Is = 2
If Right(sMontant, 1) = 0 Then
Disaines (Left(sMontant, 1))
conversion = sConversionDisaines
ElseIf Left(sMontant, 1) = 1 And Right(sMontant, 1) <> 0 Then
ApresUnites (sMontant)
conversion = sConversionApresUnites
ElseIf Left(sMontant, 1) <> 0 And Left(sMontant, 1) <= 6 And Right(sMontant, 1) <> 0 Then
Unites (Right(sMontant, 1))
Disaines (Left(sMontant, 1))
conversion = sConversionDisaines & " " & sConversionUnites
ElseIf Left(sMontant, 1) <> 0 And Left(sMontant, 1) = 7 And Right(sMontant, 1) <> 0 Then
Disaines (Left(sMontant, 1))
ApresUnites ("1" & Right(sMontant, 1))
conversion = Left(sConversionDisaines, 8) & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) <> 0 And Left(sMontant, 1) = 8 And Right(sMontant, 1) <> 0 Then
Unites (Right(sMontant, 1))
Disaines (Left(sMontant, 1))
conversion = sConversionDisaines & " " & sConversionUnites
ElseIf Left(sMontant, 1) <> 0 And Left(sMontant, 1) = 9 And Right(sMontant, 1) <> 0 Then
Disaines (Left(sMontant, 1))
ApresUnites ("1" & Right(sMontant, 1))
conversion = Left(sConversionDisaines, 12) & " " & sConversionApresUnites
End If
Case Is = 3
If Left(sMontant, 1) = 1 And Right(sMontant, 2) = 0 Then
conversion = cent
ElseIf Left(sMontant, 1) > 1 And Right(sMontant, 2) = 0 And Right(sMontant, 1) = 0 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent & "s"
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) = 0 Then
Unites (Right(sMontant, 1))
conversion = cent & " " & sConversionUnites
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) = 1 And Right(sMontant, 1) <> 0 Then
ApresUnites (Mid(sMontant, 2, 2))
conversion = cent & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) <> 1 And Right(sMontant, 1) = 0 Then
Unites (Left(sMontant, 1))
Disaines (Mid(sMontant, 2, 1))
conversion = sConversionUnites & " " & cent & " " & sConversionDisaines
ElseIf Left(sMontant, 1) = 1 And Right(sMontant, 1) = 0 Then
'Unites (Left(sMontant, 1))
Disaines (Mid(sMontant, 2, 1))
conversion = cent & " " & sConversionDisaines
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) <= 6 Then
Disaines (Mid(sMontant, 2, 1))
Unites (Right(sMontant, 1))
conversion = cent & " " & sConversionDisaines & " " & sConversionUnites
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) = 7 Then
Disaines (Mid(sMontant, 2, 1))
ApresUnites ("1" & Right(sMontant, 1))
'Unites (Right(sMontant, 1))
conversion = cent & " " & Left(sConversionDisaines, 8) & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) = 8 Then
Disaines (Mid(sMontant, 2, 1))
Unites (Right(sMontant, 1))
conversion = cent & " " & sConversionDisaines & " " & sConversionUnites
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) = 9 Then
Disaines (Mid(sMontant, 2, 1))
ApresUnites ("1" & Right(sMontant, 1))
'Unites (Right(sMontant, 1))
conversion = cent & " " & Left(sConversionDisaines, 12) & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) = 0 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
Unites (Right(sMontant, 1))
conversion = conversion & " " & sConversionUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) = 1 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
ApresUnites ("1" & Right(sMontant, 1))
conversion = conversion & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) <= 6 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
Disaines (Mid(sMontant, 2, 1))
conversion = conversion & " " & sConversionDisaines
Unites (Right(sMontant, 1))
conversion = conversion & " " & sConversionUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) = 7 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
Disaines (Mid(sMontant, 2, 1))
ApresUnites ("1" & Right(sMontant, 1))
conversion = conversion & " " & Left(sConversionDisaines, 8) & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) = 8 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
Disaines (Mid(sMontant, 2, 1))
Unites (Right(sMontant, 1))
conversion = conversion & " " & sConversionDisaines & " " & sConversionUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) = 9 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
Disaines (Mid(sMontant, 2, 1))
ApresUnites ("1" & Right(sMontant, 1))
conversion = conversion & " " & Left(sConversionDisaines, 12) & " " & sConversionApresUnites
End If
End Select
End Function
Private Function ConversionMille(sMontantMille)
Dim sMontantUnites As String, sMontantDisaines As String, sMontantCentaines As String
Dim sMontantMilleConversion As String
Dim iLengthMille As Integer
Dim sConversionFunction As String
iLengthMille = Len(sMontantMille)
Dim sConversionMille As String
Select Case iLengthMille
Case Is = 4
If Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 Then
Unites (Left(sMontantMille, 1))
ConversionMille = sConversionUnites & " " & mille
ElseIf Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) = 0 Then
sMontantUnites = Right(sMontantMille, 1)
Unites (Left(sMontantMille, 1))
ConversionMille = sConversionUnites & " " & mille
sConversionFunction = conversion(sMontantUnites)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) > 0 Then
sMontantDisaines = Right(sMontantMille, 2)
Unites (Left(sMontantMille, 1))
ConversionMille = ""
ConversionMille = sConversionUnites & " " & mille
sConversionFunction = conversion(sMontantDisaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Mid(sMontantMille, 2, 1) > 0 Then
sMontantCentaines = Right(sMontantMille, 3)
Unites (Left(sMontantMille, 1))
ConversionMille = ""
ConversionMille = sConversionUnites & " " & mille
sConversionFunction = conversion(sMontantCentaines)
ConversionMille = ConversionMille & " " & sConversionFunction
End If
Case Is = 5
If Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 And Mid(sMontantMille, 5, 1) = 0 Then
Disaines (Left(sMontantMille, 1))
ConversionMille = sConversionDisaines & " " & mille
ElseIf Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 And Mid(sMontantMille, 5, 1) = 0 Then
sMontantMilleConversion = Left(sMontantMille, 2)
sConversionMille = conversion(sMontantMilleConversion)
ConversionMille = sConversionMille & " " & mille
ElseIf Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 And Mid(sMontantMille, 5, 1) > 0 Then
Disaines (Left(sMontantMille, 1))
ConversionMille = sConversionDisaines & " " & mille
sMontantUnites = Right(sMontantMille, 1)
sConversionFunction = conversion(sMontantUnites)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) > 0 And Mid(sMontantMille, 5, 1) >= 0 Then
Disaines (Left(sMontantMille, 1))
ConversionMille = sConversionDisaines & " " & mille
sMontantDisaines = Right(sMontantMille, 2)
sConversionFunction = conversion(sMontantDisaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) > 0 _
And Mid(sMontantMille, 4, 1) >= 0 And Mid(sMontantMille, 5, 1) >= 0 Then
Disaines (Left(sMontantMille, 1))
ConversionMille = sConversionDisaines & " " & mille
sMontantCentaines = Right(sMontantMille, 3)
sConversionFunction = conversion(sMontantCentaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) = 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 And Mid(sMontantMille, 5, 1) > 0 Then
ApresUnites ("1" & Mid(sMontantMille, 2, 1))
ConversionMille = sConversionApresUnites & " " & mille
sMontantUnites = (Right(sMontantMille, 1))
sConversionFunction = conversion(sMontantUnites)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) = 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) > 0 And Mid(sMontantMille, 5, 1) >= 0 Then
ApresUnites ("1" & Mid(sMontantMille, 2, 1))
ConversionMille = sConversionApresUnites & " " & mille
sMontantDisaines = (Right(sMontantMille, 2))
sConversionFunction = conversion(sMontantDisaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) = 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) > 0 _
And Mid(sMontantMille, 4, 1) >= 0 And Mid(sMontantMille, 5, 1) >= 0 Then
ApresUnites ("1" & Mid(sMontantMille, 2, 1))
ConversionMille = sConversionApresUnites & " " & mille
sMontantCentaines = Right(sMontantMille, 3)
sConversionFunction = conversion(sMontantCentaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) > 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 And Mid(sMontantMille, 5, 1) > 0 Then
'Disaines (Left(sMontantMille, 1))
'Unites (Mid(sMontantMille, 2, 1))
sMontantMilleConversion = Left(sMontantMille, 2)
sConversionMille = conversion(sMontantMilleConversion)
ConversionMille = sConversionMille & " " & mille
sMontantUnites = Right(sMontantMille, 1)
sConversionFunction = conversion(sMontantUnites)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) > 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) > 0 And Mid(sMontantMille, 5, 1) >= 0 Then
'Disaines (Left(sMontantMille, 1))
'Unites (Mid(sMontantMille, 2, 1))
'ConversionMille = sConversionDisaines & " " & sConversionUnites & " " & mille
sMontantMilleConversion = Left(sMontantMille, 2)
sConversionMille = conversion(sMontantMilleConversion)
ConversionMille = sConversionMille & " " & mille
sMontantDisaines = Right(sMontantMille, 2)
sConversionFunction = conversion(sMontantDisaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) > 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) > 0 _
And Mid(sMontantMille, 4, 1) >= 0 And Mid(sMontantMille, 5, 1) >= 0 Then
'Disaines (Left(sMontantMille, 1))
' Unites (Mid(sMontantMille, 2, 1))
'ConversionMille = sConversionDisaines & " " & sConversionUnites & " " & mille
sMontantMilleConversion = Left(sMontantMille, 2)
sConversionMille = conversion(sMontantMilleConversion)
ConversionMille = sConversionMille & " " & mille
sMontantCentaines = Right(sMontantMille, 3)
sConversionFunction = conversion(sMontantCentaines)
ConversionMille = ConversionMille & " " & sConversionFunction
End If
End Select
End Function
Private Function ConversionCentMille(sMontantCentMille As String)
Dim sConversionCentMille As String
Dim iLengthCentMille As Integer
iLengthCentMille = Len(sMontantCentMille)
If iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) > 0 Then
If Left(sMontantCentMille, 1) = 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = cent
sConversionCentMille = ConversionMille(Right(sMontantCentMille, 5))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
Else
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent
sConversionCentMille = ConversionMille(Right(sMontantCentMille, 5))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
End If
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Left(sMontantCentMille, 1) = 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = cent
sConversionCentMille = ConversionMille(Right(sMontantCentMille, 4))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Mid(sMontantCentMille, 3, 1) = 0 And _
Mid(sMontantCentMille, 4, 1) = 0 And Mid(sMontantCentMille, 5, 1) = 0 And _
Mid(sMontantCentMille, 6, 1) = 0 And Left(sMontantCentMille, 1) > 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent & " " & mille
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Mid(sMontantCentMille, 3, 1) = 0 And _
Mid(sMontantCentMille, 4, 1) = 0 And Mid(sMontantCentMille, 5, 1) = 0 And Left(sMontantCentMille, 1) > 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent & " " & mille
sConversionCentMille = conversion(Right(sMontantCentMille, 1))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Mid(sMontantCentMille, 3, 1) = 0 And _
Mid(sMontantCentMille, 4, 1) = 0 And Left(sMontantCentMille, 1) > 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent & " " & mille
sConversionCentMille = conversion(Right(sMontantCentMille, 2))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Mid(sMontantCentMille, 3, 1) = 0 And _
Left(sMontantCentMille, 1) > 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent & " " & mille
sConversionCentMille = conversion(Right(sMontantCentMille, 3))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Left(sMontantCentMille, 1) > 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent
sConversionCentMille = ConversionMille(Right(sMontantCentMille, 4))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
End If
End Function
Public Function ConversionDecimale(sMontantDecimale As String)
Dim sMontantEntier As String, sVirgule As String, sDecimale As String
Dim iLengthMontantEntier As Integer, iLengthDecimale As Integer
sMontantEntier = Left(sMontantDecimale, InStr(1, sMontantDecimale, ",", vbTextCompare) - 1)
'sVirgule = Mid(sMontantDecimale, Len(sMontantDecimale) - 3, 1)
sDecimale = Right(sMontantDecimale, Len(sMontantDecimale) - InStr(1, sMontantDecimale, ",", vbTextCompare))
iLengthMontantEntier = Len(sMontantEntier)
iLengthDecimale = Len(sDecimale)
If iLengthDecimale = 1 Then
Disaines (sDecimale)
'ConversionDecimale = sConversionDisaines
Select Case iLengthMontantEntier
Case Is = 1
If sMontantEntier = 0 Then
ConversionDecimale = sConversionDisaines & " " & centimes
ElseIf sMontantEntier > 0 Then
ConversionDecimale = conversion(sMontantEntier) & " " & euros & " et " & _
sConversionDisaines & " " & centimes
End If
Case Is = 2
ConversionDecimale = conversion(sMontantEntier) & " " & _
euros & " et "
Disaines (sDecimale)
ConversionDecimale = ConversionDecimale & sConversionDisaines & " " & centimes
Case Is = 3
ConversionDecimale = conversion(sMontantEntier) & " " & euros & " et "
Disaines (sDecimale)
ConversionDecimale = ConversionDecimale & sConversionDisaines & " " & centimes
Case Is = 4
ConversionDecimale = ConversionMille(sMontantEntier) & " " & euros & " et "
Disaines (sDecimale)
ConversionDecimale = ConversionDecimale & sConversionDisaines & " " & centimes
Case Is = 5
ConversionDecimale = ConversionMille(sMontantEntier) & " " & euros & " et "
Disaines (sDecimale)
ConversionDecimale = ConversionDecimale & sConversionDisaines & " " & centimes
Case Is = 6
ConversionDecimale = ConversionCentMille(sMontantEntier) & " " & euros & " et "
Disaines (sDecimale)
ConversionDecimale = ConversionDecimale & sConversionDisaines & " " & centimes
End Select
ElseIf iLengthDecimale = 2 Then
Select Case iLengthMontantEntier
Case Is = 1
If sMontantEntier = 0 Then
If Left(sDecimale, 1) = 0 Then
Unites (Right(sDecimale, 1))
ConversionDecimale = sConversionUnites & " " & centimes
Else
ConversionDecimale = conversion(sDecimale) & " " & centimes
End If
ElseIf sMontantEntier > 0 And Left(sDecimale, 1) = 0 Then
Unites (Right(sDecimale, 1))
ConversionDecimale = conversion(sMontantEntier) & " " & euros & " et " & _
conversion(Right(sDecimale, 1)) & " " & centimes
ElseIf sMontantEntier > 0 Then
ConversionDecimale = conversion(sMontantEntier) & " " & euros & " et " & _
conversion(sDecimale) & " " & centimes
End If
Case Is = 2
If Left(sDecimale, 1) = 0 Then
ConversionDecimale = conversion(sMontantEntier) & " " & _
euros & " et " & conversion(Right(sDecimale, 1)) & " " & centimes
Else
ConversionDecimale = conversion(sMontantEntier) & " " & _
euros & " et " & conversion(sDecimale) & " " & centimes
End If
Case Is = 3
'ConversionDecimale = conversion(sMontantEntier) & " " & euros & " et " & _
'conversion(sDecimale) & " " & centimes
If Left(sDecimale, 1) = 0 Then
ConversionDecimale = conversion(sMontantEntier) & " " & _
euros & " et " & conversion(Right(sDecimale, 1)) & " " & centimes
Else
ConversionDecimale = conversion(sMontantEntier) & " " & _
euros & " et " & conversion(sDecimale) & " " & centimes
End If
Case Is = 4
'ConversionDecimale = ConversionMille(sMontantEntier) & " " & euros & " et " & _
'conversion(sDecimale) & " " & centimes
If Left(sDecimale, 1) = 0 Then
ConversionDecimale = ConversionMille(sMontantEntier) & " " & _
euros & " et " & conversion(Right(sDecimale, 1)) & " " & centimes
Else
ConversionDecimale = ConversionMille(sMontantEntier) & " " & _
euros & " et " & conversion(sDecimale) & " " & centimes
End If
Case Is = 5
'ConversionDecimale = ConversionMille(sMontantEntier) & " " & euros & " et " & _
'conversion(sDecimale) & " " & centimes
If Left(sDecimale, 1) = 0 Then
ConversionDecimale = ConversionMille(sMontantEntier) & " " & _
euros & " et " & conversion(Right(sDecimale, 1)) & " " & centimes
Else
ConversionDecimale = ConversionMille(sMontantEntier) & " " & _
euros & " et " & conversion(sDecimale) & " " & centimes
End If
Case Is = 6
'ConversionDecimale = ConversionCentMille(sMontantEntier) & " " & euros & " et " & _
'conversion(sDecimale) & " " & centimes
If Left(sDecimale, 1) = 0 Then
ConversionDecimale = ConversionCentMille(sMontantEntier) & " " & _
euros & " et " & conversion(Right(sDecimale, 1)) & " " & centimes
Else
ConversionDecimale = ConversionCentMille(sMontantEntier) & " " & _
euros & " et " & conversion(sDecimale) & " " & centimes
End If
End Select
End If
End Function
Public Function ConversionNormale(sMontantNormal As String)
Dim iLengthMontantNormal As Integer
iLengthMontantNormal = Len(sMontantNormal)
Select Case iLengthMontantNormal
Case Is = 0
ConversionNormale = ""
Case 1 To 3
ConversionNormale = conversion(sMontantNormal) & " " & euros
Case Is <= 5
ConversionNormale = ConversionMille(sMontantNormal) & " " & euros
Case Is = 6
ConversionNormale = ConversionCentMille(sMontantNormal) & " " & euros
End Select
End Function
==============================================================
A+
J'ai crée 2 fonctions dans VBA :
ConversionNormale
ConversionDecimale
qui font la conversion des chiffres en lettres de façon suivante
ConversionNormale de 1 à 999.999
ConversionDecimale de 0,01 à 999.999,99
euro(s) et ajouté à la fin
Le code est assez long ( c'était mon début en VBA et dans la programmation) et je n'ai plus travaillé dessus. Peut-être tu vas trouver quelque chose plus simple.
Voilà le code:
======================================================
Option Explicit
Const cent = "cent"
Const cents = "cents"
Const mille = "mille"
Const euro = "euro"
Const euros = "euros"
Const centimes = "centimes"
Const zero = "zero"
Dim sConversionUnites As String
Dim sConversionDisaines As String
Dim sConversionCentaines As String
Dim sConversionApresUnites As String
Dim sMontant As String
Dim sMontantMille As String
Dim sMontantCentMille As String
Dim sDecimale As String
Public Sub Unites(sUnites As String)
Select Case sUnites
Case Is = 1
sConversionUnites = "un"
Case Is = 2
sConversionUnites = "deux"
Case Is = 3
sConversionUnites = "trois"
Case Is = 4
sConversionUnites = "quatre"
Case Is = 5
sConversionUnites = "cinq"
Case Is = 6
sConversionUnites = "six"
Case Is = 7
sConversionUnites = "sept"
Case Is = 8
sConversionUnites = "huit"
Case Is = 9
sConversionUnites = "neuf"
End Select
End Sub
Public Sub Disaines(sDisaines As String)
' Dim iLengthDisaines
' iLengthDisaines = 2
'iLengthDisaines = Len(sDisaines)
Select Case sDisaines
Case Is = 1
sConversionDisaines = "dix"
Case Is = 2
sConversionDisaines = "vingt"
Case Is = 3
sConversionDisaines = "trente"
Case Is = 4
sConversionDisaines = "quarante"
Case Is = 5
sConversionDisaines = "cinquante"
Case Is = 6
sConversionDisaines = "soixante"
Case Is = 7
sConversionDisaines = "soixante-dix"
Case Is = 8
sConversionDisaines = "quatre-vingt"
Case Is = 9
sConversionDisaines = "quatre-vingt-dix"
End Select
End Sub
Public Sub ApresUnites(sApresUnites As String)
Select Case sApresUnites
Case Is = 11
sConversionApresUnites = "onze"
Case Is = 12
sConversionApresUnites = "douze"
Case Is = 13
sConversionApresUnites = "treize"
Case Is = 14
sConversionApresUnites = "quatorze"
Case Is = 15
sConversionApresUnites = "quinze"
Case Is = 16
sConversionApresUnites = "seize"
Case Is = 17
sConversionApresUnites = "dix-sept"
Case Is = 18
sConversionApresUnites = "dix-huit"
Case Is = 19
sConversionApresUnites = "dix-neuf"
End Select
End Sub
Private Function conversion(sMontant As String)
Dim iLength As Integer
iLength = Len(sMontant)
Select Case iLength
Case Is = 1
Unites (sMontant)
conversion = sConversionUnites
Case Is = 2
If Right(sMontant, 1) = 0 Then
Disaines (Left(sMontant, 1))
conversion = sConversionDisaines
ElseIf Left(sMontant, 1) = 1 And Right(sMontant, 1) <> 0 Then
ApresUnites (sMontant)
conversion = sConversionApresUnites
ElseIf Left(sMontant, 1) <> 0 And Left(sMontant, 1) <= 6 And Right(sMontant, 1) <> 0 Then
Unites (Right(sMontant, 1))
Disaines (Left(sMontant, 1))
conversion = sConversionDisaines & " " & sConversionUnites
ElseIf Left(sMontant, 1) <> 0 And Left(sMontant, 1) = 7 And Right(sMontant, 1) <> 0 Then
Disaines (Left(sMontant, 1))
ApresUnites ("1" & Right(sMontant, 1))
conversion = Left(sConversionDisaines, 8) & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) <> 0 And Left(sMontant, 1) = 8 And Right(sMontant, 1) <> 0 Then
Unites (Right(sMontant, 1))
Disaines (Left(sMontant, 1))
conversion = sConversionDisaines & " " & sConversionUnites
ElseIf Left(sMontant, 1) <> 0 And Left(sMontant, 1) = 9 And Right(sMontant, 1) <> 0 Then
Disaines (Left(sMontant, 1))
ApresUnites ("1" & Right(sMontant, 1))
conversion = Left(sConversionDisaines, 12) & " " & sConversionApresUnites
End If
Case Is = 3
If Left(sMontant, 1) = 1 And Right(sMontant, 2) = 0 Then
conversion = cent
ElseIf Left(sMontant, 1) > 1 And Right(sMontant, 2) = 0 And Right(sMontant, 1) = 0 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent & "s"
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) = 0 Then
Unites (Right(sMontant, 1))
conversion = cent & " " & sConversionUnites
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) = 1 And Right(sMontant, 1) <> 0 Then
ApresUnites (Mid(sMontant, 2, 2))
conversion = cent & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) <> 1 And Right(sMontant, 1) = 0 Then
Unites (Left(sMontant, 1))
Disaines (Mid(sMontant, 2, 1))
conversion = sConversionUnites & " " & cent & " " & sConversionDisaines
ElseIf Left(sMontant, 1) = 1 And Right(sMontant, 1) = 0 Then
'Unites (Left(sMontant, 1))
Disaines (Mid(sMontant, 2, 1))
conversion = cent & " " & sConversionDisaines
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) <= 6 Then
Disaines (Mid(sMontant, 2, 1))
Unites (Right(sMontant, 1))
conversion = cent & " " & sConversionDisaines & " " & sConversionUnites
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) = 7 Then
Disaines (Mid(sMontant, 2, 1))
ApresUnites ("1" & Right(sMontant, 1))
'Unites (Right(sMontant, 1))
conversion = cent & " " & Left(sConversionDisaines, 8) & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) = 8 Then
Disaines (Mid(sMontant, 2, 1))
Unites (Right(sMontant, 1))
conversion = cent & " " & sConversionDisaines & " " & sConversionUnites
ElseIf Left(sMontant, 1) = 1 And Mid(sMontant, 2, 1) = 9 Then
Disaines (Mid(sMontant, 2, 1))
ApresUnites ("1" & Right(sMontant, 1))
'Unites (Right(sMontant, 1))
conversion = cent & " " & Left(sConversionDisaines, 12) & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) = 0 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
Unites (Right(sMontant, 1))
conversion = conversion & " " & sConversionUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) = 1 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
ApresUnites ("1" & Right(sMontant, 1))
conversion = conversion & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) <= 6 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
Disaines (Mid(sMontant, 2, 1))
conversion = conversion & " " & sConversionDisaines
Unites (Right(sMontant, 1))
conversion = conversion & " " & sConversionUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) = 7 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
Disaines (Mid(sMontant, 2, 1))
ApresUnites ("1" & Right(sMontant, 1))
conversion = conversion & " " & Left(sConversionDisaines, 8) & " " & sConversionApresUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) = 8 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
Disaines (Mid(sMontant, 2, 1))
Unites (Right(sMontant, 1))
conversion = conversion & " " & sConversionDisaines & " " & sConversionUnites
ElseIf Left(sMontant, 1) > 1 And Mid(sMontant, 2, 1) = 9 Then
Unites (Left(sMontant, 1))
conversion = sConversionUnites & " " & cent
Disaines (Mid(sMontant, 2, 1))
ApresUnites ("1" & Right(sMontant, 1))
conversion = conversion & " " & Left(sConversionDisaines, 12) & " " & sConversionApresUnites
End If
End Select
End Function
Private Function ConversionMille(sMontantMille)
Dim sMontantUnites As String, sMontantDisaines As String, sMontantCentaines As String
Dim sMontantMilleConversion As String
Dim iLengthMille As Integer
Dim sConversionFunction As String
iLengthMille = Len(sMontantMille)
Dim sConversionMille As String
Select Case iLengthMille
Case Is = 4
If Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 Then
Unites (Left(sMontantMille, 1))
ConversionMille = sConversionUnites & " " & mille
ElseIf Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) = 0 Then
sMontantUnites = Right(sMontantMille, 1)
Unites (Left(sMontantMille, 1))
ConversionMille = sConversionUnites & " " & mille
sConversionFunction = conversion(sMontantUnites)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) > 0 Then
sMontantDisaines = Right(sMontantMille, 2)
Unites (Left(sMontantMille, 1))
ConversionMille = ""
ConversionMille = sConversionUnites & " " & mille
sConversionFunction = conversion(sMontantDisaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Mid(sMontantMille, 2, 1) > 0 Then
sMontantCentaines = Right(sMontantMille, 3)
Unites (Left(sMontantMille, 1))
ConversionMille = ""
ConversionMille = sConversionUnites & " " & mille
sConversionFunction = conversion(sMontantCentaines)
ConversionMille = ConversionMille & " " & sConversionFunction
End If
Case Is = 5
If Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 And Mid(sMontantMille, 5, 1) = 0 Then
Disaines (Left(sMontantMille, 1))
ConversionMille = sConversionDisaines & " " & mille
ElseIf Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 And Mid(sMontantMille, 5, 1) = 0 Then
sMontantMilleConversion = Left(sMontantMille, 2)
sConversionMille = conversion(sMontantMilleConversion)
ConversionMille = sConversionMille & " " & mille
ElseIf Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 And Mid(sMontantMille, 5, 1) > 0 Then
Disaines (Left(sMontantMille, 1))
ConversionMille = sConversionDisaines & " " & mille
sMontantUnites = Right(sMontantMille, 1)
sConversionFunction = conversion(sMontantUnites)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) > 0 And Mid(sMontantMille, 5, 1) >= 0 Then
Disaines (Left(sMontantMille, 1))
ConversionMille = sConversionDisaines & " " & mille
sMontantDisaines = Right(sMontantMille, 2)
sConversionFunction = conversion(sMontantDisaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Mid(sMontantMille, 2, 1) = 0 And Mid(sMontantMille, 3, 1) > 0 _
And Mid(sMontantMille, 4, 1) >= 0 And Mid(sMontantMille, 5, 1) >= 0 Then
Disaines (Left(sMontantMille, 1))
ConversionMille = sConversionDisaines & " " & mille
sMontantCentaines = Right(sMontantMille, 3)
sConversionFunction = conversion(sMontantCentaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) = 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 And Mid(sMontantMille, 5, 1) > 0 Then
ApresUnites ("1" & Mid(sMontantMille, 2, 1))
ConversionMille = sConversionApresUnites & " " & mille
sMontantUnites = (Right(sMontantMille, 1))
sConversionFunction = conversion(sMontantUnites)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) = 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) > 0 And Mid(sMontantMille, 5, 1) >= 0 Then
ApresUnites ("1" & Mid(sMontantMille, 2, 1))
ConversionMille = sConversionApresUnites & " " & mille
sMontantDisaines = (Right(sMontantMille, 2))
sConversionFunction = conversion(sMontantDisaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) = 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) > 0 _
And Mid(sMontantMille, 4, 1) >= 0 And Mid(sMontantMille, 5, 1) >= 0 Then
ApresUnites ("1" & Mid(sMontantMille, 2, 1))
ConversionMille = sConversionApresUnites & " " & mille
sMontantCentaines = Right(sMontantMille, 3)
sConversionFunction = conversion(sMontantCentaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) > 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) = 0 And Mid(sMontantMille, 5, 1) > 0 Then
'Disaines (Left(sMontantMille, 1))
'Unites (Mid(sMontantMille, 2, 1))
sMontantMilleConversion = Left(sMontantMille, 2)
sConversionMille = conversion(sMontantMilleConversion)
ConversionMille = sConversionMille & " " & mille
sMontantUnites = Right(sMontantMille, 1)
sConversionFunction = conversion(sMontantUnites)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) > 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) = 0 _
And Mid(sMontantMille, 4, 1) > 0 And Mid(sMontantMille, 5, 1) >= 0 Then
'Disaines (Left(sMontantMille, 1))
'Unites (Mid(sMontantMille, 2, 1))
'ConversionMille = sConversionDisaines & " " & sConversionUnites & " " & mille
sMontantMilleConversion = Left(sMontantMille, 2)
sConversionMille = conversion(sMontantMilleConversion)
ConversionMille = sConversionMille & " " & mille
sMontantDisaines = Right(sMontantMille, 2)
sConversionFunction = conversion(sMontantDisaines)
ConversionMille = ConversionMille & " " & sConversionFunction
ElseIf Left(sMontantMille, 1) > 1 And Mid(sMontantMille, 2, 1) > 0 And Mid(sMontantMille, 3, 1) > 0 _
And Mid(sMontantMille, 4, 1) >= 0 And Mid(sMontantMille, 5, 1) >= 0 Then
'Disaines (Left(sMontantMille, 1))
' Unites (Mid(sMontantMille, 2, 1))
'ConversionMille = sConversionDisaines & " " & sConversionUnites & " " & mille
sMontantMilleConversion = Left(sMontantMille, 2)
sConversionMille = conversion(sMontantMilleConversion)
ConversionMille = sConversionMille & " " & mille
sMontantCentaines = Right(sMontantMille, 3)
sConversionFunction = conversion(sMontantCentaines)
ConversionMille = ConversionMille & " " & sConversionFunction
End If
End Select
End Function
Private Function ConversionCentMille(sMontantCentMille As String)
Dim sConversionCentMille As String
Dim iLengthCentMille As Integer
iLengthCentMille = Len(sMontantCentMille)
If iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) > 0 Then
If Left(sMontantCentMille, 1) = 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = cent
sConversionCentMille = ConversionMille(Right(sMontantCentMille, 5))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
Else
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent
sConversionCentMille = ConversionMille(Right(sMontantCentMille, 5))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
End If
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Left(sMontantCentMille, 1) = 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = cent
sConversionCentMille = ConversionMille(Right(sMontantCentMille, 4))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Mid(sMontantCentMille, 3, 1) = 0 And _
Mid(sMontantCentMille, 4, 1) = 0 And Mid(sMontantCentMille, 5, 1) = 0 And _
Mid(sMontantCentMille, 6, 1) = 0 And Left(sMontantCentMille, 1) > 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent & " " & mille
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Mid(sMontantCentMille, 3, 1) = 0 And _
Mid(sMontantCentMille, 4, 1) = 0 And Mid(sMontantCentMille, 5, 1) = 0 And Left(sMontantCentMille, 1) > 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent & " " & mille
sConversionCentMille = conversion(Right(sMontantCentMille, 1))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Mid(sMontantCentMille, 3, 1) = 0 And _
Mid(sMontantCentMille, 4, 1) = 0 And Left(sMontantCentMille, 1) > 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent & " " & mille
sConversionCentMille = conversion(Right(sMontantCentMille, 2))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Mid(sMontantCentMille, 3, 1) = 0 And _
Left(sMontantCentMille, 1) > 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent & " " & mille
sConversionCentMille = conversion(Right(sMontantCentMille, 3))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
ElseIf iLengthCentMille = 6 And Mid(sMontantCentMille, 2, 1) = 0 And Left(sMontantCentMille, 1) > 1 Then
Unites (Left(sMontantCentMille, 1))
ConversionCentMille = sConversionUnites & " " & cent
sConversionCentMille = ConversionMille(Right(sMontantCentMille, 4))
ConversionCentMille = ConversionCentMille & " " & sConversionCentMille
End If
End Function
Public Function ConversionDecimale(sMontantDecimale As String)
Dim sMontantEntier As String, sVirgule As String, sDecimale As String
Dim iLengthMontantEntier As Integer, iLengthDecimale As Integer
sMontantEntier = Left(sMontantDecimale, InStr(1, sMontantDecimale, ",", vbTextCompare) - 1)
'sVirgule = Mid(sMontantDecimale, Len(sMontantDecimale) - 3, 1)
sDecimale = Right(sMontantDecimale, Len(sMontantDecimale) - InStr(1, sMontantDecimale, ",", vbTextCompare))
iLengthMontantEntier = Len(sMontantEntier)
iLengthDecimale = Len(sDecimale)
If iLengthDecimale = 1 Then
Disaines (sDecimale)
'ConversionDecimale = sConversionDisaines
Select Case iLengthMontantEntier
Case Is = 1
If sMontantEntier = 0 Then
ConversionDecimale = sConversionDisaines & " " & centimes
ElseIf sMontantEntier > 0 Then
ConversionDecimale = conversion(sMontantEntier) & " " & euros & " et " & _
sConversionDisaines & " " & centimes
End If
Case Is = 2
ConversionDecimale = conversion(sMontantEntier) & " " & _
euros & " et "
Disaines (sDecimale)
ConversionDecimale = ConversionDecimale & sConversionDisaines & " " & centimes
Case Is = 3
ConversionDecimale = conversion(sMontantEntier) & " " & euros & " et "
Disaines (sDecimale)
ConversionDecimale = ConversionDecimale & sConversionDisaines & " " & centimes
Case Is = 4
ConversionDecimale = ConversionMille(sMontantEntier) & " " & euros & " et "
Disaines (sDecimale)
ConversionDecimale = ConversionDecimale & sConversionDisaines & " " & centimes
Case Is = 5
ConversionDecimale = ConversionMille(sMontantEntier) & " " & euros & " et "
Disaines (sDecimale)
ConversionDecimale = ConversionDecimale & sConversionDisaines & " " & centimes
Case Is = 6
ConversionDecimale = ConversionCentMille(sMontantEntier) & " " & euros & " et "
Disaines (sDecimale)
ConversionDecimale = ConversionDecimale & sConversionDisaines & " " & centimes
End Select
ElseIf iLengthDecimale = 2 Then
Select Case iLengthMontantEntier
Case Is = 1
If sMontantEntier = 0 Then
If Left(sDecimale, 1) = 0 Then
Unites (Right(sDecimale, 1))
ConversionDecimale = sConversionUnites & " " & centimes
Else
ConversionDecimale = conversion(sDecimale) & " " & centimes
End If
ElseIf sMontantEntier > 0 And Left(sDecimale, 1) = 0 Then
Unites (Right(sDecimale, 1))
ConversionDecimale = conversion(sMontantEntier) & " " & euros & " et " & _
conversion(Right(sDecimale, 1)) & " " & centimes
ElseIf sMontantEntier > 0 Then
ConversionDecimale = conversion(sMontantEntier) & " " & euros & " et " & _
conversion(sDecimale) & " " & centimes
End If
Case Is = 2
If Left(sDecimale, 1) = 0 Then
ConversionDecimale = conversion(sMontantEntier) & " " & _
euros & " et " & conversion(Right(sDecimale, 1)) & " " & centimes
Else
ConversionDecimale = conversion(sMontantEntier) & " " & _
euros & " et " & conversion(sDecimale) & " " & centimes
End If
Case Is = 3
'ConversionDecimale = conversion(sMontantEntier) & " " & euros & " et " & _
'conversion(sDecimale) & " " & centimes
If Left(sDecimale, 1) = 0 Then
ConversionDecimale = conversion(sMontantEntier) & " " & _
euros & " et " & conversion(Right(sDecimale, 1)) & " " & centimes
Else
ConversionDecimale = conversion(sMontantEntier) & " " & _
euros & " et " & conversion(sDecimale) & " " & centimes
End If
Case Is = 4
'ConversionDecimale = ConversionMille(sMontantEntier) & " " & euros & " et " & _
'conversion(sDecimale) & " " & centimes
If Left(sDecimale, 1) = 0 Then
ConversionDecimale = ConversionMille(sMontantEntier) & " " & _
euros & " et " & conversion(Right(sDecimale, 1)) & " " & centimes
Else
ConversionDecimale = ConversionMille(sMontantEntier) & " " & _
euros & " et " & conversion(sDecimale) & " " & centimes
End If
Case Is = 5
'ConversionDecimale = ConversionMille(sMontantEntier) & " " & euros & " et " & _
'conversion(sDecimale) & " " & centimes
If Left(sDecimale, 1) = 0 Then
ConversionDecimale = ConversionMille(sMontantEntier) & " " & _
euros & " et " & conversion(Right(sDecimale, 1)) & " " & centimes
Else
ConversionDecimale = ConversionMille(sMontantEntier) & " " & _
euros & " et " & conversion(sDecimale) & " " & centimes
End If
Case Is = 6
'ConversionDecimale = ConversionCentMille(sMontantEntier) & " " & euros & " et " & _
'conversion(sDecimale) & " " & centimes
If Left(sDecimale, 1) = 0 Then
ConversionDecimale = ConversionCentMille(sMontantEntier) & " " & _
euros & " et " & conversion(Right(sDecimale, 1)) & " " & centimes
Else
ConversionDecimale = ConversionCentMille(sMontantEntier) & " " & _
euros & " et " & conversion(sDecimale) & " " & centimes
End If
End Select
End If
End Function
Public Function ConversionNormale(sMontantNormal As String)
Dim iLengthMontantNormal As Integer
iLengthMontantNormal = Len(sMontantNormal)
Select Case iLengthMontantNormal
Case Is = 0
ConversionNormale = ""
Case 1 To 3
ConversionNormale = conversion(sMontantNormal) & " " & euros
Case Is <= 5
ConversionNormale = ConversionMille(sMontantNormal) & " " & euros
Case Is = 6
ConversionNormale = ConversionCentMille(sMontantNormal) & " " & euros
End Select
End Function
==============================================================
A+
Bonjour,
Je propose également la fonction ci-dessous :
Elle admet deux paramètres supplémentaires :
- choix de la monnaie (euro par défaut)
- résultat en majuscules ou minuscules (majuscules par défaut)
Si A1 contient 23.56,
CHIFLETR(A1) : VINGT-TROIS EUROS ET CINQUANTE-SIX CENTIMES
CHIFLETR(A1;"dollar") : VINGT-TROIS DOLLARS ET CINQUANTE-SIX CENTIMES
CHIFLETR(A1;;FAUX) : vingt-trois euros et cinquante-six centimes
Voici le code :
Je propose également la fonction ci-dessous :
Elle admet deux paramètres supplémentaires :
- choix de la monnaie (euro par défaut)
- résultat en majuscules ou minuscules (majuscules par défaut)
Si A1 contient 23.56,
CHIFLETR(A1) : VINGT-TROIS EUROS ET CINQUANTE-SIX CENTIMES
CHIFLETR(A1;"dollar") : VINGT-TROIS DOLLARS ET CINQUANTE-SIX CENTIMES
CHIFLETR(A1;;FAUX) : vingt-trois euros et cinquante-six centimes
Voici le code :
Function CHIFLETR(Nombre, Optional Monnaie As String = "euro", Optional Maju As Boolean = True)
' CETTE FONCTION TRADUIT EN LETTRES UN NOMBRE POSITIF INFERIEUR
' AU MILLIARD, AVEC DEUX DECIMALES
' Elle fait appel à la macro "Codage" ci-dessous,
' qui en est indissociable
Dim TrCent As Boolean
Dim CenTouRon As Boolean
Dim Entiers As Long
Dim Centimes As Long
Dim TrUnités As Integer
Dim TrMilles As Integer
Dim TrMlions As Integer
Dim QuUnités As Long
Dim QuMilles As Long
Dim QuMlions As Long
Dim Lib As String
If Nombre > 999999999.99 Then
CHIFLETR = ""
Exit Function
End If
Entiers = Int(Nombre)
Centimes = (Nombre - Entiers) * 100
TrUnités = Entiers Mod 1000
QuUnités = Entiers \ 1000
TrMilles = QuUnités Mod 1000
QuMilles = QuUnités \ 1000
TrMlions = QuMilles Mod 1000
QuMlions = QuMilles \ 1000
Lib = ""
CenTouRon = (Entiers Mod 100) = 0
If TrMlions <> 0 Then
Call Codage(TrMlions, Lib, CenTouRon, False)
If TrMlions = 1 Then
Lib = Lib & "million "
Else
Lib = Lib & "millions "
End If
End If
If TrMilles <> 0 Then
If TrMilles <> 1 Then
Call Codage(TrMilles, Lib, CenTouRon, False)
End If
Lib = Lib & "mille "
End If
If TrUnités <> 0 Then
Call Codage(TrUnités, Lib, CenTouRon, True)
End If
If Entiers >= 2 Then
Lib = Lib & Monnaie & "s "
ElseIf Entiers >= 1 Then
Lib = Lib & Monnaie & " "
Else
Lib = "zéro " & Monnaie & " "
End If
If Centimes <> 0 Then
Lib = Lib & "et "
Call Codage(Centimes, Lib, CenTouRon, False)
If Centimes = 1 Then
Lib = Lib & "centime "
Else
Lib = Lib & "centimes "
End If
End If
CHIFLETR = Lib
If Maju Then CHIFLETR = UCase(CHIFLETR)
End Function
Sub Codage(Tranche, Lib, CenTouRon, TrCent)
' CETTE MACRO EST INDISSOCIABLE DE LA FONCTION CHIFLETR
' CI-DESSUS, ET TRADUIT EN LETTRES UNE TRANCHE DE 3 CHIFFRES
Dim C As Byte, D As Byte, D1 As Byte, U As Byte
Dim T00 As Variant
Dim Tb0 As Variant, Tb1 As Variant, Tb2 As Variant, Tb3 As Variant, Tb4 As Variant
Dim Tb5 As Variant, Tb6 As Variant, Tb7 As Variant, Tb8 As Variant, Tb9 As Variant
T00 = Array("", "", "deux ", "trois ", "quatre ", "cinq ", "six ", "sept ", "huit ", "neuf ")
Tb0 = Array("", "un ", "deux ", "trois ", "quatre ", "cinq ", "six ", "sept ", "huit ", "neuf ")
Tb1 = Array("dix ", "onze ", "douze ", "treize ", "quatorze ", "quinze ", "seize ", "dix-sept ", "dix-huit ", "dix-neuf ")
Tb2 = Array("vingt ", "vingt-et-un ", "vingt-deux ", "vingt-trois ", "vingt-quatre ", "vingt-cinq ", "vingt-six ", "vingt-sept ", "vingt-huit ", "vingt-neuf ")
Tb3 = Array("trente ", "trente-et-un ", "trente-deux ", "trente-trois ", "trente-quatre ", "trente-cinq ", "trente-six ", "trente-sept ", "trente-huit ", "trente-neuf ")
Tb4 = Array("quarante ", "quarante-et-un ", "quarante-deux ", "quarante-trois ", "quarante-quatre ", "quarante-cinq ", "quarante-six ", "quarante-sept ", "quarante-huit ", "quarante-neuf ")
Tb5 = Array("cinquante ", "cinquante-et-un ", "cinquante-deux ", "cinquante-trois ", "cinquante-quatre ", "cinquante-cinq ", "cinquante-six ", "cinquante-sept ", "cinquante-huit ", "cinquante-neuf ")
Tb6 = Array("soixante ", "soixante-et-un ", "soixante-deux ", "soixante-trois ", "soixante-quatre ", "soixante-cinq ", "soixante-six ", "soixante-sept ", "soixante-huit ", "soixante-neuf ")
Tb7 = Array("soixante-dix ", "soixante-et-onze ", "soixante-douze ", "soixante-treize ", "soixante-quatorze ", "soixante-quinze ", "soixante-seize ", "soixante-dix-sept ", "soixante-dix-huit ", "soixante-dix-neuf ")
Tb8 = Array("quatre-vingt ", "quatre-vingt-un ", "quatre-vingt-deux ", "quatre-vingt-trois ", "quatre-vingt-quatre ", "quatre-vingt-cinq ", "quatre-vingt-six ", "quatre-vingt-sept ", "quatre-vingt-huit ", "quatre-vingt-neuf ")
Tb9 = Array("quatre-vingt-dix ", "quatre-vingt-onze ", "quatre-vingt-douze ", "quatre-vingt-treize ", "quatre-vingt-quatorze ", "quatre-vingt-quinze ", "quatre-vingt-seize ", "quatre-vingt-dix-sept ", "quatre-vingt-dix-huit ", "quatre-vingt-dix-neuf ")
C = Tranche \ 100
If C <> 0 Then
If TrCent And CenTouRon And C <> 1 Then
Lib = Lib & T00(C) & "cents "
Else
Lib = Lib & T00(C) & "cent "
End If
End If
D1 = Tranche Mod 100
D = D1 \ 10
U = Tranche Mod 10
Select Case D
Case 0: Lib = Lib & Tb0(U)
Case 1: Lib = Lib & Tb1(U)
Case 2: Lib = Lib & Tb2(U)
Case 3: Lib = Lib & Tb3(U)
Case 4: Lib = Lib & Tb4(U)
Case 5: Lib = Lib & Tb5(U)
Case 6: Lib = Lib & Tb6(U)
Case 7: Lib = Lib & Tb7(U)
Case 8: Lib = Lib & Tb8(U)
Case 9: Lib = Lib & Tb9(U)
End Select
End Sub