Convertir un nombre en lettres dans Excel

Vous avez besoin d’afficher des montants en toutes lettres dans Excel, comme sur une facture ou un devis ?
Malheureusement, Excel ne propose pas de fonction intégrée pour convertir un chiffre en lettres… sauf pour le thaï avec BAHTTEXT().
Mais pas de panique 😄 !
Dans ce tutoriel, nous allons voir comment créer facilement votre propre fonction VBA pour convertir un nombre en lettres en français.
 

⚙️ Étape 1: Ouvrir l’éditeur VBA
  • Ouvrez votre fichier Excel.
  • Appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
  • Cliquez sur Insertion → Module.
  • Une nouvelle fenêtre vide s’ouvre: c’est ici que vous allez coller le code.

 

💻 Étape 2: Coller le code VBA

Copiez-collez le code ci-dessous dans le module :

Option Explicit

Function NumEnLettre(ByVal MyNumber)
    Dim Units As Variant, Tens As Variant
    Dim Result As String
    Dim NumberValue As Double
    Dim DecimalPart As String
    
    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")
    
    NumberValue = Int(MyNumber)
    
    If NumberValue = 0 Then
        Result = "zéro"
    Else
        Result = ConvertNumberToWords(NumberValue)
    End If
    
    DecimalPart = Format(MyNumber - Int(MyNumber), "0.00")
    DecimalPart = Right(DecimalPart, 2)
    If DecimalPart <> "00" Then
        Result = Result & " et " & DecimalPart & "/100"
    End If
    
    NumEnLettre = Result
End Function

Function ConvertNumberToWords(ByVal Number As Long) As String
    Dim Units As Variant, Tens As Variant
    Dim Result As String
    Dim ten As Long, unit As Long
    Dim hundreds As Long, remainder As Long
    Dim thousands As Long
    
    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")
    
    If Number < 17 Then
        Result = Units(Number)
    ElseIf Number < 20 Then
        Result = "dix-" & Units(Number - 10)
    ElseIf Number < 100 Then
        ten = Int(Number / 10)
        unit = Number Mod 10
        If ten = 7 Or ten = 9 Then
            Result = Tens(ten) & "-" & Units(10 + unit)
        Else
            Result = Tens(ten)
            If unit > 0 Then
                Result = Result & "-" & Units(unit)
            End If
        End If
    ElseIf Number < 1000 Then
        hundreds = Int(Number / 100)
        remainder = Number Mod 100
        If hundreds = 1 Then
            Result = "cent"
        Else
            Result = Units(hundreds) & " cent"
        End If
        If remainder > 0 Then
            Result = Result & " " & ConvertNumberToWords(remainder)
        End If
    ElseIf Number < 1000000 Then
        thousands = Int(Number / 1000)
        remainder = Number Mod 1000
        If thousands = 1 Then
            Result = "mille"
        Else
            Result = ConvertNumberToWords(thousands) & " mille"
        End If
        If remainder > 0 Then
            Result = Result & " " & ConvertNumberToWords(remainder)
        End If
    Else
        Result = "Nombre trop grand"
    End If
    
    ConvertNumberToWords = Result
End Function

 

📊 Étape 3: Utiliser la fonction dans Excel

Revenez dans votre feuille Excel (Alt + Q pour fermer VBA). Dans une cellule, tapez:

=NombreEnLettre(A1)

Si la cellule A1 contient 123, le résultat affichera: cent vingt-trois
 

🚀 Conclusion

Et voilà ! En quelques lignes de VBA, vous venez d’ajouter à Excel une fonction que même Microsoft n’a jamais intégrée 😎.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *