OVH Cloud OVH Cloud

Montants en chiffres et en lettres

5 réponses
Avatar
Gérard
Bonjour,

Pour ne pas refaire ce qui (peut =EAtre) existe d=E9j=E0, qui=20
peut m'indiquer un moyen simple pour convertir un montant=20
saisi en chiffres dans un montant en toutes lettres ?

D'avance merci.

G=E9rard

5 réponses

Avatar
ng
Salut,

En effet ceci a déjà été fait plusieurs fois, une recherche sur
http://groups.google.fr te permettra de retrouver quelques fonctions faisant
cela.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Gérard a écrit :

Bonjour,

Pour ne pas refaire ce qui (peut être) existe déjà, qui
peut m'indiquer un moyen simple pour convertir un montant
saisi en chiffres dans un montant en toutes lettres ?

D'avance merci.

Gérard


Avatar
David
Bonjour Gérard,

Voila le programme que j'utilise
pour établir des factures au quotidien.
A adapter selon que tu sois français,
suisse etc..
Il est au top pour la Belgique.
Mais le travail est déjà "mâché" pour la France
(voir derrière les ' )


a+
Jean-Pol DAVID
www.peintures-david.com
ICQ 28394733
--
Quis ? Quid ? Ubi ? Quibus auxiliis ? Cur ? Quomodo ? Quando ?

Function NBenLettres(nb)
'
Dim varnum, varnumD, varnumU, varlet ', résultat
'
'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 16 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) = "septante"
dizaine(8) = "quatre-vingt"
dizaine(9) = "nonante"

'
'*** Traitement du cas zéro franc
If nb >= 1 Then
résultat = ""
Else
résultat = "zéro"
GoTo fintraitementfrancs
End If
'*** Traitement des millions
varnum = Int(nb / 1000000)
If varnum > 0 Then
GoSub centaine_dizaine
résultat = varlet + " million"
If varlet <> "un" Then résultat = résultat + "s"
End If
'
'*** Traitement des milliers
varnum = Int(nb) Mod 1000000
varnum = Int(varnum / 1000)
If varnum > 0 Then
GoSub centaine_dizaine
If varlet <> "un" Then résultat = résultat + " " + varlet
résultat = résultat + " mille"
End If
'
'*** Traitement des centaines et dizaines
varnum = Int(nb) Mod 1000
If varnum > 0 Then
GoSub centaine_dizaine
résultat = résultat + " " + varlet
End If
résultat = LTrim(résultat)
varlet = Right$(résultat, 4)
'
'*** Traitement du "s" final pour vingt et cent et du "de" pour million
Select Case varlet
Case "cent", "ingt"
résultat = résultat + "s"
Case "lion", "ions"
résultat = résultat + " de"
End Select
fintraitementfrancs: '*** Etiquette de branchement pour le cas "zéro franc"
'
'*** Indication du terme franc
résultat = résultat + " euro"
If nb >= 2 Then résultat = résultat + "s"
'
'*** Traitement des centimes
varnum = Int((nb - Int(nb)) * 100 + 0.5) '*** On additionne 0,5
'*** afin de compenser
'*** les erreurs de calcul
'*** dues aux arrondis
If varnum > 0 Then
GoSub centaine_dizaine
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
NBenLettres = résultat
Exit Function
'
centaine_dizaine: '*** Sous-programme de conversion en lettres
'*** des centaines et dizaines
varlet = ""
'
'*** Traitement des centaines
If varnum >= 100 Then
varlet = chiffre(Int(varnum / 100))
varnum = varnum Mod 100
If varlet = "un" Then
varlet = "cent "
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)
Else '*** Autres cas
varnumD = Int(varnum / 10) '*** chiffre des dizaines
varnumU = varnum Mod 10 '*** chiffre des unités
'''Select Case varnumD '*** génération des dizaines en lettres

varlet = varlet + dizaine(varnumD)
'''Case Is <= 5
'''varlet = varlet + dizaine(varnumD)
'''Case 6, 7
'''varlet = varlet + dizaine(6)
'''Case 8, 9
'''varlet = varlet + dizaine(8)
'''End Select
'
'*** traitement du séparateur des dizaines et unités
If varnumU = 1 And varnumD < 8 Then
varlet = varlet + " et "
Else
If varnumU <> 0 Then
varlet = varlet + "-" '''Or varnumD = 7 Or varnumD = 9
End If
End If
'*** génération des unités
'''If varnumD = 7 Or varnumD = 9 Then varnumU = varnumU + 10
If varnumU <> 0 Then varlet = varlet + chiffre(varnumU)
End If
'
'*** Suppression des espaces à gauche et retour
varlet = RTrim(varlet)
Return
End Function
Avatar
Bonjour,

Cela existait déjà vers 1990 sur SYMPHONIE de LOTUS, j'ai
convertie ce fichier en EXCEL, c'est un fichier assez
compliqué à faire mais simple en uitlisation.

-----Message d'origine-----
Bonjour,

Pour ne pas refaire ce qui (peut être) existe déjà, qui
peut m'indiquer un moyen simple pour convertir un montant
saisi en chiffres dans un montant en toutes lettres ?

D'avance merci.

Gérard
.



