ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Montant en chiffres vers montant en lettres   



L'auteur

dridbul
Maroc Maroc
Membre Simple
# 0000002154
enregistré le 29/06/2008
62 ans
DRIDBA Omar
20100 Casablanca
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation > Conversions

Montant en chiffres vers montant en lettres
# 0000000648
ajouté le 19/10/2008 17:47:37 et modifié le 26/10/2008
consulté 9194 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0
VFP 3.0
FPW 2.6


Le téléchargement des pièces jointes est limité aux membres
Veuillez vous identifier ou vous inscrire si vous n'avez pas encore de compte ...
Description

Fonction Xbase qui convertit un montant en chiffres vers montant en lettres (français).

 

 

Code source :
*-----------------------------------
* Convertion Pmnt en lettres
* DRIDBA 29/06/93
* ------------------------------------
Param Pmnt,Pdevise,PL1,PL2,PNl,c1
* Pmnt= montant à traduire
* devise
* PL1 = logueur lignes à produir
DECLARE TU[19],TD[9]
TU[1]="UN"
TU[2]="DEUX"
TU[3]="TROIS"
TU[4]="QUATRE"
TU[5]="CINQ"
TU[6]="SIX"
TU[7]="SEPT"
TU[8]="HUIT"
TU[9]="NEUF"
TU[10]="DIX"
TU[11]="ONZE"
TU[12]="DOUZE"
TU[13]="TREIZE"
TU[14]="QUATORZE"
TU[15]="QUINZE"
TU[16]="SEIZE"
TU[17]="DIX SEPT"
TU[18]="DIX HUIT"
TU[19]="DIX NEUF"
*
TD[1]="DIX"
TD[2]="VINGT"
TD[3]="TRENTE"
TD[4]="QUARANTE"
TD[5]="CINQUANTE"
TD[6]="SOIXANTE"
TD[7]="SOIXANTE"
TD[8]="QUATRE-VINGT"
TD[9]="QUATRE-VINGT"
*
Xmnt=alltrim(Convert())
Ml_mnt=len(Xmnt)
XMnt1=spac(PL1)
Xmnt2=spac(PL2)
*
IF Ml_mnt < PL1
   Xmnt1=Xmnt+" "+repl(m.c1,PL1-Ml_mnt)
   Xmnt2=repl(m.c1,PL2)
ELSE
   IF subs(Xmnt,PL1,1)=" "
      Xmnt1=left(Xmnt,PL1)
      Ml=Ml_mnt-PL1
   ELSE
      i=PL1
      do while subs(Xmnt,i,1)# " "
         i=i-1
      enddo
      Xmnt1=subs(Xmnt,1,i-1)
      Xmnt1=XMnt1+" "+repl(m.c1,PL1-i+1)
      Ml=Ml_mnt-i
   ENDIF
   IF Ml < PL2
     Xmnt2=right(Xmnt,Ml)+" "+repl(m.c1,PL2-Ml)
   ELSE
     Xmnt2=right(Xmnt,Ml)
   ENDIF
ENDIF
Xmnt=iif(PNl=1,Xmnt1,Xmnt2)  && ligne à retourner

RETURN Xmnt
*------------------------
FUNCTION CONVERT
Priv Xmnt

Xmnt=""
DO CASE
   CASE PMNT = 0
        Xmnt="ZERO "+Pdevise+" 0 CTS"
   CASE PMNT < 1
        Xmnt=str(Pmnt*100,2)+" CTS"
   OTHER
   MILLIARDS=INT(Pmnt/1000000000)
     reste=MOD(Pmnt,1000000000)
   MILLIONS=INT(reste/1000000)
     reste=MOD(reste,1000000)
   MILLES=INT(Reste/1000)
     reste=MOD(reste,1000)
   CENTS=INT(reste/100)
     reste=MOD(reste,100)
   DIX=INT(reste)
   CTS=(reste-dix)*100
   IF Milliards > 0
      Xmnt=Milliards(Milliards)
   ENDIF
   IF Millions > 0
      Xmnt=Xmnt+Millions(Millions)
   ENDIF
   IF Milles > 0
      Xmnt=Xmnt+MILLES(Milles)
   ENDIF
   IF CENTS > 0
      Xmnt=Xmnt+CENTS(cents,dix)
   ENDIF
   IF DIX > 0
      Xmnt=Xmnt+DIX(Dix)
   ENDIF
   *SET STEP ON
   Xmnt=ALLTRIM(Xmnt)+" "+ALLTRIM(Pdevise)+" "+IIF(cts=0,"",str(cts,2)+" CTS ")
