chiffre en lettre

  • Initiateur de la discussion icds
  • Date de début
I

icds

Guest
salut tlm

voila je suis je suis very very novice en vba et je suis en train de creer une facture sur excel et je voudrias convertir le resutat numerique en chiffres mais je ne connait pas le code
si quelqu'un peut m'aider svp ca serais geniale

merci d'avence et a+
 

pat1545.

XLDnaute Accro
Voilà


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
'
Static chiffre(1 To 19) '*** tableau contenant le nom des 16 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'
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) = 'septante'
dizaine(8) = 'quatre-vingt'
dizaine(9) = 'nonante'
'
'*** 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 + ' franc'
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
'*** Modifié pour la Belgique (septante et nonante)
If varnum <= 19 Then '*** Cas o&ugrave; 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
Case Is <= 5
varlet = varlet + dizaine(varnumD)
Case 6
varlet = varlet + dizaine(6)
Case 7
varlet = varlet + dizaine(7)
Case 8
varlet = varlet + dizaine(8)
Case 9
varlet = varlet + dizaine(9)
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 ' Or varnumD = 7 Or varnumD = 9 Then
varlet = varlet + '-'
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
Function NBenLettresEuro(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
'
Static chiffre(1 To 19) '*** tableau contenant le nom des 16 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'
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) = 'septante'
dizaine(8) = 'quatre-vingt'
dizaine(9) = 'nonante'
'
'*** 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 + ' €uro'
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 + ' cent'
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
NBenLettresEuro = 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
'*** Modifié pour la Belgique (septante et nonante)
If varnum <= 19 Then '*** Cas o&ugrave; 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
Case Is <= 5
varlet = varlet + dizaine(varnumD)
Case 6
varlet = varlet + dizaine(6)
Case 7
varlet = varlet + dizaine(7)
Case 8
varlet = varlet + dizaine(8)
Case 9
varlet = varlet + dizaine(9)
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 ' Or varnumD = 7 Or varnumD = 9 Then
varlet = varlet + '-'
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