Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

chiffre en lettre

8 réponses
Avatar
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

8 réponses

Avatar
Raymond [mvp]
bonsoir.

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/Number/ConvertNbLettres.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" a écrit dans le message de
news:
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




Avatar
Cyrille
encore merci, ca marche, j'ai pas compris à quoi sert "Devise As String" dans
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(.........)


bonsoir.

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/Number/ConvertNbLettres.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" a écrit dans le message de
news:
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









Avatar
Raymond [mvp]
L'argument "Nb" correspond au nombre à convertir et l'argument "Devise"
correspond au nom de la devise monétaire que l'on souhaite mettre à la suite
du nombre
exemple:
<Variablestring> = ConvertNbLettres(1600000.50, "Euro")

--
@+
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" a écrit dans le message de
news:
encore merci, ca marche, j'ai pas compris à quoi sert "Devise As String"
dans
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(.........)



Avatar
Guy DETIENNE
Raymond,

Le belge ;O) Ca me fait sourire... En ce moment je parle belge ou français
?


Guy

"Raymond [mvp]" a écrit dans le message de
news:OJI%23z7l$
bonsoir.

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/Number/ConvertNbLettres.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" a écrit dans le message de
news:
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








Avatar
Raymond [mvp]
Bonsoir Guy.

le septante et le nonante sont toujours en vigueur officiellement ?
l'officiel:
http://officesystem.access.free.fr/vba/conventions_conversions.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" a écrit dans le message de news:
udDqTjm$
Raymond,

Le belge ;O) Ca me fait sourire... En ce moment je parle belge ou
français
?


Guy


Avatar
Cyrille
depuis que j'ai utilisé cette fonction, toutes les valeurs qui devraient etre
en lettre sont écrites zéro euro


L'argument "Nb" correspond au nombre à convertir et l'argument "Devise"
correspond au nom de la devise monétaire que l'on souhaite mettre à la suite
du nombre
exemple:
<Variablestring> = ConvertNbLettres(1600000.50, "Euro")

--
@+
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" a écrit dans le message de
news:
encore merci, ca marche, j'ai pas compris à quoi sert "Devise As String"
dans
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(.........)








Avatar
Raymond [mvp]
je suis étonné que la fonction de Jessy ne fonctionne pas .

je te donne la mienne mais qui limite le nombre à 304898034,47.
appel : x= convertir(somme, devise, centimes, de)

fonction:
Public Function Convertir(Somme As Double _
, Optional Devise_Unité = "Euro" _
, Optional Devise_Centimes = "Cent" _
, Optional Devise_De = " d'" _
) As String
Dim stde As String
Dim stEspace As String
Dim stDevise As String
Dim stCentieme As String
Dim varnum, varnumD, varnumU, resultat, varlet

stEspace = " "

If Somme > 304898034.47 Or Somme < -304898034.47 Then
Convertir = "$$ Erreur - montant > 304898034,47 ."
Exit Function
End If
stde = Devise_De
stDevise = Devise_Unité
stCentieme = Devise_Centimes

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 virgule quelque-chose
If Somme >= 1 Then
resultat = ""
Else
If Somme < 0 Then
resultat = "moins"
Somme = -Somme
Else
resultat = "zéro"
GoTo FinTraitement
End If
End If

'traitement des millions
varnum = Int(Somme / 1000000)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " " + varlet + " million"
If varlet <> "un" Then: resultat = resultat + "s"
End If

'traitement des milliers
varnum = Int(Somme) 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(Somme) 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 "d'" pour million
Select Case varlet
Case "cent", "ingt"
If Somme <> 20 And Somme <> 100 Then
resultat = resultat + "s"
End If
Case "lion", "ions"
resultat = resultat + stde
stEspace = ""
End Select

FinTraitement:
resultat = resultat + stEspace + stDevise
If Somme > 1 Then: resultat = resultat + "s"

'traitement les centièmes
varnum = Int((Somme - Int(Somme)) * 100 + 0.5)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " et " + varlet + " " + stCentieme
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 résultat de la fonction et fin de la fonction
Convertir = 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

--
@+
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" a écrit dans le message de
news:
depuis que j'ai utilisé cette fonction, toutes les valeurs qui devraient
etre
en lettre sont écrites zéro euro


L'argument "Nb" correspond au nombre à convertir et l'argument "Devise"
correspond au nom de la devise monétaire que l'on souhaite mettre à la
suite
du nombre
exemple:
<Variablestring> = ConvertNbLettres(1600000.50, "Euro")

--
@+
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" a écrit dans le message de
news:
encore merci, ca marche, j'ai pas compris à quoi sert "Devise As
String"
dans
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(.........)










Avatar
Jessy Sempere [MVP]
Bonjour

Les données que tu mets dans la variable Nb sont bien de type numérique ?

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Cyrille" a écrit dans le message news:

depuis que j'ai utilisé cette fonction, toutes les valeurs qui devraient
etre

en lettre sont écrites zéro euro


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


du nombre
exemple:
<Variablestring> = ConvertNbLettres(1600000.50, "Euro")

--
@+
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