Problème conversion chiffres en lettre avec 3 chiffre après la virgule (dinar)
Vstappers
-
PapyLuc51 Messages postés 4569 Date d'inscription Statut Membre Dernière intervention -
PapyLuc51 Messages postés 4569 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je dois convertir beaucoup de chiffre ne Lettre pour de la comptabilité.
J'ai trouvé des macro en Euro pour faire ca.
mais j'ai besoin de dinars, changer les intitulé Dinar est a ma porté.
La ou CA se complique c'est que le dinars utilise 3 chiffres après la virgule, des millime et pas des centimes
la conversion se fait mal avec mon macro
exemple 10,651 me donne dix Dinars soixante cinq millime et non dix dinars six cents cinquante et un millime.
Qlq un peux til m'aider ?
voici le macro que j'utilise, si qlq un peux le modifier ou me donner un autre , ca serait supper
Merci a vous
Function chiffrelettre(chiffre) ' Youky
Dim a As Variant, gros As Variant
a = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _
"huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix sept", _
"dix huit", "dix neuf", "vingt", "vingt et un", "vingt deux", "vingt trois", "vingt quatre", _
"vingt cinq", "vingt six", "vingt sept", "vingt huit", "vingt neuf", "trente", "trente et un", _
"trente deux", "trente trois", "trente quatre", "trente cinq", "trente six", "trente sept", _
"trente huit", "trente neuf", "quarante", "quarante et un", "quarante deux", "quarante trois", _
"quarante quatre", "quarante cinq", "quarante six", "quarante sept", "quarante huit", _
"quarante neuf", "cinquante", "cinquante et un", "cinquante deux", "cinquante trois", _
"cinquante quatre", "cinquante cinq", "cinquante six", "cinquante sept", "cinquante huit", _
"cinquante neuf", "soixante", "soixante et un", "soixante deux", "soixante trois", _
"soixante quatre", "soixante cinq", "soixante six", "soixante sept", "soixante huit", _
"soixante neuf", "soixante dix", "soixante et onze", "soixante douze", "soixante treize", _
"soixante quatorze", "soixante quinze", "soixante seize", "soixante dix sept", _
"soixante dix huit", "soixante dix neuf", "quatre-vingts", "quatre-vingt un", _
"quatre-vingt deux", "quatre-vingt trois", "quatre-vingt quatre", "quatre-vingt cinq", _
"quatre-vingt six", "quatre-vingt sept", "quatre-vingt huit", "quatre-vingt neuf", _
"quatre-vingt dix", "quatre-vingt onze", "quatre-vingt douze", "quatre-vingt treize", _
"quatre-vingt quatorze", "quatre-vingt quinze", "quatre-vingt seize", "quatre-vingt dix sept", _
"quatre-vingt dix huit", "quatre-vingt dix neuf")
gros = Array("", "billions", "milliards", "millions", "mille", "Dinars", "billion", _
"milliard", "million", "mille", "Dinar")
sp = Space(1)
chaine = "00000000000000"
millime = chiffre * 100 - (Int(chiffre) * 100)
chiffre = Str(Int(chiffre)): lg = Len(chiffre) - 1: chiffre = Right(chiffre, lg): lg = Len(chiffre)
If lg < 15 Then chaine = Mid(chaine, 1, (15 - lg)) Else chaine = ""
chiffre = chaine + chiffre
'billions au centaines
gp = 1
For k = 1 To 5
x = Mid(chiffre, gp, 1): c = a(Val(x))
x = Mid(chiffre, gp + 1, 2): d = a(Val(x))
If k = 5 Then
If t2 <> "" And c & d = "" Then mydz = "Dinars" & sp: GoTo fin
If t <> "" And c = "" And d = "un" Then mydz = "un Dinars" & sp: GoTo fin
If t <> "" And t2 = "" And c & d = "" Then mydz = "d'Dinars" & sp: GoTo fin
If t & c & d = "" Then myct = "": mydz = "": GoTo fin
End If
If c & d = "" Then GoTo fin
If d = "" And c <> "" And c <> "un" Then mydz = c & sp & "cents " & gros(k) & sp: GoTo fin
If d = "" And c = "un" Then mydz = "cent " & gros(k) & sp: GoTo fin
If d = "un" And c = "" Then myct = IIf(k = 4, gros(k) & sp, "un " & gros(k + 5) & sp): GoTo fin
If d <> "" And c = "un" Then mydz = "cent" & sp
If d <> "" And c <> "" And c <> "un" Then mydz = c & sp & "cent" + sp
myct = d & sp & gros(k) & sp
fin:
t2 = mydz & myct
t = t & mydz & myct
mydz = "": myct = ""
gp = gp + 3
Next
d = a(millime)
If t <> "" Then myct = IIf(millime = 1, " millime", " millimes")
If t = "" Then myct = IIf(millime = 1, " millime d'Dinar", " millimes d'Dinar")
If millime = 0 Then d = "": myct = ""
chiffrelettre = t & d & myct
End Function
je dois convertir beaucoup de chiffre ne Lettre pour de la comptabilité.
J'ai trouvé des macro en Euro pour faire ca.
mais j'ai besoin de dinars, changer les intitulé Dinar est a ma porté.
La ou CA se complique c'est que le dinars utilise 3 chiffres après la virgule, des millime et pas des centimes
la conversion se fait mal avec mon macro
exemple 10,651 me donne dix Dinars soixante cinq millime et non dix dinars six cents cinquante et un millime.
Qlq un peux til m'aider ?
voici le macro que j'utilise, si qlq un peux le modifier ou me donner un autre , ca serait supper
Merci a vous
Function chiffrelettre(chiffre) ' Youky
Dim a As Variant, gros As Variant
a = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _
"huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix sept", _
"dix huit", "dix neuf", "vingt", "vingt et un", "vingt deux", "vingt trois", "vingt quatre", _
"vingt cinq", "vingt six", "vingt sept", "vingt huit", "vingt neuf", "trente", "trente et un", _
"trente deux", "trente trois", "trente quatre", "trente cinq", "trente six", "trente sept", _
"trente huit", "trente neuf", "quarante", "quarante et un", "quarante deux", "quarante trois", _
"quarante quatre", "quarante cinq", "quarante six", "quarante sept", "quarante huit", _
"quarante neuf", "cinquante", "cinquante et un", "cinquante deux", "cinquante trois", _
"cinquante quatre", "cinquante cinq", "cinquante six", "cinquante sept", "cinquante huit", _
"cinquante neuf", "soixante", "soixante et un", "soixante deux", "soixante trois", _
"soixante quatre", "soixante cinq", "soixante six", "soixante sept", "soixante huit", _
"soixante neuf", "soixante dix", "soixante et onze", "soixante douze", "soixante treize", _
"soixante quatorze", "soixante quinze", "soixante seize", "soixante dix sept", _
"soixante dix huit", "soixante dix neuf", "quatre-vingts", "quatre-vingt un", _
"quatre-vingt deux", "quatre-vingt trois", "quatre-vingt quatre", "quatre-vingt cinq", _
"quatre-vingt six", "quatre-vingt sept", "quatre-vingt huit", "quatre-vingt neuf", _
"quatre-vingt dix", "quatre-vingt onze", "quatre-vingt douze", "quatre-vingt treize", _
"quatre-vingt quatorze", "quatre-vingt quinze", "quatre-vingt seize", "quatre-vingt dix sept", _
"quatre-vingt dix huit", "quatre-vingt dix neuf")
gros = Array("", "billions", "milliards", "millions", "mille", "Dinars", "billion", _
"milliard", "million", "mille", "Dinar")
sp = Space(1)
chaine = "00000000000000"
millime = chiffre * 100 - (Int(chiffre) * 100)
chiffre = Str(Int(chiffre)): lg = Len(chiffre) - 1: chiffre = Right(chiffre, lg): lg = Len(chiffre)
If lg < 15 Then chaine = Mid(chaine, 1, (15 - lg)) Else chaine = ""
chiffre = chaine + chiffre
'billions au centaines
gp = 1
For k = 1 To 5
x = Mid(chiffre, gp, 1): c = a(Val(x))
x = Mid(chiffre, gp + 1, 2): d = a(Val(x))
If k = 5 Then
If t2 <> "" And c & d = "" Then mydz = "Dinars" & sp: GoTo fin
If t <> "" And c = "" And d = "un" Then mydz = "un Dinars" & sp: GoTo fin
If t <> "" And t2 = "" And c & d = "" Then mydz = "d'Dinars" & sp: GoTo fin
If t & c & d = "" Then myct = "": mydz = "": GoTo fin
End If
If c & d = "" Then GoTo fin
If d = "" And c <> "" And c <> "un" Then mydz = c & sp & "cents " & gros(k) & sp: GoTo fin
If d = "" And c = "un" Then mydz = "cent " & gros(k) & sp: GoTo fin
If d = "un" And c = "" Then myct = IIf(k = 4, gros(k) & sp, "un " & gros(k + 5) & sp): GoTo fin
If d <> "" And c = "un" Then mydz = "cent" & sp
If d <> "" And c <> "" And c <> "un" Then mydz = c & sp & "cent" + sp
myct = d & sp & gros(k) & sp
fin:
t2 = mydz & myct
t = t & mydz & myct
mydz = "": myct = ""
gp = gp + 3
Next
d = a(millime)
If t <> "" Then myct = IIf(millime = 1, " millime", " millimes")
If t = "" Then myct = IIf(millime = 1, " millime d'Dinar", " millimes d'Dinar")
If millime = 0 Then d = "": myct = ""
chiffrelettre = t & d & myct
End Function
Configuration: Windows / Chrome 78.0.3904.70
4 réponses
-
Bonjour,
Exemple ici:
https://www.bonbache.fr/convertir-les-nombres-en-textes-en-vba-excel-165.html
Il s'agit maintenant de traduire en texte, la devise passée en paramètre ainsi que l'extension des décimales correspondante. Par exemple, on parle de Cents en Euro et de Millimes en Dinar. Pour ce faire, ajouter les lignes de code suivantes : Select Case Devise Case 0 If partieDecimale > 0 Then texteDevise = ' virgule' Case 1 texteDevise = ' Euro' If partieDecimale > 0 Then texteCentimes = ' Cents' Case 2 texteDevise = ' Dollar' If partieDecimale > 0 Then texteCentimes = ' Cent' Case 3 texteDevise = ' Dinar' If partieDecimale = 1 Then texteCentimes = ' Millime' If partieDecimale > 1 Then texteCentimes = ' Millimes' End Select
-
-
Salutations Le Pivert
Je me suis lancé sans connaitre le langage VBA ; j'ai donc suivis tes conseils donnés à Vstappers en faisant du copier/coller et en faisant les rectifications par rapport à la vidéo notamment remplacer les ' par ".
J'y ai ajouté un code que trouvé sur la toile pour avoir la description de la fonction dans la fenêtre "Arguments de la fonction"
Sub DescriptionFonction()
'Déclaration des variables
Dim NomFonction As String
Dim DescriptionFonction As String
Dim ArgumentDesc(1 To 3) As String
'Affectation des variables
NomFonction = "NbEnLettres"
DescriptionFonction = "Permet de convertir un montant en toutes lettres"
ArgumentDesc(1) = "Montant à convertir"
ArgumentDesc(2) = "0 ou omis= pas de devise inscription du mot virgule ; 1= Euro ; 2= Dollar ; 3= Dinar"
ArgumentDesc(3) = "0 ou omis= français ; 1= belge ; 2= suisse"
'permet d'insérer la fonction dans la bibliothèque des fonctions d'excel
Application.MacroOptions _
Macro:=NomFonction, _
Description:=DescriptionFonction, _
Argumentdescriptions:=ArgumentDesc
End Sub
J'ai suivi les indications de la vidéo pour enregistrer le fichier .xlam au bon endroit
Cordialement
-