Transcription d'un montant chiffré en lettres

monhidjet Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
SamFish Messages postés 24 Statut Membre -
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

  1. SamFish Messages postés 24 Statut Membre 8
     
    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
    1. SamFish Messages postés 24 Statut Membre 8
       
      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
  2. SamFish Messages postés 24 Statut Membre 8
     
    Du genre 2 995,38 donnera : deux mille neuf cent quatre-vingt-quinze et 38 ?
    0