Transcription d'un montant chiffré en lettres

Fermé
monhidjet Messages postés 2 Date d'inscription jeudi 6 décembre 2012 Statut Membre Dernière intervention 6 décembre 2012 - 6 déc. 2012 à 14:25
SamFish Messages postés 21 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 14 décembre 2012 - 11 déc. 2012 à 14:14
Bonjour,
je voudrais pouvoir transcrire le montant d'une facture ou d'un état financier en lettres dans Microsoft ofice Excel 2007.
Merci de m'aider en me communiquant le code


2 réponses

SamFish Messages postés 21 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 14 décembre 2012 8
11 déc. 2012 à 14:10
Function chiffre_a_lettre(s)
Rem SamFish 2012.10.12 M.P.
Rem Rethinking de la fonction existante Chiffrelettre en essayant d'avoir un array moins important
Rem au niveau des unites et en traitant les 10-19, 70-73 et 90-93 en passant par un if supplementaire.

Rem Cette fonction calcule le nombre de fois qu'elle doit boucler selon la "longueur" du chiffre.
Rem on traite chaque itération par groupe de 3 chiffres, soit les centaines, dizaines et unites.
Rem Les chiffres après la décimale sont traités après la boucle.


Dim un_l As Variant, dix_l As Variant, cnet_l As Variant
unite_l = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf")
dix_a_dixneuf_l = Array("dix", "onze", "douxe", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf")
diz_l = Array("", "", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante", "quatre-vingt", "quatre-vingt")
cent_l = Array("", "mille", "million", "milliard")

Phrase = ""
Rem On calcule le nombre de fois qu'on va boucler, selon la "longueur" de notre chiffe.
nb_iter = Int(Len(Str(Int(s))) / 3)
chif_entier = Int(s)
i = nb_iter
While i >= 0
Rem Dans la boucle, on travaille seulement le nombre entier.
Rem et a chaque fois, on va chercher les centaines dizaines et unites
Rem Par exemple, pour 7 125 490 273, on traite le 7, puis 125, 490 et enfin 273.
nb_part = (Int(chif_entier / (10 ^ (3 * i))))

nb_part_trav = nb_part
If nb_part_trav > 0 Then
nb_cent = Int(nb_part_trav / 100)

If nb_cent > 0 Then
If (nb_cent > 1) Then
Phrase = Phrase & " " & unite_l(nb_cent)
End If
Phrase = Phrase & " cent "
nb_part_trav = nb_part_trav - (nb_cent * 100)
End If
nb_diz = Int(nb_part_trav / 10)
If nb_diz > 0 Then
Rem On verifie si un chiffre de 1 à 13, 70 à 79 ou 90 à 99 pour bien
Rem les traiter

If (nb_diz <> 1 And nb_diz <> 7 And nb_diz <> 9) Then
Phrase = Phrase & " " & diz_l(nb_diz)
nb_part_trav = nb_part_trav - (nb_diz * 10)
nb_unit = nb_part_trav
If nb_unit > 0 Then
Phrase = Phrase & " " & unite_l(nb_unit)
End If
Else
Phrase = Phrase & " " & diz_l(nb_diz)
nb_part_trav = nb_part_trav - (nb_diz * 10)
nb_unit = nb_part_trav
Phrase = Phrase & " " & dix_a_dixneuf_l(nb_unit)
End If
Else
If (i = 1 And nb_part_trav = 1) Then
Phrase = Phrase & " "
Else
Phrase = Phrase & " " & unite_l(nb_part_trav)
End If
End If

Phrase = Phrase & " " & cent_l(i)
End If
chif_entier = chif_entier - (nb_part * (10 ^ (3 * i)))
i = i - 1
Wend

nb_centiemes = (s * 100) - (Int(s) * 100)

If nb_centiemes > 0 Then
nb_part_trav = nb_centiemes
Phrase = Phrase & " et "

nb_diz = Int(nb_part_trav / 10)
If nb_diz > 0 Then
If (nb_diz <> 1 And nb_diz <> 7 And nb_diz <> 9) Then
Phrase = Phrase & " " & diz_l(nb_diz)
nb_part_trav = nb_part_trav - (nb_diz * 10)

If nb_part_trav > 0 Then
Phrase = Phrase & " " & unite_l(nb_part_trav)
End If
Else
Phrase = Phrase & " " & diz_l(nb_diz)
nb_part_trav = nb_part_trav - (nb_diz * 10)
nb_unit = nb_part_trav
Phrase = Phrase & " " & dix_a_dixneuf_l(nb_unit)
End If
Else
Phrase = Phrase & " " & unite_l(nb_part_trav)
End If

test = (nb_part * (10 ^ (3 * i)))
chif_entier = chif_entier - (nb_part * (10 ^ (3 * i)))

Phrase = Phrase & " sous."
End If

Rem On retourne la chaine de caractère à l'appelant
chiffre_a_lettre = Phrase
End Function
1
SamFish Messages postés 21 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 14 décembre 2012 8
11 déc. 2012 à 14:14
Comme dans l'exemple Convertir un montant en chiffre en lettre (Résolu) » Forum - Bureautique,
J'ai repris et changé la façon de traiter le montant pour le convertir en lettre. Il reste à peaufiner le tout afin d'obtenir une chaine avec les majuscules aux bons endroits et de remplacer les sous par des centimes ou autres. Il suffit d'ajouter la formule aux fonctions dans Visual Basic Editor et d'appeler celle-ci dans une cellule.
0
SamFish Messages postés 21 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 14 décembre 2012 8
6 déc. 2012 à 17:27
Du genre 2 995,38 donnera : deux mille neuf cent quatre-vingt-quinze et 38 ?
0