begin process at 2012 02 12 17:56:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Modules

 > CONVERSION D'UN CHIFFRE EN LETTRE

CONVERSION D'UN CHIFFRE EN LETTRE


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Modules Source .NET ( DotNet ) Classé sous :chiffre, lettre, conversion Niveau :Débutant Date de création :13/09/2006 Date de mise à jour :14/09/2006 10:03:43 Vu :58 362

Auteur : Berurier

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Ce module permet de convertir un chiffre entier de 0 à 99999999999999.

La méthode utilisée est la décomposition du chiffre par récursivité.
nous divisons le chiffre par les éléments suivant :
10^9 (milliard)
10^6 (million)
10^3 (millier)
100  (centaine)
10   (dizaine)
enfin il reste l'unité

Ex : 200905 = (2* 100 *1000) + (9 *100)  + 5
soit       (deux * cent * mille) +  (neuf * cent)  + cinq


Source

  • ' Conversion de chiffre en lettre de 0 à 1999 milliard 999 999 999
  • Module ChLettre
  • Dim chiffre() As String
  • Dim dizaine() As String
  • Dim chaine As String
  • Private Sub init()
  • ReDim dizaine(7) ' *** tableau contenant les noms des dizaines
  • dizaine(1) = "dix"
  • dizaine(2) = "vingt"
  • dizaine(3) = "trente"
  • dizaine(4) = "quarante"
  • dizaine(5) = "cinquante"
  • dizaine(6) = "soixante"
  • ReDim chiffre(20) ' *** tableau contenant le nom des 19 premiers nombres en lettres
  • chiffre(1) = "un"
  • chiffre(2) = "deux"
  • chiffre(3) = "trois"
  • chiffre(4) = "quatre"
  • chiffre(5) = "cinq"
  • chiffre(6) = "six"
  • chiffre(7) = "sept"
  • chiffre(8) = "huit"
  • chiffre(9) = "neuf"
  • chiffre(10) = "dix"
  • chiffre(11) = "onze"
  • chiffre(12) = "douze"
  • chiffre(13) = "treize"
  • chiffre(14) = "quatorze"
  • chiffre(15) = "quinze"
  • chiffre(16) = "seize"
  • chiffre(17) = "dix-sept"
  • chiffre(18) = "dix-huit"
  • chiffre(19) = "dix-neuf"
  • End Sub
  • Public Function NBLT(ByVal nb As Long) As String
  • Call init()
  • If nb = 0 Then
  • NBLT = "Zéro"
  • Exit Function
  • End If
  • chaine = ""
  • Decompose(nb)
  • chaine = Replace(chaine, " ", " ")
  • chaine = Replace(chaine, "- ", "-")
  • NBLT = chaine
  • End Function
  • Private Function Decompose(ByVal Nombre As Long) As String
  • Dim Reste As Long
  • If Nombre > (10 ^ 9) Then
  • Reste = Nombre Mod (10 ^ 9)
  • Nombre = Nombre \ (10 ^ 9)
  • If Nombre > 10 Then
  • Decompose(Nombre)
  • Else
  • chaine += chiffre(Convert.ToInt16(Nombre))
  • End If
  • chaine += " milliard"
  • If Nombre > 1 Then chaine += "s"
  • Decompose(Reste)
  • Else
  • If Nombre > (10 ^ 6) Then
  • Reste = Nombre Mod (10 ^ 6)
  • Nombre = Nombre \ (10 ^ 6)
  • If Nombre > 10 Then
  • Decompose(Nombre)
  • Else
  • chaine += " " & chiffre(Convert.ToInt16(Nombre))
  • End If
  • chaine += " million"
  • If Nombre > 1 Then chaine += "s"
  • Decompose(Reste)
  • Else
  • If Nombre >= (10 ^ 3) Then
  • Reste = Nombre Mod (10 ^ 3)
  • Nombre = Nombre \ (10 ^ 3)
  • If Nombre > 10 Then
  • Decompose(Nombre)
  • Else
  • If Nombre > 1 Then chaine += " " & chiffre(Convert.ToInt16(Nombre))
  • End If
  • chaine += " mille"
  • Decompose(Reste)
  • Else
  • If Nombre >= (100) Then
  • Reste = Nombre Mod (100)
  • Nombre = Nombre \ (100)
  • If Nombre > 10 Then
  • Decompose(Nombre)
  • Else
  • If Nombre > 1 Then chaine += " " & chiffre(Convert.ToInt16(Nombre))
  • End If
  • chaine += " cent"
  • If Nombre > 1 And Reste = 0 Then chaine += "s"
  • Decompose(Reste)
  • Else
  • If Nombre >= 80 And Nombre < 100 Then
  • Reste = Nombre Mod 20
  • Nombre = Nombre \ 20
  • If Nombre > 10 Then
  • Decompose(Nombre)
  • Else
  • chaine += " " & chiffre(Convert.ToInt16(Nombre))
  • End If
  • chaine += "-vingt"
  • Decompose(Reste)
  • Else
  • If Nombre < 20 And Nombre > 9 Then
  • chaine += " " & chiffre(Convert.ToInt16(Nombre))
  • Else
  • If Nombre > 19 And Nombre < 70 Then
  • Reste = Nombre Mod 10
  • Nombre = Nombre \ 10
  • If Nombre > 10 Then
  • Decompose(Nombre)
  • Else
  • chaine += " " & dizaine(Convert.ToInt16(Nombre))
  • End If
  • If Reste = 1 Then
  • chaine += " et" ' Cas particlier (Ving et un , trante et un , etc...)
  • Else
  • If Reste <> 0 Then chaine += "-"
  • End If
  • Decompose(Reste)
  • Else
  • If Nombre >= 70 Then
  • chaine += " soixante"
  • Reste = Nombre - 60
  • If Reste = 1 Or Reste = 11 Then chaine += " et"
  • Decompose(Reste)
  • Else
  • If Nombre < 10 Then chaine += " " & chiffre(Convert.ToInt16(Nombre))
  • End If
  • End If
  • End If
  • End If
  • End If
  • End If
  • End If
  • End If
  • End Function
  • End Module
