Problème conversion chiffres en lettre avec 3 chiffre après la virgule (dinar)

Fermé
Vstappers - 5 nov. 2019 à 13:07
PapyLuc51 Messages postés 4302 Date d'inscription dimanche 3 mai 2009 Statut Membre Dernière intervention 25 avril 2024 - 11 nov. 2019 à 09:22
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





Configuration: Windows / Chrome 78.0.3904.70
A voir également:

4 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
5 nov. 2019 à 14:17
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


0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 6 nov. 2019 à 11:49
Il suffit de suivre la procédure

Bon courage

@+ Le Pivert
0
PapyLuc51 Messages postés 4302 Date d'inscription dimanche 3 mai 2009 Statut Membre Dernière intervention 25 avril 2024 1 406
7 nov. 2019 à 16:16
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
0