Ceci est la version Vb du code présenté au post précédent.
Voici un code que je souhaitais partager de puis bien longtemps: il se charge d' opérer la conversion d'un montant représenté par un entier vers sa représentation en toutes lettres.
''' <summary>
''' Convertion d'un montant en toutes lettres
''' </summary>
''' <param name="value"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function Int2Lettres(ByVal value As Int32) As String
'en cas de besoin pour vérifier l'orthographe
'http://orthonet.sdv.fr/pages/lex_nombres.html
Dim division As Int32
Dim reste As Int32
Dim sb As StringBuilder
Try
'Test l'état null
If value = 0 Then Return "zéro"
'Décomposition de la valeur en milliards, millions, milliers,...
sb = New StringBuilder()
'milliard
division = Math.DivRem(value, 1000000000, reste)
If division > 0 Then
Int2LettresBloc(sb, division)
sb.Append(" milliard")
If (division > 1) Then sb.Append("s")
End If
If (reste > 0) Then
'million
value = reste
division = Math.DivRem(value, 1000000, reste)
If (division > 0) Then
If (sb.Length > 0) Then sb.Append(" ")
Int2LettresBloc(sb, division)
sb.Append(" million")
If (division > 1) Then sb.Append("s")
End If
If (reste > 0) Then
'milliers
value = reste
division = Math.DivRem(value, 1000, reste)
If (division > 0) Then
If (sb.Length > 0) Then sb.Append(" ")
If (division = 1) Then
sb.Append("mille")
Else
Int2LettresBloc(sb, division)
sb.Append(" mille")
End If
End If
If (reste > 0) Then
'reste
If (sb.Length > 0) Then sb.Append(" ")
Int2LettresBloc(sb, reste)
End If
End If
End If
Return sb.ToString()
Catch ex As Exception
Debug.WriteLine(ex.Message)
Return String.Empty
Finally
sb = Nothing
End Try
End Function
''' <summary>
''' Retourne la conversion d'un bloc de 3 bloc
''' </summary>
''' <param name="sb"></param>
''' <param name="value"></param>
''' <remarks></remarks>
Private Shared Sub Int2LettresBloc(ByVal sb As StringBuilder, ByVal value As Int32)
Dim b_centaines As Boolean
Dim division As Int32
Dim reste As Int32
Try
division = Math.DivRem(value, 100, reste)
'Test si des centaines sont présentes
If (division > 0) Then
'ajout des centaines à la sortie
Select Case division
Case 1
sb.Append("cent")
Case Else
Int2LettresBase(sb, division)
sb.Append(" cent")
End Select
b_centaines = True
Else
b_centaines = False
End If
'Test si il reste des éléments apres les centaines
If (reste > 0) Then
'Introduction d'un espace si on a intégré des centaines
If (b_centaines) Then sb.Append(" ")
'Calcul des dixaines et de leurs reste
value = reste
division = Math.DivRem(value, 10, reste)
Select Case division
Case 0, 1, 7, 9
Int2LettresBase(sb, value)
Case Else
Int2LettresBase(sb, division * 10)
If (reste > 0) Then
If (reste = 1) Then
sb.Append(" et un")
Else
sb.Append("-")
Int2LettresBase(sb, reste)
End If
End If
End Select
End If
Catch ex As Exception
Debug.WriteLine(ex.Message)
End Try
End Sub
Private Shared Sub Int2LettresBase(ByVal sb As StringBuilder, ByVal value As Int32)
Select Case value
Case 0 : sb.Append("zéro")
Case 1 : sb.Append("un")
Case 2 : sb.Append("deux")
Case 3 : sb.Append("trois")
Case 4 : sb.Append("quatre")
Case 5 : sb.Append("cinq")
Case 6 : sb.Append("six")
Case 7 : sb.Append("sept")
Case 8 : sb.Append("huit")
Case 9 : sb.Append("neuf")
Case 10 : sb.Append("dix")
Case 11 : sb.Append("onze")
Case 12 : sb.Append("douze")
Case 13 : sb.Append("treize")
Case 14 : sb.Append("quatorze")
Case 15 : sb.Append("quinze")
Case 16 : sb.Append("seize")
Case 17 : sb.Append("dix-sept")
Case 18 : sb.Append("dix-huit")
Case 19 : sb.Append("dix-neuf")
Case 20 : sb.Append("vingt")
Case 30 : sb.Append("trente")
Case 40 : sb.Append("quarante")
Case 50 : sb.Append("cinquante")
Case 60 : sb.Append("soixante")
Case 70 : sb.Append("soixante-dix")
Case 71 : sb.Append("soixante et onze")
Case 72 : sb.Append("soixante-douze")
Case 73 : sb.Append("soixante-treize")
Case 74 : sb.Append("soixante-quatorze")
Case 75 : sb.Append("soixante-quinze")
Case 76 : sb.Append("soixante-seize")
Case 77 : sb.Append("soixante-dix-sept")
Case 78 : sb.Append("soixante-dix-huit")
Case 79 : sb.Append("soixante-dix-neuf")
Case 80 : sb.Append("quatre-vingt")
Case 90 : sb.Append("quatre-vingt-dix")
Case 91 : sb.Append("quatre-vingt-onze")
Case 92 : sb.Append("quatre-vingt-douze")
Case 93 : sb.Append("quatre-vingt-treize")
Case 94 : sb.Append("quatre-vingt-quatorze")
Case 95 : sb.Append("quatre-vingt-quinze")
Case 96 : sb.Append("quatre-vingt-seize")
Case 97 : sb.Append("quatre-vingt-dix-sept")
Case 98 : sb.Append("quatre-vingt-dix-huit")
Case 99 : sb.Append("quatre-vingt-dix-neuf")
Case 100 : sb.Append("cent")
Case Else 'RAS
End Select
End Sub