Cherche fonction sous excel (si existe) de conversion en lettres, de valeurs
calculées en chiffres
Cherche fonction sous excel (si existe) de conversion en lettres, de valeurs
calculées en chiffres
Cherche fonction sous excel (si existe) de conversion en lettres, de valeurs
calculées en chiffres
Cherche fonction sous excel (si existe) de conversion en lettres, de
valeurs
calculées en chiffres
Cherche fonction sous excel (si existe) de conversion en lettres, de
valeurs
calculées en chiffres
Cherche fonction sous excel (si existe) de conversion en lettres, de
valeurs
calculées en chiffres
Bonjour,
Voici ce que j'ai en ma possession dans ma macrothèque.
Je n'en connais pas l'auteur mais remercions le ...
Copier ce code dans un module standard du classeur et cette formule dans
une cellule =EurEnLettres(A1) où le chiffre est en A1.
Cordialement
Hervé
Function NBenLettres(NB) As String
On Error GoTo NBenLettres_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(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 8) '*** 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(8) = "quatre-vingt"
'
'*** Traitement du cas zéro franc
If NB >= 1 Then
résultat = ""
Else
résultat = "zéro"
GoTo fintraitementfrancs
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", "ingt"
If Len(résultat) > 5 Then
résultat = résultat + "s"
End If
Case "lion", "ions", "iard", "ards"
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
NBenLettres_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 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 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
NBenLettres_suite:
NBenLettres = ""
Resume NBenLettres_Fin
End Function
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 EurEnLettres(NB) As String
On Error GoTo EurEnLettres_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(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 8) '*** 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(8) = "quatre-vingt"
'
'*** Traitement du cas zéro Euro
If NB >= 1 Then
résultat = ""
Else
résultat = "zéro"
GoTo fintraitementEuros
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", "ingt"
If Len(résultat) > 5 Then
résultat = résultat + "s"
End If
Case "lion", "ions", "iard", "ards"
résultat = résultat + " d'"
End Select
fintraitementEuros: '*** Etiquette de branchement pour le cas "zéro Euro"
'
'*** Indication du terme Euro
résultat = résultat + " Euro"
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
EurEnLettres = résultat
Exit Function
EurEnLettres_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 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 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
EurEnLettres_suite:
EurEnLettres = ""
Resume EurEnLettres_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
"mcn" a écrit dans le message de news:Cherche fonction sous excel (si existe) de conversion en lettres, de
valeurs
calculées en chiffres
Bonjour,
Voici ce que j'ai en ma possession dans ma macrothèque.
Je n'en connais pas l'auteur mais remercions le ...
Copier ce code dans un module standard du classeur et cette formule dans
une cellule =EurEnLettres(A1) où le chiffre est en A1.
Cordialement
Hervé
Function NBenLettres(NB) As String
On Error GoTo NBenLettres_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(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 8) '*** 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(8) = "quatre-vingt"
'
'*** Traitement du cas zéro franc
If NB >= 1 Then
résultat = ""
Else
résultat = "zéro"
GoTo fintraitementfrancs
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", "ingt"
If Len(résultat) > 5 Then
résultat = résultat + "s"
End If
Case "lion", "ions", "iard", "ards"
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
NBenLettres_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 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 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
NBenLettres_suite:
NBenLettres = ""
Resume NBenLettres_Fin
End Function
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 EurEnLettres(NB) As String
On Error GoTo EurEnLettres_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(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 8) '*** 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(8) = "quatre-vingt"
'
'*** Traitement du cas zéro Euro
If NB >= 1 Then
résultat = ""
Else
résultat = "zéro"
GoTo fintraitementEuros
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", "ingt"
If Len(résultat) > 5 Then
résultat = résultat + "s"
End If
Case "lion", "ions", "iard", "ards"
résultat = résultat + " d'"
End Select
fintraitementEuros: '*** Etiquette de branchement pour le cas "zéro Euro"
'
'*** Indication du terme Euro
résultat = résultat + " Euro"
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
EurEnLettres = résultat
Exit Function
EurEnLettres_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 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 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
EurEnLettres_suite:
EurEnLettres = ""
Resume EurEnLettres_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
"mcn" <mcn@discussions.microsoft.com> a écrit dans le message de news:
4CB55510-992A-45AB-A3B8-F3210A5EAB15@microsoft.com...
Cherche fonction sous excel (si existe) de conversion en lettres, de
valeurs
calculées en chiffres
Bonjour,
Voici ce que j'ai en ma possession dans ma macrothèque.
Je n'en connais pas l'auteur mais remercions le ...
Copier ce code dans un module standard du classeur et cette formule dans
une cellule =EurEnLettres(A1) où le chiffre est en A1.
Cordialement
Hervé
Function NBenLettres(NB) As String
On Error GoTo NBenLettres_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(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 8) '*** 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(8) = "quatre-vingt"
'
'*** Traitement du cas zéro franc
If NB >= 1 Then
résultat = ""
Else
résultat = "zéro"
GoTo fintraitementfrancs
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", "ingt"
If Len(résultat) > 5 Then
résultat = résultat + "s"
End If
Case "lion", "ions", "iard", "ards"
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
NBenLettres_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 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 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
NBenLettres_suite:
NBenLettres = ""
Resume NBenLettres_Fin
End Function
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 EurEnLettres(NB) As String
On Error GoTo EurEnLettres_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(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 8) '*** 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(8) = "quatre-vingt"
'
'*** Traitement du cas zéro Euro
If NB >= 1 Then
résultat = ""
Else
résultat = "zéro"
GoTo fintraitementEuros
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", "ingt"
If Len(résultat) > 5 Then
résultat = résultat + "s"
End If
Case "lion", "ions", "iard", "ards"
résultat = résultat + " d'"
End Select
fintraitementEuros: '*** Etiquette de branchement pour le cas "zéro Euro"
'
'*** Indication du terme Euro
résultat = résultat + " Euro"
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
EurEnLettres = résultat
Exit Function
EurEnLettres_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 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 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
EurEnLettres_suite:
EurEnLettres = ""
Resume EurEnLettres_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
"mcn" a écrit dans le message de news:Cherche fonction sous excel (si existe) de conversion en lettres, de
valeurs
calculées en chiffres