Code pour transformer des chiffres en texte
Bonjour
Je cherche un code qui permet de transformer des chiffres en texte. Par exemple transformer 200 en deux cent, 180 en cent quatre vingt, 21 en Vingt et un etc...
Option Explicit
Public Numbers As Variant, Tens As Variant
Sub SetNums()
Numbers = 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", "septante", "quatre-vingt", "nonante")
End Sub
Function WordNumFr(MyNumber As Double) As String
Dim DecimalPosition As Integer, ValNo As Variant, StrNo As String
Dim NumStr As String, n As Integer, Temp1 As String, Temp2 As String
If Abs(MyNumber) > 999999999 Then
WordNumFr = "Value too large"
Exit Function
End If
SetNums
' String representation of amount (excl decimals)
NumStr = Right("000000000" & Trim(Str(Int(Abs(MyNumber)))), 9)
ValNo = Array(0, Val(Mid(NumStr, 1, 3)), Val(Mid(NumStr, 4, 3)), Val(Mid(NumStr, 7, 3)))
For n = 3 To 1 Step -1 'analyse the absolute number as 3 sets of 3 digits
StrNo = Format(ValNo(n), "000")
If ValNo(n) > 0 Then
Temp1 = GetTens(Val(Right(StrNo, 2)))
If Left(StrNo, 1) <> "0" Then
Temp2 = Numbers(Val(Left(StrNo, 1))) & " cent"
If Temp1 <> "" Then Temp2 = Temp2 & ""
Else
Temp2 = ""
End If
If n = 3 Then
If Temp2 = "" And ValNo(1) + ValNo(2) > 0 Then Temp2 = ""
WordNumFr = Trim(Temp2 & Temp1)
End If
If n = 2 Then WordNumFr = Trim(Temp2 & Temp1 & " mille " & WordNumFr)
If n = 1 Then WordNumFr = Trim(Temp2 & Temp1 & " million " & WordNumFr)
End If
Next n
NumStr = Trim(Str(Abs(MyNumber)))
' Values after the decimal place
DecimalPosition = InStr(NumStr, ",")
Numbers(0) = "zéro"
If DecimalPosition > 0 And DecimalPosition < Len(NumStr) Then
Temp1 = " virgule"
For n = DecimalPosition + 1 To Len(NumStr)
Temp1 = Temp1 & " " & Numbers(Val(Mid(NumStr, n, 1)))
Next n
WordNumFr = WordNumFr & Temp1
End If
If Len(WordNumFr) = 0 Or Left(WordNumFr, 2) = " p" Then
WordNumFr = "zéro" & WordNumFr
End If
End Function
Function GetTens(TensNum As Integer) As String
' Converts a number from 0 to 99 into text.
If TensNum <= 19 Then
GetTens = Numbers(TensNum)
Else
Dim MyNo As String
MyNo = Format(TensNum, "00")
GetTens = Tens(Val(Left(MyNo, 1))) & " " & Numbers(Val(Right(MyNo, 1)))
End If
End Function
Le code que j'ai trouvé et en anglais et ne fonctionne pas super bien.
Bonjour,
Ça existe déjà, c'est pas très compliqué à faire, mais tout de même plutôt fastidieux...
Bon courage
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonjour,
Tu trouveras sans doute ton bonheur ici :
https://forum.excel-pratique.com/excel/convertir-somme-en-toute-lettre-t34677.html
Bouben