OVH Cloud OVH Cloud

le montant en lettre

14 réponses
Avatar
skynet
Bonjour,

Je cherche une methode pour convertir une somme en lettre.
L'objectif est de remplir des traites de paiement, et comme il faut "la
somme en lettre" et que je n'aime (vraiment pas!) me le tapper à la main....

D'avance merci pour vos suggestion

Frederic

10 réponses

1 2
Avatar
hm15
Bonjour Frédéric,

je copie/colle un bout de code que Jessy avait publié en octobre 2002 (à
adapter pour l'euro peut-être)

*************************************************
Public Function ConvertNbLettres(Nb, Devise As String) As String

Dim varnum, varnumD, varnumU, resultat, varlet
Static Chiffre(1 To 19)
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 8)
dizaine(1) = "dix"
dizaine(2) = "vingt"
dizaine(3) = "trente"
dizaine(4) = "quarante"
dizaine(5) = "cinquante"
dizaine(6) = "soixante"
dizaine(8) = "quatre-vingt"

'traitement du cas 0 frs
If Nb >= 1 Then
resultat = ""
Else
resultat = "zéro"
GoTo fintraitementfrancs
End If

'traitement des millions
varnum = Int(Nb / 1000000)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = varlet + " million"
If varlet <> "un" Then: resultat = resultat + "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: resultat = resultat + " " + varlet
resultat = resultat + " mille"
End If

'traitement des centaines et dizaines
varnum = Int(Nb) Mod 1000
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " " + varlet
End If
resultat = LTrim(resultat)
varlet = right$(resultat, 4)

'traitement du "s" final pour vingt et cent et du "de" pour million
Select Case varlet
Case "cent", "ingt"
resultat = resultat + "s"
Case "lion", "ions"
resultat = resultat + " de"
End Select

fintraitementfrancs:
resultat = resultat + " " + Devise
If Nb > 2 Then: resultat = resultat + "s"

'traitement des centimes
varnum = Int((Nb - Int(Nb)) * 100 + 0.5)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " et " + varlet + " centime"
If varnum > 1 Then: resultat = resultat + "s"
End If

' conversion 1ère lettre en majuscule
resultat = UCase(Left(resultat, 1)) + right(resultat, Len(resultat) - 1)

'renvoi du resultat de la fonction et fin de la fonction
ConvertNbLettres = resultat
Exit Function

'sous programme
centaine_dizaine:

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
If varnum > 0 Then: varlet = varlet + Chiffre(varnum)
Else
varnumD = Int(varnum / 10)
varnumU = varnum Mod 10
Select Case varnumD
Case Is <= 5
varlet = varlet + dizaine(varnumD)
Case 6, 7
varlet = varlet + dizaine(6)
Case 8, 9
varlet = varlet + dizaine(8)
End Select
If varnumU = 1 And varnumD < 8 Then
varlet = varlet + " et "
Else
If varnumU <> 0 Or varnumD = 7 Or varnumD = 9 Then: varlet varlet + " "
End If
If varnumD = 7 Or varnumD = 9 Then: varnumU = varnumU + 10
If varnumU <> 0 Then: varlet = varlet + Chiffre(varnumU)
End If
varlet = RTrim(varlet)
Return

End Function
*************************************************

Cordialement,

Annette
---------------------------------------------------------------------------
www.horizon-micro.com


"skynet" a écrit dans le message de news:
3f72709e$0$31733$
Bonjour,

Je cherche une methode pour convertir une somme en lettre.
L'objectif est de remplir des traites de paiement, et comme il faut "la
somme en lettre" et que je n'aime (vraiment pas!) me le tapper à la
main....


D'avance merci pour vos suggestion

Frederic




Avatar
Raymond
Bonjour Annette.

savais-tu que Jessy travaillais au black pour la belgique et l'allemagne?

http://access.jessy.free.fr/htm/Number/ConvertNbLettres.htm
http://access.jessy.free.fr/htm/Number/ConvertNbLettresBelge.htm
http://access.jessy.free.fr/htm/Number/ConvertNbLettresAllemand.htm


--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"hm15" a écrit dans le message de
news:%23$l%
Bonjour Frédéric,

je copie/colle un bout de code que Jessy avait publié en octobre 2002 (à
adapter pour l'euro peut-être)


Avatar
Jessy SEMPERE
Salut

savais-tu que Jessy travaillais au black pour la belgique et l'allemagne?


Et voilà je msuis démasqué, bon je rentre chez moi de ce pas pour
accueillir le percepteur qui va maintenant me demander mes livres
de compte... ;-)