' Conversion de chiffre en lettre de 0 à 1999 milliard 999 999 999
Module ChLettre
    Dim chiffre() As String
    Dim dizaine() As String
    Dim chaine As String

    Private Sub init()
        ReDim dizaine(7) ' *** tableau contenant les noms des dizaines
        dizaine(1) = "dix"
        dizaine(2) = "vingt"
        dizaine(3) = "trente"
        dizaine(4) = "quarante"
        dizaine(5) = "cinquante"
        dizaine(6) = "soixante"


        ReDim chiffre(20) ' *** tableau contenant le nom des 19 premiers nombres en lettres
        chiffre(1) = "un"
        chiffre(2) = "deux"
        chiffre(3) = "trois"
        chiffre(4) = "quatre"
        chiffre(5) = "cinq"
        chiffre(6) = "six"
        chiffre(7) = "sept"
        chiffre(8) = "huit"
        chiffre(9) = "neuf"
        chiffre(10) = "dix"
        chiffre(11) = "onze"
        chiffre(12) = "douze"
        chiffre(13) = "treize"
        chiffre(14) = "quatorze"
        chiffre(15) = "quinze"
        chiffre(16) = "seize"
        chiffre(17) = "dix-sept"
        chiffre(18) = "dix-huit"
        chiffre(19) = "dix-neuf"
    End Sub
    Public Function NBLT(ByVal nb As Long) As String
        Call init()
        If nb = 0 Then
            NBLT = "Zéro"
            Exit Function
        End If
        chaine = ""
        Decompose(nb)
        chaine = Replace(chaine, "  ", " ")
        chaine = Replace(chaine, "- ", "-")
        NBLT = chaine
    End Function
    Private Function Decompose(ByVal Nombre As Long) As String
        Dim Reste As Long
        If Nombre > (10 ^ 9) Then

            Reste = Nombre Mod (10 ^ 9)
            Nombre = Nombre \ (10 ^ 9)

            If Nombre > 10 Then
                Decompose(Nombre)
            Else
                chaine += chiffre(Convert.ToInt16(Nombre))
            End If

            chaine += " milliard"
            If Nombre > 1 Then chaine += "s"

            Decompose(Reste)

        Else

            If Nombre > (10 ^ 6) Then

                Reste = Nombre Mod (10 ^ 6)
                Nombre = Nombre \ (10 ^ 6)

                If Nombre > 10 Then
                    Decompose(Nombre)
                Else
                    chaine += " " & chiffre(Convert.ToInt16(Nombre))

                End If

                chaine += " million"
                If Nombre > 1 Then chaine += "s"

                Decompose(Reste)

            Else
                If Nombre >= (10 ^ 3) Then

                    Reste = Nombre Mod (10 ^ 3)
                    Nombre = Nombre \ (10 ^ 3)

                    If Nombre > 10 Then
                        Decompose(Nombre)
                    Else
                        If Nombre > 1 Then chaine += " " & chiffre(Convert.ToInt16(Nombre))
                    End If

                    chaine += " mille"

                    Decompose(Reste)

                Else

                    If Nombre >= (100) Then

                        Reste = Nombre Mod (100)
                        Nombre = Nombre \ (100)

                        If Nombre > 10 Then
                            Decompose(Nombre)
                        Else
                            If Nombre > 1 Then chaine += " " & chiffre(Convert.ToInt16(Nombre))
                        End If

                        chaine += " cent"
                        If Nombre > 1 And Reste = 0 Then chaine += "s"

                        Decompose(Reste)

                    Else

                        If Nombre >= 80 And Nombre < 100 Then

                            Reste = Nombre Mod 20
                            Nombre = Nombre \ 20

                            If Nombre > 10 Then
                                Decompose(Nombre)
                            Else
                                chaine += " " & chiffre(Convert.ToInt16(Nombre))
                            End If

                            chaine += "-vingt"

                            Decompose(Reste)

                        Else

                            If Nombre < 20 And Nombre > 9 Then

                                chaine += " " & chiffre(Convert.ToInt16(Nombre))

                            Else

                                If Nombre > 19 And Nombre < 70 Then

                                    Reste = Nombre Mod 10
                                    Nombre = Nombre \ 10

                                    If Nombre > 10 Then
                                        Decompose(Nombre)
                                    Else
                                        chaine += " " & dizaine(Convert.ToInt16(Nombre))
                                    End If

                                    If Reste = 1 Then
                                        chaine += " et" ' Cas particlier (Ving et un , trante et un , etc...)
                                    Else
                                        If Reste <> 0 Then chaine += "-"
                                    End If

                                    Decompose(Reste)

                                Else

                                    If Nombre >= 70 Then

                                        chaine += " soixante"
                                        Reste = Nombre - 60

                                        If Reste = 1 Or Reste = 11 Then chaine += " et"

                                        Decompose(Reste)

                                    Else

                                        If Nombre < 10 Then chaine += " " & chiffre(Convert.ToInt16(Nombre))

                                    End If

                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End Function
