[VB6] Conversion chiffres-lettres

Résolu/Fermé
mannylikita Messages postés 14 Date d'inscription mercredi 27 février 2002 Statut Membre Dernière intervention 30 octobre 2003 - 25 oct. 2003 à 13:06
wpjo Messages postés 1 Date d'inscription mardi 27 mars 2018 Statut Membre Dernière intervention 27 mars 2018 - 27 mars 2018 à 10:20
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

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
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
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
wpjo Messages postés 1 Date d'inscription mardi 27 mars 2018 Statut Membre Dernière intervention 27 mars 2018
27 mars 2018 à 10:20
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