OVH Cloud OVH Cloud

Conversion nombre en lettre

9 réponses
Avatar
Chris
Bonjour à tous

Je souhaite créer un état pour imprimer des chèques.
Je souhaite donc convertir les nombres en lettre. J'ai trouve un code sur le
site http://access.jessy.free.fr/ (que je vous copie ci-dessous) mais je
sais pas comment l'intégrer et ou pour que mon champs "total" soit convertit
dans mon etat en lettre.
Si quelqu'un peut m'aider.... Merci d'avance!

Code:
Cette fonction permet de convertir un nombre en toutes lettres dans la
langue française.

L'argument "Nb" correspond au nombre à convertir et l'argument "Devise"
correspond au nom de la devise monétaire de que l'on souhaite mettre à la
suite du nombre.

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"
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

Cette fonction retournera le nombre écrit en toutes lettres suivi du nom de
la devise stipulée dans l'argument "Devise".

Auteur : Jessy SEMPERE

9 réponses

Avatar
Raymond [mvp]
Bonjour.
Je ne connais pas ton problème mais en général on place cette fonction dans
le formatage de la section détail
Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
Me.Moncontrôle = ConvertNbLettres(Me.total, Me.Ladevise)
End Sub
Me.Ladevise étant le nom de la devise

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Chris" a écrit dans le message de
news:eIRnvkO%
Bonjour à tous

Je souhaite créer un état pour imprimer des chèques.
Je souhaite donc convertir les nombres en lettre. J'ai trouve un code sur
le

site http://access.jessy.free.fr/ (que je vous copie ci-dessous) mais je
sais pas comment l'intégrer et ou pour que mon champs "total" soit
convertit

dans mon etat en lettre.
Si quelqu'un peut m'aider.... Merci d'avance!


Avatar
Le Méruvien
bonjour Raymond, moi aussi je n'ai jamais réussi a faire fonctionner ce
truc!,
J'ai un formulaire ou j'ai mis un champ [NB] (je saisie un chiffre) et un
champ [B] qui doit m'afficher le chiffre en lettre, et dans source de ce
champ, j'ai mis: = ConvertNbLettres(NB)
j'ai supprimer "devise" pour simplifier, et bien ça marche pas, quand je
lancemon formulaire, dans le champ [B] il y a #non?
roger.

"Raymond [mvp]" a écrit dans le message de
news: OlY7llS#
Bonjour.
Je ne connais pas ton problème mais en général on place cette fonction
dans

le formatage de la section détail
Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
Me.Moncontrôle = ConvertNbLettres(Me.total, Me.Ladevise)
End Sub
Me.Ladevise étant le nom de la devise

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Chris" a écrit dans le message de
news:eIRnvkO%
Bonjour à tous

Je souhaite créer un état pour imprimer des chèques.
Je souhaite donc convertir les nombres en lettre. J'ai trouve un code
sur


le
site http://access.jessy.free.fr/ (que je vous copie ci-dessous) mais je
sais pas comment l'intégrer et ou pour que mon champs "total" soit
convertit

dans mon etat en lettre.
Si quelqu'un peut m'aider.... Merci d'avance!






Avatar
Anor
Bonjour,

Le plus simple, pour tester une fonction, c'est aussi de l'appeler depuis une requête
et de ne pas donner au module le même nom que la fonction.....hum.....

--
à+
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Access Memorandum : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------



Le Méruvien :
| bonjour Raymond, moi aussi je n'ai jamais réussi a faire fonctionner
| ce truc!,
| J'ai un formulaire ou j'ai mis un champ [NB] (je saisie un chiffre)
| et un champ [B] qui doit m'afficher le chiffre en lettre, et dans
| source de ce champ, j'ai mis: = ConvertNbLettres(NB)
| j'ai supprimer "devise" pour simplifier, et bien ça marche pas, quand
| je lancemon formulaire, dans le champ [B] il y a #non?
| roger.
|
Avatar
Raymond [mvp]
Bonjour Roger.

je ne connais pas la procédure de jessy, mais elle devrait marcher.
j'en ai une sur mon site mais limitée dans la somme :
http://access.seneque.free.fr/sommeenlettres.htm

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Le Méruvien" a écrit dans le message de
news:4038854b$0$28123$
bonjour Raymond, moi aussi je n'ai jamais réussi a faire fonctionner ce
truc!,
J'ai un formulaire ou j'ai mis un champ [NB] (je saisie un chiffre) et un
champ [B] qui doit m'afficher le chiffre en lettre, et dans source de ce
champ, j'ai mis: = ConvertNbLettres(NB)
j'ai supprimer "devise" pour simplifier, et bien ça marche pas, quand je
lancemon formulaire, dans le champ [B] il y a #non?
roger.


