Transcrire un chiffre en texte (VBA, Xla et Formule)
Exemple, une cellule d'un tableau me donne 1018. Pouvoir traduire automatiquement ce chiffre en "Mille dix huit" dans une autre cellule. Exemple d'application, sur un chèque, écrire le montant en chiffres et en lettres.
J'ai vu sur un numéro de l'Ordinateur Individuel que cela existait, mais je ne peux malgré une longue recherche retrouver l'article.
Merci à qui peut m'aider.
Salut le forum
Bienvenue comme nouveau membre GIV
Une fonction personnalisée (Macro)
'*************************************************************
' Fonction de conversion chiffres en lettres
'*************************************************************
Public Function somlet2(ByVal argument As Double) As String
Dim lettres As Variant
Dim unites As Variant
Dim dizaines As Variant
Dim centaines As Variant
Dim unite As Integer
Dim dix As Integer
Dim cent As Integer
Dim groupes As Variant
Dim chaine As String
Dim ng, nc As Integer
Dim i, j, k As Integer
Dim xx As String
chaine = Trim(Str(argument))
nc = Len(chaine) ' Nbre de chiffres
lettres = Array("", "mille", "million", "milliard", "billion")
unites = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix sept", "dix huit", "dix neuf")
dizaines = Array("", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante dix", "quatre vingt", "quatre vingt dix")
centaines = Array("", "cent", "deux cents", "trois cents", "quatre cents", "cinq cents", "six cents", "sept cents", "huit cents", "neuf cents")
If argument = 0 Then
somlet2 = ""
Else
If nc Mod 3 > 0 Then
ng = Int(nc / 3) + 1 ' Nbre de groupes
Else
ng = nc / 3
End If
ReDim groupes(ng - 1)
chaine = String(ng * 3 - nc, " ") & chaine
nc = Len(chaine)
j = 0
For i = nc To 1 Step -3
xx = Mid(chaine, i - 2, i)
groupes(j) = xx
j = j + 1
Next
chaine = ""
For j = 0 To UBound(groupes)
unite = Val(Mid(groupes(j), 3, 1))
dix = Val(Mid(groupes(j), 2, 1))
If dix = 1 Or dix = 7 Or dix = 9 Then
dix = dix - 1
unite = unite + 10
End If
cent = Val(Mid(groupes(j), 1, 1))
chaine = centaines(cent) & " " & dizaines(dix) & " " & unites(unite) & " " & lettres(j) & " " & chaine
Next
somlet2 = chaine
End If
End FunctionIl existe plusieurs variantes fait une recherche avec Google
Mytå
GIV a écrit :Exemple, une cellule d'un tableau me donne 1018. Pouvoir traduire automatiquement ce chiffre en "Mille dix huit" dans une autre cellule. Exemple d'application, sur un chèque, écrire le montant en chiffres et en lettres.
J'ai vu sur un numéro de l'Ordinateur Individuel que cela existait, mais je ne peux malgré une longue recherche retrouver l'article.
Merci à qui peut m'aider.
Bonsoir
Une autre solution a déjà été donnée plusieurs fois sur le Forum, en utilisant les Macros Complémentaires "Morefun" de Laurent Longres.
https://www.excel-pratique.com/forum/viewtopic.php?t=4109
Cordialement
Salut le forum
Une version sans macro de Thierry Pourtier : Le fichier
Mytå
P.S. Il ne reste qu'à faire son choix
Merci encore
Bonjour Monsieur,
pourriez vous me guider dans la manière d'utiliser votre fonction?
Merci d'avance.
Lynda.