[VB6] Conversion chiffres-lettres

Résolu/Fermé
mannylikita Messages postés 17 Date d'inscription   Statut Membre -  
wpjo Messages postés 1 Statut Membre -
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. fred
     
    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. meriem
       
      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. j-marc
       
      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. wpjo Messages postés 1 Statut Membre
       
      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