bonjour à tous
j'ai encore le même probléme j'ai trouvé ce code sur ce mêm forum qui peuttraiter des nombres réels mais le probléme c qu'il traite seulement deux chiffres aprés la virgule.
ce que je cherche uncode qui traite un nombre réel avec trois chiffres aprés la virgule
exp: 235.989
merci d'avance
voilà le code
-********************
Public Function MontantEnLettre(Montant) As String
' Objectif: convertir des montants en lettre selon les règles orthographiques en vigueur
' au maroc . Par exemple pour un chèque bancaire
' Version valable pour un maximum de 999'999'999.99
Dim varnum, varnumD, varnumD1, varnumU, varlet, résultat, bytcent As Byte
'varnum : pour stocker les parties du nombre que l'on va découper
'varlet : pour stocker la conversion en lettres d'une partie du nombre
'varnumD: pour stocker la partie dizaine d'un nombre à 2 chiffres
'varnumU: pour stocker la partie unité d'un nombre à 2 chiffres
'résultat: pour stocker les résultats intermédiaires des différentes étapes
Static chiffre(1 To 19) '*** tableau contenant le nom des 19 premiers
'nombres en lettres
chiffre(1) = " un"
chiffre(2) = " deux"
chiffre(3) = " trois"
chiffre(4) = " quatre"
chiffre(5) = " cinq"
chiffre(6) = " six"
chiffre(7) = " sept"
chiffre(8) = " huit"
chiffre(9) = " neuf"
chiffre(10) = " dix"
chiffre(11) = " onze"
chiffre(12) = " douze"
chiffre(13) = " treize"
chiffre(14) = " quatorze"
chiffre(15) = " quinze"
chiffre(16) = " seize"
chiffre(17) = " dix-sept"
chiffre(18) = " dix-huit"
chiffre(19) = " dix-neuf"
Static dizaine(1 To 9) '*** tableau contenant les noms des dizaines
dizaine(1) = " dix"
dizaine(2) = " vingt"
dizaine(3) = " trente"
dizaine(4) = " quarante"
dizaine(5) = " cinquante"
dizaine(6) = " soixante"
dizaine(7) = " soixante"
dizaine(8) = " quatre-vingt"
dizaine(9) = " quatre-vingt"
'*** Le traitement des milliards n'est pas pris en compte
If Montant > 999999999.99 Then
MsgBox "Les milliards ne sont pas traités par ce programme @ @", vbCritical, "Conversion Montant en Lettres"
Exit Function
End If
'*** Traitement du cas zéro
If Montant >= 1 Then
résultat = ""
Else
résultat = "zéro"
GoTo FinTraitement
End If
'*** Traitement des millions
varnum = Int(Montant / 1000000)
If varnum > 0 Then
GoSub CentaineDizaine
résultat = varlet + " million"
If varlet <> "un" Then résultat = résultat + "s"
End If
'*** Traitement des milliers
varnum = Int(Montant) Mod 1000000
varnum = Int(varnum / 1000)
If varnum > 0 Then
GoSub CentaineDizaine
If varlet <> " un" Then
résultat = résultat + " " + varlet
résultat = résultat & " mille"
Else
résultat = " mille"
End If
End If
'*** Traitement des centaines et dizaines
varnum = Int(Montant) Mod 1000
If varnum > 0 Then
GoSub CentaineDizaine
résultat = résultat + " " + varlet
End If
résultat = LTrim(résultat)
varlet = Right$(résultat, 4)
'*** Traitement du "s" final pour mille, cent et du "de" pour million
Select Case varlet
Case "ille"
If Montant <> 1000 Then résultat = résultat + "s"
Case "cent"
If bytcent <> 1 Then résultat = résultat + "s"
Case "lion", "ions"
résultat = résultat + " de"
End Select
FinTraitement:
'*** Indication du terme devise
résultat = résultat + " Dinar"
If Montant >= 2 Then résultat = résultat + "s"
'*** Traitement des centimes
varnum = Int((Montant - Int(Montant)) * 100 + 0.5) '*** On additionne 0,5 afin de compenser
'*** les erreurs de calcul dues aux arrondis
If varnum > 0 Then
GoSub CentaineDizaine
résultat = résultat + " et " + varlet + " centime"
If varnum > 1 Then résultat = résultat + "s"
End If
'*** Conversion 1ère lettre en majuscule
résultat = UCase(Left(résultat, 1)) + Right(résultat, Len(résultat) - 1)
'*** Renvoie du résultat de la fonction et fin de la fonction
MontantEnLettre = résultat
Exit Function
CentaineDizaine:
varlet = ""
'*** Traitement des centaines
If varnum >= 100 Then
varlet = chiffre(Int(varnum / 100))
varnum = varnum Mod 100
If varlet = " un" Then
varlet = " cent "
bytcent = 1
Else
varlet = varlet + " cent "
End If
End If
'*** Traitement des dizaines
If varnum <= 19 Then '*** Cas où la dizaine est <20
If varnum > 0 Then
varlet = varlet + chiffre(varnum)
End If
Else
varnumD = Int(varnum / 10) '*** chiffre des dizaines
varnumU = varnum Mod 10 '*** chiffre des unités
'*** génération des dizaines en lettres
varlet = varlet + dizaine(varnumD)
If varnumD = 7 Or varnumD = 9 Then
varnumD1 = varnum - (varnumD - 1) * 10
varlet = varlet + " " + chiffre(varnumD1)
End If
'*** traitement du séparateur des dizaines et unités
If varnumU = 1 Then
varlet = varlet + " et "
End If
End If
'*** génération des unités
If varnumU <> 0 Then
If varnumD = 7 Or varnumD = 9 Then
varlet = varlet
Else
varlet = varlet + chiffre(varnumU)
End If
End If
'*** Suppression des espaces à gauche et retour
varlet = RTrim(varlet)
Return
End Function