PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Convertir Numérique En Lettres !
Convertir Numérique En Lettres !
Started by leplaidn, Apr., 14 2005 5:55 PM - 8 replies
Posted on April, 14 2005 - 5:55 PM
Bonjour,

je cherche a convertir un nombre (monétaire)
en lettres (style Deux milles trois cent ...).

Je voulais savoir si par hasard cette fonction n existerait pas
sous winDev ? (j ai bien chercher mais rien trouve, notemment
numériqueverschaine qui n a pas de format "lettre")

En fait on dispose d une fonction en clipper mais il va falloir que
je me plonge dedans pour faire le transfert sous WD, je prefer eviter si possible !
(je sais meme pas ce que c est clipper ! lol)

Voila merci !
Damien.
Posted on April, 14 2005 - 6:26 PM
Je crois qu'il va falloir mettre la main à la pâte...
Fonction pas trop dur a développé cela dit, mais un peu longue...
Posted on April, 14 2005 - 6:36 PM
leplaidn a utilisé son clavier pour écrire :
Bonjour,

je cherche a convertir un nombre (monétaire)
en lettres (style Deux milles trois cent ...).

Je voulais savoir si par hasard cette fonction n existerait pas
sous winDev ? (j ai bien chercher mais rien trouve, notemment
numériqueverschaine qui n a pas de format "lettre")

En fait on dispose d une fonction en clipper mais il va falloir que
je me plonge dedans pour faire le transfert sous WD, je prefer eviter si possible !
(je sais meme pas ce que c est clipper ! lol)

Voila merci !
Damien.


Fonction que j'utilise (provenant d'exemple WD5

************** Fonction NombreEnLettre ****************************
FONCTION NombreEnLettre(valeur)

// Traitement uniquement d'une partie entière

szChaine,szDroite, szToken, resultat, szInter sont des chaînes
nChiffre1,nChiffre2 sont des chaînes
nChiffre est une chaîne
i,z,j,k est un entier

resultat=""
nChiffre=valeur
nChiffre=SansEspace(nChiffre)

SI Taille(nChiffre)>0 ALORS
// verif du signe
SI nChiffre[[1]]="+" OU nChiffre[[1]]="-" ALORS
resultat=nChiffre[[1]]
nChiffre=Milieu(nChiffre,2)
FIN

k=Position(nChiffre,",")
SI k<>0 ALORS
nChiffre1=Milieu(nChiffre,Max(k-12,1),k-1)
nChiffre2=Milieu(nChiffre,k+1,k+12)
k=2
SINON
nChiffre1=Droite(nChiffre,18)
nChiffre2=""
k=1
FIN

POUR j=1 A k
SI j=1 ALORS
szChaine=nChiffre1
// traitement des zéros après la virgule
TANTQUE szChaine[[1]]="0"
szChaine=Milieu(szChaine,2)
FIN
SI szChaine="" ALORS resultat=resultat+"Z"
SINON
szChaine=nChiffre2
szInter=","
// traitement des zéros après la virgule
TANTQUE szChaine[[1]]="0"
szInter=szInter+"Z"
szChaine=Milieu(szChaine,2)
FIN
SI szChaine<>"" ALORS
resultat=resultat+szInter
FIN
FIN
SI szChaine<>"" ALORS

szDroite=SansEspace(Droite(szChaine,3))
z=Taille(szChaine)-3
SI z>0 ALORS
szChaine=Gauche(szChaine,Taille(szChaine)-3)
SINON
szChaine=""
FIN
szToken=""
i=0
TANTQUE szDroite<>""
Lecture(szDroite,i,szToken)
i++
szDroite=SansEspace(Droite(szChaine,3))
z=Taille(szChaine)-3
SI z>0 ALORS
szChaine=Gauche(szChaine,Taille(szChaine)-3)
SINON
szChaine=""
FIN
FIN
SI szToken="" ALORS
resultat=resultat+"Z"
SINON
resultat=resultat+szToken
FIN
FIN
FIN
FIN

resultat=Interprete(resultat)
RENVOYER resultat


******************************************* Fonction Interprete ***********************************
FONCTION Interprete(szToken)

i,j est un entier
c, c0 ,c1 sont des caractères
ch est une chaîne

i=Taille(szToken)

// pour avoir toujours un caractère après celui en cours
szToken=szToken+" "
c0=" " // Pour le traitement de 21, 31, 41, 51, 61
c1=" "
POUR j=1 A i