ENDCASE

RETURN Xmnt
*------------------------
FUNCTION MILLIARDS
Param Mnt
Priv Mnt,Xmnt,milles,cents,dix,unit

Xmnt=" "
IF Mnt < 20
   Xmnt=TU[mnt]+IIF(mnt=1," MILLIARD "," MILLIARDS ")
ELSE
   MILLES=INT(Mnt/1000)
   reste=MOD(Mnt,1000)
   CENTS=INT(reste/100)
   DIX=MOD(reste,100)
   IF Milles > 0
      Xmnt=MILLES(Milles)+" "
   ENDIF
   IF CENTS > 0
      Xmnt=Xmnt+CENTS(cents,dix)
   ENDIF
   IF DIX > 0
      Xmnt=Xmnt+DIX(Dix)
   ENDIF
   Xmnt=Xmnt+" MILLIARDS "
ENDIF

RETURN Xmnt
*------------------------
FUNCTION MILLIONS
Param Mnt
Priv Xmnt,milles,cents,dix,unit

Xmnt=" "
IF Mnt < 20
   Xmnt=TU[mnt]+IIF(mnt=1," MILLION "," MILLIONS ")
ELSE
   CENTS=INT(Mnt/100)
   DIX=MOD(Mnt,100)
   IF CENTS > 0
      Xmnt=CENTS(cents,dix)
   ENDIF
   IF DIX > 0
      Xmnt=Xmnt+DIX(Dix)
   ENDIF
   Xmnt=Xmnt+" MILLIONS "
ENDIF

RETURN Xmnt

*------------------------
FUNCTION MILLES
Param Mnt
Priv Mnt,Xmnt,cents,dix,unit

Xmnt=" "
IF Mnt < 20
   Xmnt=IIF(mnt=1,"MILLE ",TU[mnt]+" MILLE ")
ELSE
   CENTS=INT(Mnt/100)
   DIX=MOD(Mnt,100)
   IF CENTS > 0
      Xmnt=Xmnt+CENTS(cents,dix)
   ENDIF
   IF DIX > 0
      Xmnt=Xmnt+DIX(Dix)
   ENDIF
   Xmnt=Xmnt+" MILLE "
ENDIF

RETURN Xmnt
*------------------------
FUNCTION CENTS
Param Mnt,Preste
Priv Xmnt


Xmnt=IIF(mnt=1,"CENT ",IIF(Preste=0,TU[mnt]+" CENT ",TU[mnt]+" CENTS "))

RETURN Xmnt
*------------------------
FUNCTION DIX
Param Mnt
Priv Mnt,Xmnt
* traduire de 20 … 99
* Mdix est forcement >= 2, Munit = 0 … 9
Mdix=INT(mnt/10)
Munit=mod(mnt,10)
Xmnt=""
IF Mnt >= 20
   Xmnt=TD[Mdix]  && vingt, trente, ....
   IF Munit > 0 .or. Mdix = 7 .or. Mdix =  9
      IF Munit=1 .and. Mdix > 0
         Xmnt=Xmnt+" ET"
      ENDIF
      IF Mdix=7 .or. Mdix=9
         Munit = Munit+10
      ENDIF
      Xmnt=Xmnt+" "+TU[Munit]+" "
   ENDIF
ELSE
   Xmnt=TU[Mnt]+" "
ENDIF

RETURN  Xmnt
Commentaires
le 20/10/2008, Jean à Grenoble a écrit :
je pense qu'il faut un 'T' à la fin de 'quatre-ving' dans TD(8) et TD(9) non ?

Jean à Grenoble

le 26/10/2008, dridbul a écrit :
Bien vu ! Merci
le 01/11/2008, roi_yassin a écrit :
comment cette procedure connaitre le devise?
le 03/11/2008, dridbul a écrit :
la devise est le 2d paramètre à passer à la fonction (Pdevise),
Pl1 et Pl2 : longueur des lignes à retourner
Pnl = nombre de lignes à retourner (1 ou 2)
C1 = masque de complément (au lieu des espaces)

le 17/11/2008, roi_yassin a écrit :
merci

Publicité

Les pubs en cours :


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3