[VB6] Conversion chiffres-lettres

Résolu/Fermé
Comment peux-je convertir des chiffres(nombres) en lettres en VB6; en excel je fais ça avec morefun.dll
Compte sur votre collaboration

Ir. Manny LIKITA
Tél: (00243) 98248846

10 réponses

  1. voila le code intégral de la founction tant recherchée :
    Function NBenLettres(nb)         
    '         
    Dim varnum, varnumD, varnumU, varlet  ', résultat         
    '         
    'varnum : pour stocker les parties du nombre que l'on va découper         
    'varlet : pour stocker la conversion en lettres d'une partie du nombre         
    'varnumD : pour stocker la partie dizaine d'un nombre à 2 chiffres         
    'varnumU : pour stocker la partie unité d'un nombre à 2 chiffres         
    'résultat : pour stocker les résultats intermédiaires des différentes étapes  Mille vingt-cinq Euros      
    '         
    Static chiffre(1 To 19) '*** tableau contenant le nom des 16 premiers  Cents Euros       
    nombres en lettres         
    chiffre(1) = "un"  Cents Euros et quinze centimes     
    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"         
    Static dizaine(1 To 9) '*** tableau contenant les noms des dizaines         
    dizaine(1) = "dix"         
    dizaine(2) = "vingt"         
    dizaine(3) = "trente"         
    dizaine(4) = "quarante"         
    dizaine(5) = "cinquante"         
    dizaine(6) = "soixante"         
    dizaine(7) = "soixante-dix"         
    dizaine(8) = "quatre-vingt"         
    dizaine(9) = "quatre-vingt-dix"         
    '         
    '*** Traitement du cas zéro franc         
    '         
    If nb >= 1 Then         
                    résultat = ""         
            Else         
                    résultat = "zéro"         
                    GoTo fintraitementfrancs         
    End If         
    '         
    '*** Traitement des millions         
    '         
    varnum = Int(nb / 1000000)         
    If varnum > 0 Then         
            GoSub centaine_dizaine         
            résultat = varlet + " million"         
            If varlet <> "un" Then résultat = résultat + "s"         
    End If         
    '         
    '*** Traitement des milliers         
    '         
    varnum = Int(nb) Mod 1000000         
    varnum = Int(varnum / 1000)         
    If varnum > 0 Then         
            GoSub centaine_dizaine         
            If varlet <> "un" Then résultat = résultat + " " + varlet         
            résultat = résultat + " mille"         
    End If         
    '         
    '*** Traitement des centaines et dizaines         
    '         
    varnum = Int(nb) Mod 1000         
    If varnum > 0 Then         
            GoSub centaine_dizaine         
            résultat = résultat + " " + varlet         
    End If         
    résultat = LTrim(résultat)         
    varlet = Right$(résultat, 4)         
    '         
    '*** Traitement du "s" final pour vingt et cent et du "de" pour million         
    '         
    Select Case varlet         
            Case "cent", "ingt"         
                    résultat = résultat + "s"         
            Case "lion", "ions"         
                    résultat = résultat + " de"         
    End Select         
              
    fintraitementfrancs: '*** Etiquette de branchement pour le cas "zéro franc"         
    '         
    '*** Indication du terme franc         
    '         
    résultat = résultat + " euro"         
    If nb >= 2 Then résultat = résultat + "s"         
    '         
    '*** Traitement des centimes         
    '         
    varnum = Int((nb - Int(nb)) * 100 + 0.5) '*** On additionne 0,5         
    '*** afin de compenser les erreurs de calcul dues aux arrondis         
    If varnum > 0 Then         
            GoSub centaine_dizaine         
            résultat = résultat + " et " + varlet + " centime"         
            If varnum > 1 Then résultat = résultat + "s"         
    End If         
    '         
    '*** Conversion 1ère lettre en majuscule         
    '         
    résultat = UCase(Left(résultat, 1)) + Right(résultat, Len(résultat) - 1)         
    '         
    '*** renvoie du résultat de la fonction et fin de la fonction         
    '         
    NBenLettres = résultat         
    Exit Function         
              
    centaine_dizaine: '*** Sous-programme de conversion en lettres         
    '         
    '*** des centaines et dizaines         
    '         
    varlet = ""         
    '         
    '*** Traitement des centaines         
    '         
    If varnum >= 100 Then         
            varlet = chiffre(Int(varnum / 100))         
            varnum = varnum Mod 100         
            If varlet = "un" Then         
                            varlet = "cent "         
                    Else         
                            varlet = varlet + " cent "         
            End If         
    End If         
    '         
    '*** Traitement des dizaines         
    '         
    If varnum <= 19 Then '*** Cas où la dizaine est <20         
                    If varnum > 0 Then varlet = varlet + chiffre(varnum)         
            Else '*** Autres cas         
                    varnumD = Int(varnum / 10) '*** chiffre des dizaines         
                    varnumU = varnum Mod 10 '*** chiffre des unités         
    '''Select Case varnumD '*** génération des dizaines en lettres         
                    varlet = varlet + dizaine(varnumD)         
    '''Case Is <= 5         
    '''varlet = varlet + dizaine(varnumD)         
    '''Case 6, 7         
    '''varlet = varlet + dizaine(6)         
    '''Case 8, 9         
    '''varlet = varlet + dizaine(8)         
    '''End Select         
    '         
    '*** traitement du séparateur des dizaines et unités         
    '         
                    If varnumU = 1 And varnumD < 8 Then         
                                    varlet = varlet + " et "         
                            Else         
                                    If varnumU <> 0 Then         
                                            varlet = varlet + "-" '''Or varnumD = 7 Or varnumD = 9         
                                    End If         
                    End If         
    '         
    '*** génération des unités         
    '         
    '''If varnumD = 7 Or varnumD = 9 Then varnumU = varnumU + 10         
                    If varnumU <> 0 Then varlet = varlet + chiffre(varnumU)         
    End If         
    '         
    '*** Suppression des espaces à gauche et retour         
    '         
    varlet = RTrim(varlet)         
    Return         
    End Function
    59
    1. salut j'ai un projet de conversion chiffre lettre mais pas en VB plutot en C alors si c'est possible de me l'envoyer c'est tres urgens
      0
    2. Bonjour,

      Pas mal le code mais j'ai trouvé 2 Bug

      100 = cents au lieu de cent et idem pour 20

      bon courage

      A+
      0
    3. Exactement. Il fallait bien comprendre que notre système n'est pas vraiment décimal mais un mélange entre un système basé sur '10' et un autre basé sur '20'. Dès qu'on a compris cela, le code coule de source.
      0