c=szToken[[j]]

SELON c
CAS "1"
// gère le cas 21, 31, 41, 51, 61 (teste le caractère précédent)
SI Position("GHIJK",c0)>0 ALORS ch=ch+"et "
ch=ch+"un"
CAS "2" : ch=ch+"deux"
CAS "3" : ch=ch+"trois"
CAS "4" : ch=ch+"quatre"
CAS "5" : ch=ch+"cinq"
CAS "6" : ch=ch+"six"
CAS "7" : ch=ch+"sept"
CAS "8" : ch=ch+"huit"
CAS "9" : ch=ch+"neuf"
CAS "0" : ch=ch+"dix"
CAS "A" : ch=ch+"onze"
CAS "B" : ch=ch+"douze"
CAS "C" : ch=ch+"treize"
CAS "D" : ch=ch+"quatorze"
CAS "E" : ch=ch+"quinze"
CAS "F" : ch=ch+"seize"
CAS "G" : ch=ch+"vingt"
CAS "H" : ch=ch+"trente"
CAS "I" : ch=ch+"quarante"
CAS "J" : ch=ch+"cinquante"
CAS "K" : ch=ch+"soixante"
CAS "L" : SI Position("MNO, ",szToken[[j+1]])=0 ALORS
ch=ch+"quatre-vingt"
SINON
ch=ch+"quatre-vingts"
FIN
CAS "c" : SI Position("MNO, ",szToken[[j+1]])=0 OU Position("23456789",c0)=0 ALORS
ch=ch+"cent"
SINON
ch=ch+"cents"
FIN
CAS "M" : ch=ch+"mille"
CAS "N" : SI c0="1" ALORS
SI Position("GHIJKLc",c1)>0
ch=ch+"millions"
SINON
ch=ch+"million"
FIN
SINON
ch=ch+"millions"
FIN
CAS "O" : SI c0="1" ALORS
SI Position("GHIJKLc",c1)>0
ch=ch+"milliards"
SINON
ch=ch+"milliard"
FIN
SINON
ch=ch+"milliards"
FIN
CAS "Z" : ch=ch+"zéro"
CAS "+" : ch=ch+"Plus"
CAS "-" : ch=ch+"Moins"
CAS "," : ch=ch+"virgule"
FIN
c1=c0 //memorise le précédent du précédent
c0=c // Mémorise le précédent
ch=ch+" "

FIN
RENVOYER ch

***************************************************************************
Il y a sans doute possibilité d'améliorer, mais je n'ai pas eu l'ocassion de m'y repenché vu que la conversion -> WD9 ne m'a pas posé de problème.

--
Pascal
N0.pascal.SPAM@efpe.biz
Ne garder que le prénom pour me joindre
Posted on April, 14 2005 - 6:50 PM
j'ai développé une classe sous vb.
juste le temps de la retrouver.
Posted on April, 14 2005 - 6:52 PM
Bonjour !
Tu peux t'inspirer de l'exemple : WD Nombre en lettres

(A partir de consulter le Guide tu fais rechercher nombre en lettre tu trouveras l'exemple !)
J'espère t'avoir aidé !
Posted on April, 14 2005 - 6:53 PM
Bonjour !
Tu peux t'inspirer de l'exemple : WD Nombre en lettres

(A partir de consulter le Guide tu fais rechercher nombre en lettre tu trouveras l'exemple !)
J'espère t'avoir aidé !
Posted on April, 14 2005 - 7:51 PM
Dans les exemples didactiques de windev9, il y a un exemple qui traite de cela
\windev9\exemples\exemples didactiques\WD Nombre en lettres

Cdt
Mohamed Oulmouden
Posted on April, 15 2005 - 11:26 AM
Et bien un GRAND MERCI a tous !

Vous me depannez pas mal j avais vraiment pas le temps
de m y pencher franchement !

MeaCulpa je n avais vraiment pas pense a regarder les exemple didactiques !
Je vous donnerai la chose une fois finie ...

Merci encore,
Damien
Posted on April, 15 2005 - 8:41 PM
Salut

Attention aux nombreuses exceptions qui font le charme fou de notre belle langue :

par exemple en plus de ceux figurant déjà dans une réponse précedante

soixante et onze et non pas soixante un ni soixante onze
soixante-douze et non pas soixante dix deux

idem soixante seize et non pas soixante dix et six

etc....

Bon dév courageux