Créer une fonction pour écrire des montants en lettres (FR + EN)
Bonjour,
Je souhaite adapter ce code pour que des montants, qui doivent rester au format 204 008,95 €, soient traduits en lettres en français puis une autre fonction pour traduire exactement le même montant mais avec le texte en anglais
Code:
Function ConvertToWords(ByVal Amount As String) As String
Dim units As Variant
Dim tens As Variant
Dim hundreds As Variant
Dim result As String
Dim wholePart As Long
Dim fractionalPart As Long
' Définir les unités, dizaines, centaines en français
units = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf")
tens = Array("", "", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante", "quatre-vingt", "quatre-vingt")
hundreds = Array("", "cent", "deux cents", "trois cents", "quatre cents", "cinq cents", "six cents", "sept cents", "huit cents", "neuf cents")
' Enlever les espaces et les symboles non numériques (comme l'euro)
Amount = Replace(Amount, " €", "")
Amount = Replace(Amount, " ", "") ' Retirer les espaces éventuels
' Vérifier si le montant est valide
If Not IsNumeric(Amount) Then
ConvertToWords = "Valeur incorrecte"
Exit Function
End If
' Convertir le montant en un nombre
Amount = CDbl(Amount)
' Extraire la partie entière (avant la virgule) et la partie décimale (après la virgule)
wholePart = Int(Amount)
fractionalPart = Round((Amount - wholePart) * 100)
' Conversion de la partie entière en mots
result = ConvertIntegerToWords(wholePart, units, tens, hundreds)
' Ajouter la partie centimes si elle existe
If fractionalPart > 0 Then
result = result & " et " & ConvertIntegerToWords(fractionalPart, units, tens, hundreds) & " centimes"
End If
' Ajouter "euros" pour la partie entière
result = result & " euros"
ConvertToWords = result
End Function
Private Function ConvertIntegerToWords(ByVal number As Long, units As Variant, tens As Variant, hundreds As Variant) As String
Dim result As String
Dim n As Long
Dim hundredsPlace As Long
Dim tensPlace As Long
Dim onesPlace As Long
result = ""
n = number
' Centaines
hundredsPlace = Int(n / 100)
If hundredsPlace > 0 Then
result = result & hundreds(hundredsPlace) & " "
n = n Mod 100
End If
' Dizaines et unités
If n >= 20 Then
tensPlace = Int(n / 10)
onesPlace = n Mod 10
result = result & tens(tensPlace) & "-"
If onesPlace > 0 Then
result = result & units(onesPlace)
End If
ElseIf n > 0 Then
result = result & units(n)
End If
' Supprimer l'espace ou tiret de trop
ConvertIntegerToWords = Trim(result)
End Functionedit moderation : code mis entre balises via bouton </>, merci d'y penser à l'avenir.
Merci d'avance pour votre aide
Hello,
d'abord es-tu sûr que ton code fonctionne ? parce que moi avec un Excel 2016 et ce code pour tester la fonction :
Sub TestConvert()
Debug.Print ConvertToWords("204 008,95 €")
End Subj'ai un message d'erreur l'index n'appartient pas à la sélection sur cette ligne :
result = result & hundreds(hundredsPlace) & " "Ami calmant, J.P
Bonjour J P,
Merci pour le retour
Non ce code ne fonctionne pas mais je ne trouve pas l'erreur et la manière de l'adapter
Bonjour
Ci joint une macro complementaire qui fait le job ...
La fonction demande 3 paramètres :
Nombre est le nombre que vous désirez convertir en lettre, vous pouvez sélectionner une cellule ou tapez un nombre
Devise est un chiffre entre 0 et 2 pour indiquer la devise. 0 Par défaut (si vous ne remplissez pas ce paramètre)
0 aucune, 1 Euro, 2 Dollar $
Langue est un chiffre entre 0 et 2 pour indiquer la langue francophone que vous utilisez. 0 Par défaut (si vous ne remplissez pas ce paramètre)
0 Français, 1 Belgique, 2 Suisse
La conversion est limitée à 999 999 999 999 999 ou 9 999 999 999 999,99
Si le nombre contient plus de 2 décimales, il est arrondi à 2 décimales.
Je l'ai installé sur mon ordi
Ensuite dans excel: Fichier/options/complement/atteindre/parcourir...
Ensuite dans une cellule d'excel: =Chiffreenlettre(29514.32;1;0)
A+ François
Bonjour fanfan38,
Merci pour ce retour
C'est exactement le programme dont j'ai besoin!
Comment je pourrais adapter ce code pour ne gérer qu'une devise, les montants en chiffres seront toujours en € et pour les langues je n'ai besoin que de français avec centimes au lieu de Cents et anglais avec cents au lieu de Cents ?
J'aimerais également ajouter "et" ou "and" avant la traduction des centimes/cents
Merci
Un fichier avec macro qui fait le TAF en français... Pour l'anglais... je sais pas faire
A+ François
ps: perso j'ai d'abord désactivé la fonction précédante (developeur/complt excel => decocher chiffreenlettre)
Merci Fanfan38 pour ce retour