chiffre en lettre
Le
Cyrille
Bonjour à tous
comment convertir un nombre en euros en lettres en sachant que j'ai déjà un
programme mais il se trompe quand il faut ecrire des chiffres comme 75,72 €
il ecrit soixante-dix-cinq euros et soixante-dix-deux centimes
est ce que quelqu'un en a un sans cette erreur ou sinon je joins le code de
ce programme
Merci d'avance
voici le code
Public Function MontantEnLettre(Montant) As String
' Objectif: convertir des montants en lettre selon les règles
orthographiques en vigueur
' en France(Suisse romande). Par exemple pour un chèque bancaire
' Version valable pour un maximum de 999'999'999.99
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 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-dix"
dizaine(8) = "quatre-vingt"
dizaine(9) = "quatre-vingt-dix"
'dizaine(7) = "septante"
'dizaine(8) = "huitante"
'dizaine(9) = "nonante"
'*** 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"
Résultat = Résultat + "s"
Case "cent"
Résultat = Résultat + "s"
Case "lion", "ions"
Résultat = Résultat + " de"
End Select
FinTraitement:
'*** Indication du terme Euro
Résultat = Résultat + " Euro"
If Montant >= 2 Then Résultat = Résultat + "s" & vbCrLf
'*** Traitement des centimes
varnumD = 0
varnumU = 0
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"
Résultat = Résultat + " " + 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 "
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)
'*** traitement du séparateur des dizaines et unités
If varnumU = 1 Then
varlet = varlet + " et "
Else
If varnumU <> 0 Then
varlet = varlet + "-"
End If
End If
End If
'*** génération des unités
If varnumU <> 0 Then
varlet = varlet + Chiffre(varnumU)
End If
'*** Suppression des espaces à gauche et retour
varlet = RTrim(varlet)
Return
End Function
comment convertir un nombre en euros en lettres en sachant que j'ai déjà un
programme mais il se trompe quand il faut ecrire des chiffres comme 75,72 €
il ecrit soixante-dix-cinq euros et soixante-dix-deux centimes
est ce que quelqu'un en a un sans cette erreur ou sinon je joins le code de
ce programme
Merci d'avance
voici le code
Public Function MontantEnLettre(Montant) As String
' Objectif: convertir des montants en lettre selon les règles
orthographiques en vigueur
' en France(Suisse romande). Par exemple pour un chèque bancaire
' Version valable pour un maximum de 999'999'999.99
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 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-dix"
dizaine(8) = "quatre-vingt"
dizaine(9) = "quatre-vingt-dix"
'dizaine(7) = "septante"
'dizaine(8) = "huitante"
'dizaine(9) = "nonante"
'*** 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"
Résultat = Résultat + "s"
Case "cent"
Résultat = Résultat + "s"
Case "lion", "ions"
Résultat = Résultat + " de"
End Select
FinTraitement:
'*** Indication du terme Euro
Résultat = Résultat + " Euro"
If Montant >= 2 Then Résultat = Résultat + "s" & vbCrLf
'*** Traitement des centimes
varnumD = 0
varnumU = 0
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"
Résultat = Résultat + " " + 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 "
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)
'*** traitement du séparateur des dizaines et unités
If varnumU = 1 Then
varlet = varlet + " et "
Else
If varnumU <> 0 Then
varlet = varlet + "-"
End If
End If
End If
'*** génération des unités
If varnumU <> 0 Then
varlet = varlet + Chiffre(varnumU)
End If
'*** Suppression des espaces à gauche et retour
varlet = RTrim(varlet)
Return
End Function

Poser une question


tu trouveras les procédures sur le site de jessy pour le français , le belge
et l'allemand
http://access.jessy.free.fr/htm/Num...ettres.htm
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum
"Cyrille" news:
la déclaration de la fonction
Public Function ConvertNbLettres(Nb, Devise As String) As String
parce qu'après il faut bien créer une fonction après changement mais je ne
sais pas comment ecrire
Me.Lettres= ConvertNbLettres(.........)
correspond au nom de la devise monétaire que l'on souhaite mettre à la suite
du nombre
exemple:
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum
"Cyrille" news:
Le belge ;O) Ca me fait sourire... En ce moment je parle belge ou français
?
Guy
"Raymond [mvp]" news:OJI%23z7l$
le septante et le nonante sont toujours en vigueur officiellement ?
l'officiel:
http://officesystem.access.free.fr/...rsions.htm
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum
"Guy DETIENNE" udDqTjm$