XL 2016 Convertir nombre en lettre

stephane38540

XLDnaute Nouveau
Bonjour a tous,

Est-il possible en vba de convertir des nombres en lettre, par exemple si dans une textbox j'ai "trois" je voudrais récupérer "3"

Merci d'avance

Cdlt
 

Staple1600

XLDnaute Barbatruc
Re

Je ne veux rien exprimer de particulier
Je dis juste que le site semble prendre en compte la réforme
Et que la page Mode d'emploi est intéressante à lire.

Pour le reste, personnellement, je ne vois pas l’intérêt de faire dans un VBA ce que font rapidement moults convertisseurs sur le net.
Mais ce n'est là qu'un avis personnel. ;)
 

patricktoulon

XLDnaute Barbatruc
re
bonjour le fil
@youky(BJ) si ca t’intéresse
voici la mécanique éprouvette de base de ma fonction que tu trouvera dans les ressources
tu constatera que l'array des string est considérablement réduit
et je vais jusqu'au décilliard
VB:
Sub test()
    Nblettre ("321135628714356147139110015086418878")
End Sub
'
Function Nblettre(chaine As String) As String
    Dim t, dixx&, dix&, cxx&, u&
    Ul = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf", "cent ")
    Diz = Array("", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix", "cent")
    ms = Array("", " decilliard", " decillion", " nonilliard", " nonillion", " octillard", " octillion", " septilliard", " septillion", " sextilliard", " sextillion", " quintilliard ", " Quintillion", " quadrilliard", " quadrillion", " trilliard", " trillion", " Billiard", " billion", " milliard", " million", " mille", "")
    x = UBound(ms)
    chaine = "00" & chaine
    For I = Len(chaine) - 2 To 1 Step -3
        seg = Mid(chaine, I, 3)
        cxx = Left(seg, 1): dixx = Right(seg, 2): dix = Mid(seg, 2, 1): u = Right(seg, 1)
        If cxx = 1 Then cxx = 20: cc = "" Else cc = IIf(cxx > 0, "-cents ", "")
        If dix = 9 Or dix = 7 And u >= 1 Then dix = dix - 1: u = u + 10
        If dixx > 9 And dixx < 20 Then dix = 0: u = u + 10
        If dix >= 2 And dix <= 7 And (u = 1 Or u = 11) Then et = " et " Else et = IIf(dix <> 0, "-", " ")

        Texte = Application.Trim(Application.Trim(Ul(cxx) & cc & Diz(dix) & et & Ul(u)) & " " & ms(x) & " " & Texte)
        'debug segment
        Debug.Print Application.Trim(Ul(cxx) & cc & Diz(dix) & et & Ul(u)) & " (" & seg & ")  " & ms(x)
        x = x - 1
    Next
    'debug complet
    Debug.Print Texte
End Function
libre a chacun d’extérioriser les deux array déclinés sous diverses langues