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
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
A voir également:
- Montant en lettre
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Application pour écrire les chiffre en lettre - Télécharger - Outils professionnels
- Caractere speciaux lettre - Guide
- Changer lettre disque dur - Guide
- Excel mois en lettre ✓ - Forum Bureautique
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
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
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
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
6 déc. 2012 à 17:27
Du genre 2 995,38 donnera : deux mille neuf cent quatre-vingt-quinze et 38 ?
11 déc. 2012 à 14:14
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.