OVH Cloud OVH Cloud

Nombres aux lettres

9 réponses
Avatar
JLK
Quelqu'un aurait-il un programme de conversion des chiffres aux lettres,
jusqu'au milliard?

Je ne veux pas réinventer la roue.

JLK

9 réponses

Avatar
David
"JLK" a écrit dans le message de news:
#
Quelqu'un aurait-il un programme de conversion des chiffres aux lettres,
jusqu'au milliard?

Je ne veux pas réinventer la roue.

JLK



Bonjour JLK,

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 ' )
Faut quand meme créer 2 TextBox
et 2 lignes de code pour la tester.

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
ng
En typant les variables, ca donne a peu près ceci :

Option Explicit

Function NBenLettres(Nb As Double) As String
Dim varNum As Long, varNumD As Long, varNumU As Long, Varlet As String
Dim strResultat As String
Static Chiffre(1 To 19) As String, dizaine(1 To 9) As String
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": 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"

If Nb >= 1 Then
strResultat = ""
Else
strResultat = "zéro"
GoTo fintraitementfrancs
End If

varNum = Int(Nb / 1000000)
If varNum > 0 Then
GoSub centaine_dizaine
strResultat = Varlet & " million"
If Varlet <> "un" Then strResultat = strResultat & "s"
End If

varNum = Int(Nb) Mod 1000000
varNum = Int(varNum / 1000)
If varNum > 0 Then
GoSub centaine_dizaine
If Varlet <> "un" Then strResultat = strResultat & " " & Varlet
strResultat = strResultat & " mille"
End If

varNum = Int(Nb) Mod 1000
If varNum > 0 Then
GoSub centaine_dizaine
strResultat = strResultat & " " & Varlet
End If
strResultat = LTrim(strResultat)
Varlet = Right$(strResultat, 4)
Select Case Varlet
Case "cent", "ingt"
strResultat = strResultat & "s"
Case "lion", "ions"
strResultat = strResultat & " de"
End Select
fintraitementfrancs:
strResultat = strResultat & " euro"
If Nb >= 2 Then strResultat = strResultat & "s"
varNum = Int((Nb - Int(Nb)) * 100 + 0.5)
If varNum > 0 Then
GoSub centaine_dizaine
strResultat = strResultat & " et " & Varlet & " centime"
If varNum > 1 Then strResultat = strResultat & "s"
End If
strResultat = UCase$(Left(strResultat, 1)) & Right$(strResultat,
Len(strResultat) - 1)
NBenLettres = strResultat

Exit Function '//BREAK

centaine_dizaine:
Varlet = ""
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

If varNum <= 19 Then
If varNum > 0 Then Varlet = Varlet & Chiffre(varNum)
Else
varNumD = Int(varNum / 10)
varNumU = varNum Mod 10
Varlet = Varlet & dizaine(varNumD)
If varNumU = 1 And varNumD < 8 Then
Varlet = Varlet & " et "
Else
If varNumU <> 0 Then
Varlet = Varlet & "-"
End If
End If
If varNumU <> 0 Then Varlet = Varlet & Chiffre(varNumU)
End If
Varlet = RTrim(Varlet)
Return
End Function



--
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/
http://apisvb.europe.webmatrixhosting.net/



David a écrit :

"JLK" a écrit dans le message de news:
#
Quelqu'un aurait-il un programme de conversion des chiffres aux
lettres, jusqu'au milliard?

Je ne veux pas réinventer la roue.

JLK



Bonjour JLK,

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 ' )
Faut quand meme créer 2 TextBox
et 2 lignes de code pour la tester.

a+
Jean-Pol DAVID
www.peintures-david.com
ICQ 28394733


Avatar
Zoury
> dizaine(7) = "septante"
dizaine(9) = "nonante"



Voilà qui est instructif! J'avais jamais vu ces termes avant.. :O)

Voici un extrait du Grand Dictionnaire Terminologique de l'Office Québécois
de la langue française expliquant pourquoi :

"Le terme septante est un synonyme de soixante-dix tout
à fait courant en Belgique, en Suisse, dans la République
démocratique du Congo et au Rwanda; il est également
attesté dans certaines régions de l'est de la France et
dans le sud-ouest de la Nouvelle-Écosse. Septante a déjà
été d'un usage plus répandu en France, mais il a commencé
à y être supplanté par soixante-dix dès le 15e siècle."

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
le_troll
Eh oui, ils utilisent les préfixes grec...
--
Merci, @+, bye, Joe

------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


"Zoury" a écrit dans le message de news:

> dizaine(7) = "septante"
> dizaine(9) = "nonante"

Voilà qui est instructif! J'avais jamais vu ces termes avant.. :O)

Voici un extrait du Grand Dictionnaire Terminologique de l'Office


Québécois
de la langue française expliquant pourquoi :