Avatar
Salut,

J'ai un programme sur EXCEL 2002 avec lequel je fais des
chèques, c'est assez compliqué à faire mais ça marche très
bien.

-----Message d'origine-----
Bonjour,

Pour ne pas refaire ce qui (peut être) existe déjà, qui
peut m'indiquer un moyen simple pour convertir un montant
saisi en chiffres dans un montant en toutes lettres ?

D'avance merci.

Gérard
.



Avatar
Gérard
Bonjour David.

Ce n'est qu'hier soir en rentrant d'un déplacement en
province que j'ai pris connaissance de ta réponse.
Je te remercie mille fois, ta fonction fonctionne
parfaitement, il m'a suffit de créer 2 TextBox et 2 lignes
de code pour la tester. Je vais maintenant m'occuper des
soixante-dix et quatre-vingt-dix.
Je ne sais comment te remercier. Je développe depuis 25
ans principalement en COBOL et depuis 3 ans en VB6. J'ai
développé la même conversion en COBOL pour l'édition de
lettres-Chèques.
Je te laisse mes coordonnées :
Gérard Fiévet
PROMICRO
01 47 41 98 96
g(2)fievet(at)aol.com - supprime les parenthèses autour du
chiffe 2.

Je t'envoie une copie de cette réponse à ton e-mail.

Cordiales salutations.
Gérard


-----Message d'origine-----
Bonjour Gérard,

Voila le programme que j'utilise
pour établir des factures au quotidien.
A adapter selon que tu sois français,
suisse etc..
Il est au top pour la Belgique.
Mais le travail est déjà "mâché" pour la France
(voir derrière les ' )


a+
Jean-Pol DAVID
www.peintures-david.com
ICQ 28394733
--
Quis ? Quid ? Ubi ? Quibus auxiliis ? Cur ? Quomodo ?


Quando ?

Function NBenLettres(nb)
'
Dim varnum, varnumD, varnumU, varlet ', résultat
'
'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


16 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) = "septante"
dizaine(8) = "quatre-vingt"
dizaine(9) = "nonante"

'
'*** Traitement du cas zéro franc
If nb >= 1 Then
résultat = ""
Else
résultat = "zéro"
GoTo fintraitementfrancs
End If
'*** Traitement des millions
varnum = Int(nb / 1000000)
If varnum > 0 Then
GoSub centaine_dizaine
résultat = varlet + " million"
If varlet <> "un" Then résultat = résultat + "s"
End If
'
'*** Traitement des milliers
varnum = Int(nb) Mod 1000000
varnum = Int(varnum / 1000)
If varnum > 0 Then
GoSub centaine_dizaine
If varlet <> "un" Then résultat = résultat + " " + varlet
résultat = résultat + " mille"
End If
'
'*** Traitement des centaines et dizaines
varnum = Int(nb) Mod 1000
If varnum > 0 Then
GoSub centaine_dizaine
résultat = résultat + " " + varlet
End If
résultat = LTrim(résultat)
varlet = Right$(résultat, 4)
'
'*** Traitement du "s" final pour vingt et cent et


du "de" pour million
Select Case varlet
Case "cent", "ingt"
résultat = résultat + "s"
Case "lion", "ions"
résultat = résultat + " de"
End Select
fintraitementfrancs: '*** Etiquette de branchement pour


le cas "zéro franc"
'
'*** Indication du terme franc
résultat = résultat + " euro"
If nb >= 2 Then résultat = résultat + "s"
'
'*** Traitement des centimes
varnum = Int((nb - Int(nb)) * 100 + 0.5) '*** On


additionne 0,5
'*** afin de compenser
'*** les erreurs de calcul
'*** dues aux arrondis
If varnum > 0 Then
GoSub centaine_dizaine
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
NBenLettres = résultat
Exit Function
'
centaine_dizaine: '*** Sous-programme de conversion en


lettres
'*** des centaines et dizaines
varlet = ""
'
'*** Traitement des centaines
If varnum >= 100 Then
varlet = chiffre(Int(varnum / 100))
varnum = varnum Mod 100
If varlet = "un" Then
varlet = "cent "
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)
Else '*** Autres cas
varnumD = Int(varnum / 10) '*** chiffre des dizaines
varnumU = varnum Mod 10 '*** chiffre des unités
'''Select Case varnumD '*** génération des dizaines en


lettres

varlet = varlet + dizaine(varnumD)
'''Case Is <= 5
'''varlet = varlet + dizaine(varnumD)
'''Case 6, 7
'''varlet = varlet + dizaine(6)
'''Case 8, 9
'''varlet = varlet + dizaine(8)
'''End Select
'
'*** traitement du séparateur des dizaines et unités
If varnumU = 1 And varnumD < 8 Then
varlet = varlet + " et "
Else
If varnumU <> 0 Then
varlet = varlet + "-" '''Or varnumD = 7 Or varnumD = 9
End If
End If
'*** génération des unités
'''If varnumD = 7 Or varnumD = 9 Then varnumU = varnumU +


10
If varnumU <> 0 Then varlet = varlet + chiffre(varnumU)
End If
'
'*** Suppression des espaces à gauche et retour
varlet = RTrim(varlet)
Return
End Function





.