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ù 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ù 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