VastoMarine a écrit:En interne...
- Code : Tout sélectionner
Function ChiffreToLettre(Chiffre As Double) As String
Dim ext$, b$, b1$, result$
Dim Entier, Deci, V, i , k
V = 0
Entier = ""
Deci = ""
For i = 1 To Len(Chiffre)
If (Mid$(Chiffre, i, 1) <> "," And Mid$(Chiffre, i, 1) <> ".") And V = 0 Then
Entier = Entier & Mid$(Chiffre, i, 1)
End If
If (Mid$(Chiffre, i, 1) <> "," And Mid$(Chiffre, i, 1) <> ".") And V = 1 Then
Deci = Deci & Mid$(Chiffre, i, 1)
End If
If (Mid$(Chiffre, i, 1) = "," Or Mid$(Chiffre, i, 1) = ".") Then
V = 1
End If
Next i
'Do Until Chiffre = ""
' partie entière
Dim ByReste As Integer
Dim ByCent As Integer
ByCent = Int(Chiffre / 100)
'ByReste = Chiffre - (ByCent * 100)
Do Until Entier = ""
Select Case Int((Len(Entier) - 1) / 3)
Case 0: ext$ = ""
Case 1: ext$ = "mille "
Case 2: ext$ = "million "
Case 3: ext$ = "milliard "
End Select
K = Len(Entier) Mod 3
If K = 0 Then K = 3
b$ = Left$(Entier, K)
For i = 1 To K
b1$ = Mid$(b$, i, 1)
If (K - i + 1) <> 2 Then
Select Case b1$
Case "0": If i <> K Then result$ = result$ + "zéro "
Case "1": result$ = result$
If i <> 1 Or Len(b$) <> 3 Then
result$ = result$ + "un "
End If
Case "2": result$ = result$ + "deux "
Case "3": result$ = result$ + "trois "
Case "4": result$ = result$ + "quatre "
Case "5": result$ = result$ + "cinq "
Case "6": result$ = result$ + "six "
Case "7": result$ = result$ + "sept "
Case "8": result$ = result$ + "huit "
Case "9": result$ = result$ + "neuf "
Case "10": result$ = result$ + "dix "
End Select
Else
Select Case b1$
Case "1": result$ = result$
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "onze "
i = i + 1
Case "2": result$ = result$ + "douze "
i = i + 1
Case "3": result$ = result$ + "treize "
i = i + 1
Case "4": result$ = result$ + "quatorze "
i = i + 1
Case "5": result$ = result$ + "quinze "
i = i + 1
Case "6": result$ = result$ + "seize "
i = i + 1
Case Else: result$ = result$ + "dix "
End Select
Case "2": result$ = result$ + "vingt "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "3": result$ = result$ + "trente "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "4": result$ = result$ + "quarante "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "5": result$ = result$ + "cinquante "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "6": result$ = result$ + "soixante "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "7": result$ = result$ + "septante "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "8": result$ = result$ + "quatre vingt "
Case "9": result$ = result$ + "nonante "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
End Select
End If
If K = 3 And i = 1 Then
If ByReste = 0 Then
result$ = result$ + "cents "
Else
result$ = result$ + "cent "
End If
End If
Next i
result$ = result$ + ext$
Entier = Right$(Entier, Len(Entier) - K)
While Left$(Entier, 1) = "0"
Entier = Right$(Entier, Len(Entier) - 1)
Wend
Loop
If result$ Like "un mil*" Then result$ = Mid(result$, 4)
ChiffreToLettre = result$ + " € "
' partie décimale
result$ = ""
If Len(deci) = 1 Then deci = deci + "0"
Do Until Deci = ""
Select Case Int((Len(Deci) - 1) / 3)
Case 0: ext$ = ""
Case 1: ext$ = "mille "
Case 2: ext$ = "million "
Case 3: ext$ = "milliard "
End Select
K = Len(Deci) Mod 3
If K = 0 Then K = 3
b$ = Left$(Deci, K)
For i = 1 To K
b1$ = Mid$(b$, i, 1)
If (K - i + 1) <> 2 Then
Select Case b1$
Case "0": If i <> 2 Then result$ = result$ + "zéro "
Case "1": result$ = result$
If i <> 1 Or Len(b$) <> 3 Then
result$ = result$ + "un "
End If
Case "2": result$ = result$ + "deux "
Case "3": result$ = result$ + "trois "
Case "4": result$ = result$ + "quatre "
Case "5": result$ = result$ + "cinq "
Case "6": result$ = result$ + "six "
Case "7": result$ = result$ + "sept "
Case "8": result$ = result$ + "huit "
Case "9": result$ = result$ + "neuf "
Case "10": result$ = result$ + "dix "
End Select
Else
Select Case b1$
Case "1": result$ = result$
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "onze "
i = i + 1
Case "2": result$ = result$ + "douze "
i = i + 1
Case "3": result$ = result$ + "treize "
i = i + 1
Case "4": result$ = result$ + "quatorze "
i = i + 1
Case "5": result$ = result$ + "quinze "
i = i + 1
Case "6": result$ = result$ + "seize "
i = i + 1
Case Else: result$ = result$ + "dix "
End Select
Case "2": result$ = result$ + "vingt "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "3": result$ = result$ + "trente "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "4": result$ = result$ + "quarante "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "5": result$ = result$ + "cinquante "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "6": result$ = result$ + "soixante "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "7": result$ = result$ + "septante "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
Case "8": result$ = result$ + "quatre vingt "
Case "9": result$ = result$ + "nonante "
Select Case (Mid$(b$, i + 1, 1))
Case "1": result$ = result$ + "et "
End Select
End Select
End If
If K = 3 And i = 1 Then result$ = result$ + "cent "
Next i
Suite:
result$ = result$ + ext$
Deci = Right$(Deci, Len(Deci) - K)
While Left$(Deci, 1) = "0"
Deci = Right$(Deci, Len(Deci) - 1)
Wend
Loop
If result$ Like "un mil*" Then result$ = Mid(result$, 4)
If result$ <> "zéro " And result$ <> "" And result$ <> "un " Then ChiffreToLettre = ChiffreToLettre & " et " & result$ + " cents "
If result$ = "un " Then ChiffreToLettre = ChiffreToLettre & " et " & result$ + " cent "+ " cents "
End Function