End Module

 Conclusion

Il a fallu adapté un peu le code en fonction des cas particuliers.(ex: 70,80,90)
Je reste à votre disposition pout toutes questions, commentaires et améliorations.


 Historique

14 septembre 2006 10:03:43 :
Je te remercie de tes remarques. J'ai donc revu le code en conséquence.

 Sources du même auteur

CONTRÔLE DE LA SAISIE D'UN NOMBRE DANS UN TEXTBOX

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) CRYPTAGE ET DECRYPTAGE par jerichez
Source avec Zip Source avec une capture Source .NET (Dotnet) EXEMPLE MODBUS POUR MODULES ADAM, BECKHOFF, WAGO par mnmsjaune
Source avec Zip Source .NET (Dotnet) CRÉER SON PROPRE DESIGNER COMME CELUI DE VISUAL STUDIO par ShareVB
Source avec Zip Source .NET (Dotnet) CONVERSION UTM VERS LAT/LONG par BarresLTD
Source avec Zip CPROPGROUP : COLLECTION FAITE MAISON par Flocreate

 Sources en rapport avec celle ci

Source avec Zip CONVERTIR CHIFFRES EN LETTRES par LEMLEM
Source avec Zip Source avec une capture CONVERTIR DES CHIFFRES EN LETTRES AVEC OU SANS DÉCIMALE ET/O... par gandalf27
COLONNE EXCEL DE CHIFFRES EN LETTRES par FaroukVazaha
Source avec Zip ECRIRE DES NOMBRES EN TOUTES LETTRES (MULTI-LANGUAGE) par santiago69
Source avec Zip Source avec une capture CHIFFRES EN LETTRES par joro

Commentaires et avis

Commentaire de Cacophrene le 14/09/2006 08:46:16

Salut !

Etant donné que ce code .NET est très proche d'un code VB6 classique, je me suis penché dessus (mais je ne pratique pas VB.NET). Après quelques tests, il reste encore qelques de points incorrects (c'est pour ainsi dire toujours les mêmes problèmes, et pourtant il y a déjà de telles sources sur ce site). Plus précisément :

1. Les traits d'union manquent dans certains cas (par exemple 43 est orthographié "quarante trois" et non pas "quarante-trois")

2. "Cent" ne prend de s au pluriel que lorsqu'il n'est pas suivi d'autre chose. Ainsi 200 = "deux cents" mais 201 = "deux cent un".

3. Il arrive qu'il y ait deux espaces contigus. Par exemple si je demande d'écrire 30001, j'obtiens "trente__mille_un" au lieu de "trente_mille_un" (pour des raisons de visibilité, ici un underscore = un espace)/

Voilà quelques petites choses à corriger. Côté programmation, ça manque peut-être un peu de commentaires.

Voilà voilà ! Je n'ai pas noté.

Cordialement,
Cacophrène

Commentaire de Cacophrene le 14/09/2006 08:50:18

Si, j'oubliais quelque chose : le niveau, "initié". C'est peut-être un peu fort. Récursivité simple, pas d'API, sujet "concret", structures élémentaires (If...Then...Else), opérations simples (concaténation, division, etc...). Je ne sais pas, c'est à voir, mais ça me semble un petit peu fort.

Allez cette fois c'est tout :-)

Cacophrène

Commentaire de Berurier le 14/09/2006 10:27:46

Zut, j'ai raté mon copier-coller.

J'espère que ce sera plus clair

En effet "initié" est sans doute un peu fort.
En fait j'ai déposé ce code pour sa méthode.
Je reprend un exemple :

212346523

Je vais le décomposer comme suit

1) (212 * 10^6) + (346 * 10^3) + (5*100) + ((2*10) + 3)
2) ((2 *100) + 12) * 10^6 + ((3*100) + 46 ) * 10^3 + (5*100) + (2*10) +3
3) ((2 *100) + 12 ) * 10^6 +  ((3*100) + ((4 *10) + 6 ) ) * 10^3 + (5*100) +  (2*10) +3
4)  deux cent douze millions trois cent  quarante   six    mille  cinq cent  vingt  trois

Vous  noterez que vous  pouvez lire le chiffre.

Au premier passage dans la fonction décompose
je teste le chiffre par rapport au valeurs milliard,millier,centaine,etc...

Prenons le cas ci-dessus. 212346523

Par récursivité, les appels se feront de cette manière

Decompose(212346523)  =>  < 1 milliard et > 1 million , je divise par 1 million
     Decompose(212)   =>  chaine = deux cent
Decompose(12)  ==>  chaine = deux cent douze

J’ajoute «million(s) »  et je reprend le reste

Decompose(346523)  < 1000000 et > 1000 , je divise par mille
    Decompose(346)   =>  chaine = deux cent douze millions trois cent
           Decompose(46)   =>  chaine = deux cent douze millions trois cent quarante six

J’ajoute «mille »  et je reprend le reste

Decompose(523)  chaine = deux cent douze millions trois cent mille cinq cent
    Decompose(23)   =>  chaine = deux cent douze trois cent mille cinq cent vingt-trois



Ensuite, il reste la mise forme...