Avatar
Wanadoo
Bonjour
Je l'utilise dans une form facture et ça fonctionne tout à fait bien
Un champs texte dont la source contrôle=ConvertNbLettres([total])
Je n'utilise pas d'arguments, je n'utilise que l'euro et je l'ai mis en
string dans la fonction.
Est-ce grâce à ça que ça marche ? En tout cas ça fonctionne
Je viens de l'essayer en mettant un argument (champs Devise que j'ai rajouté
à ma table) et ça marche
source contrôle=ConvertNbLettres([total];[Devise])
Salut

"Chris" a écrit dans le message de news:
eIRnvkO#
Bonjour à tous

Je souhaite créer un état pour imprimer des chèques.
Je souhaite donc convertir les nombres en lettre. J'ai trouve un code sur
le

site http://access.jessy.free.fr/ (que je vous copie ci-dessous) mais je
sais pas comment l'intégrer et ou pour que mon champs "total" soit
convertit

dans mon etat en lettre.
Si quelqu'un peut m'aider.... Merci d'avance!

Code:
Cette fonction permet de convertir un nombre en toutes lettres dans la
langue française.

L'argument "Nb" correspond au nombre à convertir et l'argument "Devise"
correspond au nom de la devise monétaire de que l'on souhaite mettre à la
suite du nombre.

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"
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

Cette fonction retournera le nombre écrit en toutes lettres suivi du nom
de

la devise stipulée dans l'argument "Devise".

Auteur : Jessy SEMPERE




Avatar
christian.atzel
Bonsoir,
J'obtiens un message d'erreur : 429 un active x ne peut pas créer d'objet.
J'ai bien mis la dll dans sytem32 et dans outils, références, elle apparait
bien.
Encore un mystère. J'ai access 2002.
Christian ATZEL
"Raymond [mvp]" a écrit dans le message de
news:uq9FFOT%
Bonjour Roger.

je ne connais pas la procédure de jessy, mais elle devrait marcher.
j'en ai une sur mon site mais limitée dans la somme :
http://access.seneque.free.fr/sommeenlettres.htm

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Le Méruvien" a écrit dans le message de
news:4038854b$0$28123$
bonjour Raymond, moi aussi je n'ai jamais réussi a faire fonctionner ce
truc!,
J'ai un formulaire ou j'ai mis un champ [NB] (je saisie un chiffre) et
un


champ [B] qui doit m'afficher le chiffre en lettre, et dans source de ce
champ, j'ai mis: = ConvertNbLettres(NB)
j'ai supprimer "devise" pour simplifier, et bien ça marche pas, quand je
lancemon formulaire, dans le champ [B] il y a #non?
roger.






Avatar
Daniel Carollo
Bonjour Raymond (et tous les autres).

Je viens de tester la fonction de Jessay, a vue de nez elle fonctionne.

Bonne journee a tous.

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...


"Raymond [mvp]" wrote in message
news:uq9FFOT%
Bonjour Roger.

je ne connais pas la procédure de jessy, mais elle devrait marcher.
j'en ai une sur mon site mais limitée dans la somme :
http://access.seneque.free.fr/sommeenlettres.htm

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Le Méruvien" a écrit dans le message de
news:4038854b$0$28123$
bonjour Raymond, moi aussi je n'ai jamais réussi a faire fonctionner ce
truc!,
J'ai un formulaire ou j'ai mis un champ [NB] (je saisie un chiffre) et
un


champ [B] qui doit m'afficher le chiffre en lettre, et dans source de ce
champ, j'ai mis: = ConvertNbLettres(NB)
j'ai supprimer "devise" pour simplifier, et bien ça marche pas, quand je
lancemon formulaire, dans le champ [B] il y a #non?
roger.






Avatar
Daniel Carollo
Bonjour Raymond (et tous les autres).

Je viens de tester la fonction de Jessy, a vue de nez elle fonctionne.

Bonne journee a tous.

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...


"Raymond [mvp]" wrote in message
news:uq9FFOT%
Bonjour Roger.

je ne connais pas la procédure de jessy, mais elle devrait marcher.
j'en ai une sur mon site mais limitée dans la somme :
http://access.seneque.free.fr/sommeenlettres.htm

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Le Méruvien" a écrit dans le message de
news:4038854b$0$28123$
bonjour Raymond, moi aussi je n'ai jamais réussi a faire fonctionner ce
truc!,
J'ai un formulaire ou j'ai mis un champ [NB] (je saisie un chiffre) et
un


champ [B] qui doit m'afficher le chiffre en lettre, et dans source de ce
champ, j'ai mis: = ConvertNbLettres(NB)
j'ai supprimer "devise" pour simplifier, et bien ça marche pas, quand je
lancemon formulaire, dans le champ [B] il y a #non?
roger.






Avatar
Raymond [mvp]
Bonjour Daniel.

C'est bien ce que j'ai dit hier, mais est-elle bien utilisée ?

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Daniel Carollo" a écrit dans le
message de news:um$Te%23e%
Bonjour Raymond (et tous les autres).

Je viens de tester la fonction de Jessy, a vue de nez elle fonctionne.

Bonne journee a tous.

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...