je copie/colle un bout de code que Jessy avait publié en octobre 2002 (à
adapter pour l'euro peut-être)


Je rajoute juste qu'il n'y a pas d'adaptation particulière pour l'euro vu
que
la fonction à un argument "Devise"...

Sinon voici les même liens que Raymond à donner mais ils permettent
d'y accéder tout en accédant au site complet :

http://access.jessy.free.fr/index.html?Menu=5&Page=ConvertNbLettres
http://access.jessy.free.fr/index.html?Menu=5&Page=ConvertNbLettresBelge
http://access.jessy.free.fr/index.html?Menu=5&Page=ConvertNbLettresAllemand

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

Avatar
Pierre CFI
salut jessy
juste au moment ou j'ai besoin de ta fonction, il y a bug
Sept cent quatre-vingtneuf mille cinq cent cinquantecinq euros et dix
centimes
vingt est collé, ciquante aussi ????

--
Pierre CFI
Microsoft MVP Access

Pour mieux utiliser microsoft.public.fr.access...
http://users.skynet.be/mpfa/charte.htm

"Jessy SEMPERE" a écrit dans le message de news:
bku3bg$pj$
Salut

savais-tu que Jessy travaillais au black pour la belgique et
l'allemagne?



Et voilà je msuis démasqué, bon je rentre chez moi de ce pas pour
accueillir le percepteur qui va maintenant me demander mes livres
de compte... ;-)

je copie/colle un bout de code que Jessy avait publié en octobre 2002 (à
adapter pour l'euro peut-être)


Je rajoute juste qu'il n'y a pas d'adaptation particulière pour l'euro vu
que
la fonction à un argument "Devise"...

Sinon voici les même liens que Raymond à donner mais ils permettent
d'y accéder tout en accédant au site complet :

http://access.jessy.free.fr/index.html?Menu=5&Page=ConvertNbLettres
http://access.jessy.free.fr/index.html?Menu=5&Page=ConvertNbLettresBelge

http://access.jessy.free.fr/index.html?Menu=5&Page=ConvertNbLettresAllemand


@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------





Avatar
Jessy SEMPERE
Salut Pierre
juste au moment ou j'ai besoin de ta fonction, il y a bug
Sept cent quatre-vingtneuf mille cinq cent cinquantecinq euros et dix
centimes
vingt est collé, ciquante aussi ????


J'avais fait des corrections sur cette fonction et je ne sais pas si je l'ai
mis
corrigée sur mon site...
Dans le doute voici celle que j'ai et qui fonctionne bien :

*****************************************************
Public Function ConvertNbLettres(nb, Devise As String) As String

Dim varnum, varnumD, varnumU, Resultat, varlet

Static Chiffre(1 To 19)
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 8)
dizaine(1) = "dix"
dizaine(2) = "vingt"
dizaine(3) = "trente"
dizaine(4) = "quarante"
dizaine(5) = "cinquante"
dizaine(6) = "soixante"
dizaine(8) = "quatre-vingt"

'traitement du cas 0
If nb >= 1 Then
Resultat = ""
Else
Resultat = "zéro"
GoTo fintraitementfrancs
End If

'traitement des millions
varnum = Int(nb / 1000000)
If varnum > 0 Then
GoSub centaine_dizaine
Resultat = varlet + " million"
If varlet <> "un" Then: Resultat = Resultat + "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: Resultat = Resultat + " " + varlet
Resultat = Resultat + " mille"
End If

'traitement des centaines et dizaines
varnum = Int(nb) Mod 1000
If varnum > 0 Then
GoSub centaine_dizaine
Resultat = Resultat + " " + varlet
End If
Resultat = LTrim(Resultat)
varlet = Right$(Resultat, 4)

'traitement du "s" final pour vingt et cent et du "de" pour million
Select Case varlet
Case "cent", "ingt"
Resultat = Resultat + "s " + Devise
Case "lion", "ions"
If Left(Devise, 1) = "a" Or _
Left(Devise, 1) = "e" Or _
Left(Devise, 1) = "i" Or _
Left(Devise, 1) = "o" Or _
Left(Devise, 1) = "u" Or _
Left(Devise, 1) = "y" Then
Resultat = Resultat + " d'" & Devise
Else
Resultat = Resultat + " de " & Devise
End If
Case Else
Resultat = Resultat + " " + Devise
End Select

fintraitementfrancs:
If nb > 2 Then: Resultat = Resultat + "s"

'traitement des centimes
varnum = Int((nb - Int(nb)) * 100 + 0.5)
If varnum > 0 Then
GoSub centaine_dizaine
Resultat = Resultat + " et " + varlet + " centime"
If varnum > 1 Then: Resultat = Resultat + "s"
End If

'conversion 1ère lettre en majuscule
Resultat = UCase(Left(Resultat, 1)) + Right(Resultat, Len(Resultat) - 1)

'renvoi du resultat de la fonction et fin de la fonction
ConvertNbLettres = Resultat
Exit Function

'sous programme
centaine_dizaine:
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
If varnum > 0 Then: varlet = varlet + Chiffre(varnum)
Else
varnumD = Int(varnum / 10)
varnumU = varnum Mod 10
Select Case varnumD
Case Is <= 5
varlet = varlet + dizaine(varnumD)
Case 6, 7
varlet = varlet + dizaine(6)
Case 8, 9
varlet = varlet + dizaine(8)
End Select
If varnumU = 1 And varnumD < 8 Then
varlet = varlet + " et "
Else
If varnumU <> 0 Or varnumD = 7 Or varnumD = 9 Then: varlet = varlet
+ " "
End If
If varnumD = 7 Or varnumD = 9 Then: varnumU = varnumU + 10
If varnumU <> 0 Then: varlet = varlet + Chiffre(varnumU)
End If
varlet = RTrim(varlet)
Return

End Function
*****************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

Avatar
Jessy SEMPERE
En complément le code qu'à donner Annette avait une erreur sur la ligne :

If varnumU <> 0 Or varnumD = 7 Or varnumD = 9 Then: varlet = varlet

il fallait :

If varnumU <> 0 Or varnumD = 7 Or varnumD = 9 Then: varlet = varlet + "
"

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Jessy SEMPERE" a écrit dans le message news:
bkuad5$4tt$
Salut Pierre
juste au moment ou j'ai besoin de ta fonction, il y a bug
Sept cent quatre-vingtneuf mille cinq cent cinquantecinq euros et dix
centimes
vingt est collé, ciquante aussi ????


J'avais fait des corrections sur cette fonction et je ne sais pas si je
l'ai

mis
corrigée sur mon site...
Dans le doute voici celle que j'ai et qui fonctionne bien :

*****************************************************
Public Function ConvertNbLettres(nb, Devise As String) As String

Dim varnum, varnumD, varnumU, Resultat, varlet

Static Chiffre(1 To 19)
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 8)
dizaine(1) = "dix"
dizaine(2) = "vingt"
dizaine(3) = "trente"
dizaine(4) = "quarante"
dizaine(5) = "cinquante"
dizaine(6) = "soixante"
dizaine(8) = "quatre-vingt"

'traitement du cas 0
If nb >= 1 Then
Resultat = ""
Else
Resultat = "zéro"
GoTo fintraitementfrancs
End If

'traitement des millions
varnum = Int(nb / 1000000)
If varnum > 0 Then
GoSub centaine_dizaine
Resultat = varlet + " million"
If varlet <> "un" Then: Resultat = Resultat + "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: Resultat = Resultat + " " + varlet
Resultat = Resultat + " mille"
End If

'traitement des centaines et dizaines
varnum = Int(nb) Mod 1000
If varnum > 0 Then
GoSub centaine_dizaine
Resultat = Resultat + " " + varlet
End If
Resultat = LTrim(Resultat)
varlet = Right$(Resultat, 4)

'traitement du "s" final pour vingt et cent et du "de" pour million
Select Case varlet
Case "cent", "ingt"
Resultat = Resultat + "s " + Devise
Case "lion", "ions"
If Left(Devise, 1) = "a" Or _
Left(Devise, 1) = "e" Or _
Left(Devise, 1) = "i" Or _
Left(Devise, 1) = "o" Or _
Left(Devise, 1) = "u" Or _
Left(Devise, 1) = "y" Then
Resultat = Resultat + " d'" & Devise
Else
Resultat = Resultat + " de " & Devise
End If
Case Else
Resultat = Resultat + " " + Devise
End Select

fintraitementfrancs:
If nb > 2 Then: Resultat = Resultat + "s"

'traitement des centimes
varnum = Int((nb - Int(nb)) * 100 + 0.5)
If varnum > 0 Then
GoSub centaine_dizaine
Resultat = Resultat + " et " + varlet + " centime"
If varnum > 1 Then: Resultat = Resultat + "s"
End If

'conversion 1ère lettre en majuscule
Resultat = UCase(Left(Resultat, 1)) + Right(Resultat, Len(Resultat) - 1)

'renvoi du resultat de la fonction et fin de la fonction
ConvertNbLettres = Resultat
Exit Function

'sous programme
centaine_dizaine:
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
If varnum > 0 Then: varlet = varlet + Chiffre(varnum)
Else
varnumD = Int(varnum / 10)
varnumU = varnum Mod 10
Select Case varnumD
Case Is <= 5
varlet = varlet + dizaine(varnumD)
Case 6, 7
varlet = varlet + dizaine(6)
Case 8, 9
varlet = varlet + dizaine(8)
End Select
If varnumU = 1 And varnumD < 8 Then
varlet = varlet + " et "
Else
If varnumU <> 0 Or varnumD = 7 Or varnumD = 9 Then: varlet varlet
+ " "
End If
If varnumD = 7 Or varnumD = 9 Then: varnumU = varnumU + 10
If varnumU <> 0 Then: varlet = varlet + Chiffre(varnumU)
End If
varlet = RTrim(varlet)
Return

End Function
*****************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------





Avatar
hm15
Bonjour Raymond et Jessy,

vous "produisez" trop... je n'ai pas le temps de me mettre à jour...
En fait... il faudrait que je crée... une base de données... pour gérer vos
sites, leur contenu, et tous les posts que je conserve en changeant les
objets pas toujours parlant.
Bref, il faut que je devienne "rentière" pour trouver ce temps.
Bah ! Bientôt...

Bonne journée,

Annette
---------------------------------------------------------------------------
www.horizon-micro.com


"Jessy SEMPERE" a écrit dans le message de news:
bku3bg$pj$
Salut

savais-tu que Jessy travaillais au black pour la belgique et
l'allemagne?



Et voilà je msuis démasqué, bon je rentre chez moi de ce pas pour
accueillir le percepteur qui va maintenant me demander mes livres
de compte... ;-)

je copie/colle un bout de code que Jessy avait publié en octobre 2002 (à
adapter pour l'euro peut-être)


Je rajoute juste qu'il n'y a pas d'adaptation particulière pour l'euro vu
que
la fonction à un argument "Devise"...

Sinon voici les même liens que Raymond à donner mais ils permettent
d'y accéder tout en accédant au site complet :

http://access.jessy.free.fr/index.html?Menu=5&Page=ConvertNbLettres
http://access.jessy.free.fr/index.html?Menu=5&Page=ConvertNbLettresBelge

http://access.jessy.free.fr/index.html?Menu=5&Page=ConvertNbLettresAllemand


@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------





Avatar
Jessy SEMPERE
Salut Annette


vous "produisez" trop... je n'ai pas le temps de me mettre à jour...


Si ça pouvait être vrai... ;-)
malheureusement ça fait un moment que je n'ai pas mis les nouvelles
choses que j'ai sous le coude...

En fait... il faudrait que je crée... une base de données... pour gérer
vos

sites, leur contenu, et tous les posts que je conserve en changeant les
objets pas toujours parlant.


Si tu veux tu peux télécharger un index contenant tous les liens de mon site
:
http://access.jessy.free.fr/download/Site.zip
ce sera déjà ça...

Bref, il faut que je devienne "rentière" pour trouver ce temps.
Bah ! Bientôt...


C'est une solution bon je vais voir ce que je vais faire de mon avenir...
;-)))

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

Avatar
Raymond
Si tu veux tu peux télécharger un index contenant tous les liens de mon
site

:
http://access.jessy.free.fr/download/Site.zip


Tu parles , ça sort un 404.

--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Jessy SEMPERE" a écrit dans le message de
news:bkufjc$7tm$

Avatar
Jessy SEMPERE
Re,

Si tu veux tu peux télécharger un index contenant tous les liens de mon
site

:
http://access.jessy.free.fr/download/Site.zip


Tu parles , ça sort un 404.


oh là tu m'étonnes...
des fois qu'il tienne compte des majuscules, tu peux re-essayer ici :
http://access.jessy.free.fr/DownLoad/Site.zip

sinon il y a un lien sur ma page d'accueil, mais je reconnais que tu me
fais peur là...

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------


1 2