J'ai utilisé la structure if..then  parce qu'il y des cas particuliers pour tester la grandeur du chiffre à décomposer et parce que je n'en vois pas d'autre. Cependant je suis preneur de toute autre solution.

Commentaire de Cacophrene le 14/09/2006 18:14:58

Salut !

Les remarques d'orthographe ne relèvent pas de la mise en forme. Ton programme, dont le fonctionnement est très honorable, peut très bien gérer les traits d'union et les "s" dans des cas particuliers. Tu n'as besoin que de quelques If...Then en plus (ceux-ci ont d'ailleurs tout à fait leur place !). Puisque l'idée est bonne, autant la soigner jusqu'au bout non (plutôt que de faire un calque en lettre de la décomposition) ?

Cordialement,
Cacophrène

Commentaire de Berurier le 14/09/2006 20:12:27

Sur le fond tu as raison. La mise en forme ne concerne que la partie finale, les deux instructions Replace qui évitent une succession de test durant la décomposition.

Cordialement...

Béru


Commentaire de jean_marc_n2 le 16/09/2006 10:22:56

Hello,

j'ajouterais que contrairement à d'autres sources qui existent (sur ce site et ailleurs), ce programme ne gère pas les spécificités régonales:
en Belgique, 70 = septante, 90 = nonante, 76 = septante-six, etc. Idemn en Suisse, ou dans certains cantons on trouve 80=octante.

A compléter avec ces remarques pour avoir une chance de voir cette fonction utilisée un jour en dehors de l'hexagone :-)

Cordialement;

jean-marc

Commentaire de lamarty le 18/09/2006 08:37:51

Salut,
Excellente source.je la trouve vraiment pratique.

Commentaire de mouradovik le 11/10/2007 01:15:05

vous pouvez compiller votre source code sur convertir lettre en chiffre sur macro complementaire  pour la utiliser direct sur Excel  merci pour tout

Commentaire de mouradovik le 11/10/2007 01:17:49

bonjour , c cest possible veuillez me la envoyer sur mon email ( mourad_st@hotmail.com  merci d'avance

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Ascii conversion chiffre <=> lettre [ par deetsrider ] Je voudrais rajouter +1 au code ascii de chaque lettre tapée dans un textbox puis le reinscrire dans l autre textbox avec son nouveau code ..."a" devi CONVERSION CHIFFRE LETTRE MONNAIE LIVRE PENCE [ par florianelle ] conversion de chiffre en lettre [ par zober ] Salut tt le mondeVoila, je programme sous access une application pour gerer les ventes de produits d'une soci&#233;t&#233;. Je veux convertir dans l'e conversion chiffre en lettre [ par aakpa ] Bonjour,Dans une application VB6, je voudrais avois la possibilité de convertir automatiquement les nombres saisis en lettre. Exemple 18 en dix huit.M LETTRE EN CHIFFRE [ par oranat ] Bonjour, j'ai besoin de votre aide, j'ai besoin d'un algorithme qui transforme les lettres en chiffre, j'ai déjà réussi à faire l'inverse, c'est à dir Probleme de conversion [ par mrsebaa ] Hello! J'ai la fontion de conversion d'un chiffre en lettre. Je voudrais savoir comment convertir un chiffre d'une Function DataReport dans un label. Transformer un nombre en chiffre [ par blacksanga ] Salut Je travail dans word pour un envoie de lettre en publipostage,dans cette lettre j'ai un champs contenant un nombre (par exemple: 548000) j'aimer Modification de chiffre en lettre dans acces2007 [ par guerwen ] Bonjour je n'arrive plus à faire fonctionner chlettre dans acces2007 [^^sad1] c'est une fonction que j'utilisais couramment dans acces2003 quelqu'un à code convertiseur de chiffre en lettre [ par HERVEHADJO ] je desire avoir le code qui permet de convertir les chiffre en lettres merci et bonne journée Macro de conversion dans catia v5 [ par Arzhel ] Bonjour à tous, Je cherche un moyen (une macro me semble correspondre le plus à ma démarche) de convertir un caractère quelquonque en entitées filair


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 9,017 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales