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

Erreur dans Function ConvertNbLettres

6 réponses
Avatar
Telesphore
J'ai copié ce code un jour, mais aujourd'hui je me rends compte qu'il y a
des erreurs, en particulier, pour "vingt" et "cent". Ainsi 100,00 $ devient
la somme de "cents dollars" au lieu de "cent dollars"; 20,00 $ devient la
somme de "vingts dollars" au lieu de "vingt dollars". Il y a un "S" de trop!

Voici le code qu'il faudrait corriger:
*****************************************************************
Option Compare Database
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 fintraitement
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

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

'traitement des cents
varnum = Int((Nb - Int(Nb)) * 100 + 0.5)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " et " + varlet + " cent"
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
***************************************************************

Merci d'avance

6 réponses

Avatar
Raymond [mvp]
Bonsoir.

Dans les différents sites nommés dans les conseils d'utilisation il y a des
procédures semblables qui fonctionnent très bien. essaie d'en trouver une
qui te convient car peu de contributeurs vont se lancer dans la modif d'une
telle procédure et passer des heures en test.
c'était mon avis.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Telesphore" a écrit dans le message de
news:
J'ai copié ce code un jour, mais aujourd'hui je me rends compte qu'il y a
des erreurs, en particulier, pour "vingt" et "cent". Ainsi 100,00 $
devient

la somme de "cents dollars" au lieu de "cent dollars"; 20,00 $ devient la
somme de "vingts dollars" au lieu de "vingt dollars". Il y a un "S" de
trop!


Voici le code qu'il faudrait corriger:
*****************************************************************
Option Compare Database
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 fintraitement
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

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

'traitement des cents
varnum = Int((Nb - Int(Nb)) * 100 + 0.5)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " et " + varlet + " cent"
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
***************************************************************

Merci d'avance




Avatar
3stone
Salut,

"Telesphore"
J'ai copié ce code un jour, mais aujourd'hui je me rends compte qu'il y a
des erreurs, en particulier, pour "vingt" et "cent". Ainsi 100,00 $ devient
la somme de "cents dollars" au lieu de "cent dollars"; 20,00 $ devient la
somme de "vingts dollars" au lieu de "vingt dollars". Il y a un "S" de trop!

Voici le code qu'il faudrait corriger:
*****************************************************************




Ici, tu peux chercher la "bonne" version...

http://access.jessy.free.fr/htm/Number/Number.htm


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
Telesphore
J'ai collé la version, mais j'ai toujours pour 100,00 $ "la somme de cents
dollars". Et de même pour 20,00$, "la somme de vingts dollars". Il ne doit
pas y avoir de "S" ici à "cent" et à "ving".

Où est le mystère, s'il y en a un?


"3stone" a écrit dans le message de
news:3fcbb955$0$2861$
Salut,

"Telesphore"
J'ai copié ce code un jour, mais aujourd'hui je me rends compte qu'il y
a


des erreurs, en particulier, pour "vingt" et "cent". Ainsi 100,00 $
devient


la somme de "cents dollars" au lieu de "cent dollars"; 20,00 $ devient
la


somme de "vingts dollars" au lieu de "vingt dollars". Il y a un "S" de
trop!



Voici le code qu'il faudrait corriger:
*****************************************************************




Ici, tu peux chercher la "bonne" version...

http://access.jessy.free.fr/htm/Number/Number.htm


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------







Avatar
Anor
Bonjour,

Telesphore :
| J'ai collé la version, mais j'ai toujours pour 100,00 $ "la somme de
| cents dollars". Et de même pour 20,00$, "la somme de vingts dollars".
| Il ne doit pas y avoir de "S" ici à "cent" et à "ving".
|
| Où est le mystère, s'il y en a un?
|
|
| "3stone" a écrit dans le message de
| news:3fcbb955$0$2861$
||
|| Ici, tu peux chercher la "bonne" version...
||
|| http://access.jessy.free.fr/htm/Number/Number.htm
||


As-tu essayé celle-ci ?
http://memoaccess.free.fr/strings.htm#Num2Char
Normalement, elle est assez respectueuse de la langue française...
--
à+
Arnaud
--------------------------------------------------
Avant toute chose : http://users.skynet.be/mpfa/
Access Memorandum - http://memoaccess.free.fr
## Réponses souhaitées sur ce forum, merci. ##
--------------------------------------------------
Avatar
Telesphore
Un très, très, très grand merci à Anor!
C'est parfait.

Hommages aux auteurs et intermédiaires, et ne pas oublier Arnaud Bolet.


"Anor" <http://memoaccess.free.fr/anor/email.htm> a écrit dans le message de
news:
Bonjour,

Telesphore :
| J'ai collé la version, mais j'ai toujours pour 100,00 $ "la somme de
| cents dollars". Et de même pour 20,00$, "la somme de vingts dollars".
| Il ne doit pas y avoir de "S" ici à "cent" et à "ving".
|
| Où est le mystère, s'il y en a un?
|
|
| "3stone" a écrit dans le message de
| news:3fcbb955$0$2861$
||
|| Ici, tu peux chercher la "bonne" version...
||
|| http://access.jessy.free.fr/htm/Number/Number.htm
||


As-tu essayé celle-ci ?
http://memoaccess.free.fr/strings.htm#Num2Char
Normalement, elle est assez respectueuse de la langue française...
--
à+
Arnaud
--------------------------------------------------
Avant toute chose : http://users.skynet.be/mpfa/
Access Memorandum - http://memoaccess.free.fr
## Réponses souhaitées sur ce forum, merci. ##
--------------------------------------------------




Avatar
3stone
"Telesphore"
grand merci à Anor!
et ne pas oublier Arnaud Bolet.



Comme dirait les Dupont...
Je dirais même plus, ne pas oublier Arnaud !


;-)))))



--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------