Bonjour
Voici mon code est-ce qu'il y a quelqu'un qui pourrait m'aider pour que lorsque nous avons 420 le vingt ne prenne pas de "s".
Merci à tous!
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 2008-05-29 par Mario Rodrigue
'
'
Range("AD2:AD5").Select
Selection.Copy
Range("AF13").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
'Attribute VB_Name = "Module1"
Function PMod(V As Variant, D) As Variant
Dim R As Variant
Dim M As Variant
R = Int(V / D)
M = R * D
PMod = V - M
End Function
Function FrancEuro(F As Variant) As Double
FrancEuro = Arrondir(F / 6.55957, 2)
End Function
Function dollarsEnLettres(NB) As String
On Error GoTo dollarsEnLettres_suite
Dim Varnum As Long
Dim 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(
= "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
'*** 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(
= "quatre-vingt"
'*** Traitement du cas zéro Euro
If NB >= 1 Then
résultat = ""
Else
résultat = "zéro"
GoTo fintraitementdollars
End If
'*** Traitement des milliards
Varnum = Int(NB / 1000000000)
If Varnum > 0 Then
GoSub centaine_dizaine
résultat = varlet + " milliard"
If varlet <> "un" Then résultat = résultat + "s"
End If
'*** Traitement des millions
Varnum = Int(PMod(NB, 1000000000)) 'Int(NB) Mod 1000000000
Varnum = Int(Varnum / 1000000)
If Varnum > 0 Then
GoSub centaine_dizaine
résultat = résultat + " " + varlet + " million"
If varlet <> "un" Then résultat = résultat + "s"
End If
'*** Traitement des milliers
Varnum = Int(PMod(NB, 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(PMod(NB, 1000)) '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"
If Len(résultat) > 5 Then
résultat = résultat + "s"
End If
Case "ingt"
If Len(résultat) > 5 Then
résultat = résultat + "s"
End If
Case "ingt"
If Len(résultat) = 5 Then
résultat = résultat
End If
Case "lion", "ions", "iard", "ards"
résultat = résultat + " de"
End Select
fintraitementdollars: '*** Etiquette de branchement pour le cas "zéro Euro"
'*** Indication du terme Euro
résultat = résultat + " dollar"
If NB >= 2 Then résultat = résultat + "s"
'*** Traitement des Cents
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
dollarsEnLettres = résultat
Exit Function
dollarsEnLettres_Fin:
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
Case Is <= 5
varlet = varlet + dizaine(varnumD)
Case 0
varlet = varlet + dizaine(2)
Case 6, 7
varlet = varlet + dizaine(6)
Case 8, 9
varlet = varlet + dizaine(
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 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
dollarsEnLettres_suite:
dollarsEnLettres = ""
Resume dollarsEnLettres_Fin
End Function
Function Arrondir(N As Variant, NBDECI As Integer) As Double
If IsNull(N) Then
Arrondir = 0
Exit Function
End If
Arrondir = Int((N * 10 ^ NBDECI) + 0.5) / (10 ^ NBDECI)
End Function