Magazine Internet

[Vb] Écriture d'un nombre en lettres

Publié le 28 janvier 2009 par Jeremy.jeanson

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

Retour à La Une de Logo Paperblog

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossiers Paperblog