Conversion nombre réel

bessouma06 Messages postés 76 Date d'inscription jeudi 9 décembre 2010 Statut Membre Dernière intervention 19 décembre 2010 - 7 juil. 2008 à 10:59
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 7 juil. 2008 à 11:28
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




 

1 réponse

jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 juil. 2008 à 11:28
Bonjour,

travaille sur cette idée simple :
1) séparation de la partie entière (appelons-la E) et de la partie décimale (appelons-la D)
2) conversion en lettres de la partie entière E ===> appelons le résultat RE
3) conversionen lettre de la partie décimale D (qui est un entier également) ===>> appelons ce résultat RD
4) ma_chaine = RE & " et " RD & " millièmes"

Tu peux même, selon la longueur de la partie décimale, modifier millèmes en centièmes, dizaines etc .....
genre :If len(D) 2 then ma_fraction "centièmes"
ma_chaine = RE & " et " RD & " " & ma_fraction

A toi de jouer, hein...
0