"Le terme septante est un synonyme de soixante-dix tout
à fait courant en Belgique, en Suisse, dans la République
démocratique du Congo et au Rwanda; il est également
attesté dans certaines régions de l'est de la France et
dans le sud-ouest de la Nouvelle-Écosse. Septante a déjà
été d'un usage plus répandu en France, mais il a commencé
à y être supplanté par soixante-dix dès le 15e siècle."

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/




Avatar
Patrice Henrio
pas grec mais latin
De plus soixante-dix et quatre-vingt dix sont des restes d'une numération en
base 20 que l'on retrouve chez les aztèques et les basques.
Par exemple en France l'hôpital des quinze-vingt doit son nom au fait qu'on
pouvait y recevoir 300 malades.
On trouve multitude d'infos très intéressantes sur les chiffres dans
l'immense ouvrage de Georges Iffrah, "les chiffres ou l'histoire d'une
prodigieuse invention".

"le_troll" a écrit dans le message de
news:
Eh oui, ils utilisent les préfixes grec...
--
Merci, @+, bye, Joe

------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


"Zoury" a écrit dans le message de news:

> > dizaine(7) = "septante"
> > dizaine(9) = "nonante"
>
> Voilà qui est instructif! J'avais jamais vu ces termes avant.. :O)
>
> Voici un extrait du Grand Dictionnaire Terminologique de l'Office
Québécois
> de la langue française expliquant pourquoi :
>
> "Le terme septante est un synonyme de soixante-dix tout
> à fait courant en Belgique, en Suisse, dans la République
> démocratique du Congo et au Rwanda; il est également
> attesté dans certaines régions de l'est de la France et
> dans le sud-ouest de la Nouvelle-Écosse. Septante a déjà
> été d'un usage plus répandu en France, mais il a commencé
> à y être supplanté par soixante-dix dès le 15e siècle."
>
> --
> Cordialement
> Yanick Lefebvre - MVP pour Visual Basic
> http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
>
>




Avatar
JLK
Merci à vous tous, particulièrement à David et NG (Nicolas G ou NewsGroup?)

JLK
"JLK" a écrit dans le message de
news:%
Quelqu'un aurait-il un programme de conversion des chiffres aux lettres,
jusqu'au milliard?

Je ne veux pas réinventer la roue.

JLK




Avatar
ng
Salut,

Merci à vous tous, particulièrement à David et NG (Nicolas G ou


NewsGroup?)

Je prefère Nicolas G. ;oP

--
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/
http://apisvb.europe.webmatrixhosting.net/


"JLK" a écrit dans le message de
news:
Merci à vous tous, particulièrement à David et NG (Nicolas G ou


NewsGroup?)

JLK
"JLK" a écrit dans le message de
news:%
> Quelqu'un aurait-il un programme de conversion des chiffres aux lettres,
> jusqu'au milliard?
>
> Je ne veux pas réinventer la roue.
>
> JLK
>
>




Avatar
David
Bonjour Nicolas,

Pas plus tard qu'aujourd'hui, j'ai donc "typé" les variables
de mon programme de facturation.
Première fois que je "type" une fonction, et un static!
Merci donc.

a+
Jean-Pol DAVID
ICQ 28394733
--
Quis ? Quid ? Ubi ? Quibus auxiliis ? Cur ? Quomodo ? Quando ?

"ng" a écrit dans le message de news:
uFENo$

En typant les variables, ca donne a peu près ceci :

Option Explicit

Function NBenLettres(Nb As Double) As String
Dim varNum As Long, varNumD As Long, varNumU As Long, Varlet As String
Dim strResultat As String
Static Chiffre(1 To 19) As String, dizaine(1 To 9) As String



--
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/
http://apisvb.europe.webmatrixhosting.net/



Avatar
ng
Salut,

;o)

Il est tjrs préférable de bien typer explicitement les variables (et retours
de fonction), c'est plus rapide/optimisé et plus compréhensible.

D'autre part, je te conseille d'utiliser la directive Option Explicit au
début de tes modules, cela force la déclaration des variables.


--
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/
http://apisvb.europe.webmatrixhosting.net/



David a écrit :

Bonjour Nicolas,

Pas plus tard qu'aujourd'hui, j'ai donc "typé" les variables
de mon programme de facturation.
Première fois que je "type" une fonction, et un static!
Merci donc.

a+
Jean-Pol DAVID
ICQ 28394733

En typant les variables, ca donne a peu près ceci :

Option Explicit

Function NBenLettres(Nb As Double) As String
Dim varNum As Long, varNumD As Long, varNumU As Long, Varlet As
String Dim strResultat As String
Static Chiffre(1 To 19) As String, dizaine(1 To 9) As String



--
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/
http://apisvb.europe.webmatrixhosting.net/