Macro complémentaire NB.LETTRE.XLA
Bonjour cher forum.
J'ai deux préoccupations concernant cette fonction citée à l'objet :
- 1- Quelqu'un peut-il me dire si cette fonction met un " s " sur cent quand il s'agit des nombres tels deux cent mille, trous cent mille ? Si oui comment corriger cela ?
- 2- Quelqu'un peut-il me réécrire les macros de cette fonction en y insérant des commentaires pour que je puisse l'adapter au Franc CAF ?
Merci.
Bonjour,
As-tu accès au code de cette macro complémentaire ...?
Bien sûr, le voilà :
Option Explicit
'***********
' Devise=0 aucune
' =1 Euro €
' =2 Dollar $
' =3 €uro €
' Langue=0 Français
' =1 Belgique
' =2 Suisse
' Casse =0 Minuscule
' =1 Majuscule en début de phrase
' =2 Majuscule
' =3 Majuscule en début de chaque mot
' ZeroCent=0 Ne mentionne pas les cents s'ils sont égal à 0
' =1 Mentionne toujours les cents
'***********
' Conversion limitée à 999 999 999 999 999 ou 9 999 999 999 999,99
' si le nombre contient plus de 2 décimales, il est arrondit à 2 décimales
Public Function ConvNumberLetter(Nombre As Double, Optional Devise As Byte = 0, _
Optional Langue As Byte = 0, _
Optional Casse As Byte = 0, _
Optional ZeroCent As Byte = 0) As String
Dim dblEnt As Variant, byDec As Byte
Dim bNegatif As Boolean
Dim strDev As String, strCentimes As String
If Nombre < 0 Then
bNegatif = True
Nombre = Abs(Nombre)
End If
dblEnt = Int(Nombre)
byDec = CInt((Nombre - dblEnt) * 100)
If byDec = 0 Then
If dblEnt > 999999999999999# Then
ConvNumberLetter = "#TropGrand"
Exit Function
End If
Else
If dblEnt > 9999999999999.99 Then
ConvNumberLetter = "#TropGrand"
Exit Function
End If
End If
Select Case Devise
Case 0
If byDec > 0 Then strDev = " virgule "
Case 1
strDev = " Euro"
If dblEnt >= 1000000 And Right(dblEnt, 6) = "000000" Then strDev = " d'Euro"
If byDec > 0 Then strCentimes = strCentimes & " Cent"
If byDec > 1 Then strCentimes = strCentimes & "s"
Case 2
strDev = " Dollar"
If byDec > 0 Then strCentimes = strCentimes & " Cent"
Case 3
strDev = " €uro"
If dblEnt >= 1000000 And Right(dblEnt, 6) = "000000" Then strDev = " d'€uro"
If byDec > 0 Then strCentimes = strCentimes & " Cent"
If byDec > 1 Then strCentimes = strCentimes & "s"
End Select
If dblEnt > 1 And Devise <> 0 Then strDev = strDev & "s"
strDev = strDev & " "
If dblEnt = 0 Then
ConvNumberLetter = "zéro " & strDev
Else
ConvNumberLetter = ConvNumEnt(CDbl(dblEnt), Langue) & strDev
End If
If byDec = 0 Then
If Devise <> 0 Then
If ZeroCent = 1 Then ConvNumberLetter = ConvNumberLetter & "zéro Cent"
End If
Else
If Devise = 0 Then
ConvNumberLetter = ConvNumberLetter & _
ConvNumDizaine(byDec, Langue, True) & strCentimes
Else
ConvNumberLetter = ConvNumberLetter & _
ConvNumDizaine(byDec, Langue, False) & strCentimes
End If
End If
ConvNumberLetter = Replace(ConvNumberLetter, " ", " ")
If Left(ConvNumberLetter, 1) = " " Then ConvNumberLetter = _
Right(ConvNumberLetter, Len(ConvNumberLetter) - 1)
If Right(ConvNumberLetter, 1) = " " Then ConvNumberLetter = _
Left(ConvNumberLetter, Len(ConvNumberLetter) - 1)
Select Case Casse
Case 0
ConvNumberLetter = LCase(ConvNumberLetter)
Case 1
ConvNumberLetter = UCase(Left(ConvNumberLetter, 1)) & _
LCase(Right(ConvNumberLetter, Len(ConvNumberLetter) - 1))
Case 2
ConvNumberLetter = UCase(ConvNumberLetter)
Case 3
ConvNumberLetter = Application.WorksheetFunction.Proper(ConvNumberLetter)
If Devise = 3 Then _
ConvNumberLetter = Replace(ConvNumberLetter, "€Uros", "€uros", , , vbTextCompare)
End Select
End Function
Private Function ConvNumEnt(Nombre As Double, Langue As Byte)
Dim iTmp As Variant, dblReste As Double
Dim strTmp As String
Dim iCent As Integer, iMille As Integer, iMillion As Integer
Dim iMilliard As Integer, iBillion As Integer
iTmp = Nombre - (Int(Nombre / 1000) * 1000)
iCent = CInt(iTmp)
ConvNumEnt = Nz(ConvNumCent(iCent, Langue))
dblReste = Int(Nombre / 1000)
If iTmp = 0 And dblReste = 0 Then Exit Function
iTmp = dblReste - (Int(dblReste / 1000) * 1000)
If iTmp = 0 And dblReste = 0 Then Exit Function
iMille = CInt(iTmp)
strTmp = ConvNumCent(iMille, Langue)
Select Case iTmp
Case 0
Case 1
strTmp = " mille "
Case Else
strTmp = strTmp & " mille "
End Select
If iMille = 0 And iCent > 0 Then ConvNumEnt = "et " & ConvNumEnt
ConvNumEnt = Nz(strTmp) & ConvNumEnt
dblReste = Int(dblReste / 1000)
iTmp = dblReste - (Int(dblReste / 1000) * 1000)
If iTmp = 0 And dblReste = 0 Then Exit Function
iMillion = CInt(iTmp)
strTmp = ConvNumCent(iMillion, Langue)
Select Case iTmp
Case 0
Case 1
strTmp = strTmp & " million "
Case Else
strTmp = strTmp & " millions "
End Select
If iMille = 1 Then ConvNumEnt = "et " & ConvNumEnt
ConvNumEnt = Nz(strTmp) & ConvNumEnt
dblReste = Int(dblReste / 1000)
iTmp = dblReste - (Int(dblReste / 1000) * 1000)
If iTmp = 0 And dblReste = 0 Then Exit Function
iMilliard = CInt(iTmp)
strTmp = ConvNumCent(iMilliard, Langue)
Select Case iTmp
Case 0
Case 1
strTmp = strTmp & " milliard "
Case Else
strTmp = strTmp & " milliards "
End Select
If iMillion = 1 Then ConvNumEnt = "et " & ConvNumEnt
ConvNumEnt = Nz(strTmp) & ConvNumEnt
dblReste = Int(dblReste / 1000)
iTmp = dblReste - (Int(dblReste / 1000) * 1000)
If iTmp = 0 And dblReste = 0 Then Exit Function
iBillion = CInt(iTmp)
strTmp = ConvNumCent(iBillion, Langue)
Select Case iTmp
Case 0
Case 1
strTmp = strTmp & " billion "
Case Else
strTmp = strTmp & " billions "
End Select
If iMilliard = 1 Then ConvNumEnt = "et " & ConvNumEnt
ConvNumEnt = Nz(strTmp) & ConvNumEnt
End Function
Private Function ConvNumDizaine(Nombre As Byte, Langue As Byte, bDec As Boolean) As String
Dim TabUnit As Variant, TabDiz As Variant
Dim byUnit As Byte, byDiz As Byte
Dim strLiaison As String
If bDec Then
TabDiz = Array("zéro", "", "vingt", "trente", "quarante", "cinquante", _
"soixante", "soixante", "quatre-vingt", "quatre-vingt")
Else
TabDiz = Array("", "", "vingt", "trente", "quarante", "cinquante", _
"soixante", "soixante", "quatre-vingt", "quatre-vingt")
End If
If Nombre = 0 Then
TabUnit = Array("zéro")
Else
TabUnit = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _
"huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", _
"seize", "dix-sept", "dix-huit", "dix-neuf")
End If
If Langue = 1 Then
TabDiz(7) = "septante"
TabDiz(9) = "nonante"
ElseIf Langue = 2 Then
TabDiz(7) = "septante"
TabDiz(8) = "huitante"
TabDiz(9) = "nonante"
End If
byDiz = Int(Nombre / 10)
byUnit = Nombre - (byDiz * 10)
strLiaison = "-"
If byUnit = 1 Then strLiaison = " et "
Select Case byDiz
Case 0
strLiaison = " "
Case 1
byUnit = byUnit + 10
strLiaison = ""
Case 7
If Langue = 0 Then byUnit = byUnit + 10
Case 8
If Langue <> 2 Then strLiaison = "-"
Case 9
If Langue = 0 Then
byUnit = byUnit + 10
strLiaison = "-"
End If
End Select
ConvNumDizaine = TabDiz(byDiz)
If byDiz = 8 And Langue <> 2 And byUnit = 0 Then ConvNumDizaine = ConvNumDizaine & "s"
If TabUnit(byUnit) <> "" Then
ConvNumDizaine = ConvNumDizaine & strLiaison & TabUnit(byUnit)
Else
ConvNumDizaine = ConvNumDizaine
End If
End Function
Private Function ConvNumCent(Nombre As Integer, Langue As Byte) As String
Dim TabUnit As Variant
Dim byCent As Byte, byReste As Byte
Dim strReste As String
TabUnit = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", _
"huit", "neuf", "dix")
byCent = Int(Nombre / 100)
byReste = Nombre - (byCent * 100)
strReste = ConvNumDizaine(byReste, Langue, False)
Select Case byCent
Case 0
ConvNumCent = strReste
Case 1
If byReste = 0 Then
ConvNumCent = "cent"
Else
ConvNumCent = "cent " & strReste
End If
Case Else
If byReste = 0 Then
ConvNumCent = TabUnit(byCent) & " cents"
Else
ConvNumCent = TabUnit(byCent) & " cent " & strReste
End If
End Select
End Function
Private Function Nz(strNb As String) As String
If strNb <> " zéro" Then Nz = strNb
End Function
Re,
Merci pour la macro ...
Concernant tes préoccupations ...
1. Pour la première ... As-tu fais le test ???
A priori, à la lecture du code, la règle du ' s ' est déjà codée ...
2. Pour la seconde ...cela signifie que tu voudrais ajouter la devise CAF ...
Du coup, il faudrait également que tu fasses la liste des spécifications du CAF ... à moins que le CAF soit identique à l'Euro ...
1. Pour la première ... As-tu fais le test ???
Oui, et 200.000 = Deux cents mille ce qui n'est pas bien, cela doit être deux cents mille.
2. Pour la seconde ...cela signifie que tu voudrais ajouter la devise CAF ...
Oui ! Je me rends compte de m'être trompée sur le nom de la Devise, c'est plutôt Franc CFA, monnaie de l'Afrique francophone.
En général, c'est une monnaie standard pour laquelle les décimales sont arrondies au franc supérieur, donc pas de spécificité, sauf le mot Franc qui doit s'accorder en nombre ([0;1] = Franc, > 1 = Francs)
Merci
Re,
Concernant la Majuscule ... la fonction prévoit ce choix ...
Il te suffit de mettre un 0 pour la quatrième variable dans la fonction pour obtenir des minuscules ...
A tester ...
Mon problème se situe au niveau de l'accord de cent, vingt ... ces deux chiffres s'accordent lorsqu'ils ne sont pas suivis d'un autre chiffre, au cas contraire, ils sont invariables. (Ex : cent = deux cent, deux cent un, deux cent mille ; vingt = vingt-et-un, quatre-vingts...
Donc j'ai une valeur de 200.000 sur une facture, mais, la fonction la convertit à deux cents mille, ce qui est faux
Bonjour,
Je te propose une fonction que j'utilise depuis quelques années.
Je l'ai adaptée au franc CFA
Pour d'autres monnaies il est possible de passer la devise en paramètre à la fonction afin qu'elle soir universelle.
ATTENTION: Il y a deux fonctions: NBenLettres et PMod
En effet, la fonction MOD standard pose problème avec les millards
En espérant que cela solutionne ton problème de "s" sur vingt et cent !
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 CFA"
Else
résultat = résultat + " CFA"
End If
'
'*** 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
'*** Traitement du "s" final pour vingt et cent
If varlet = "quatre-vingt" Then
varlet = varlet + "s"
End If
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
Bien cordialement,
Salut GNIN
Merci d'avoir partagé ta solution avec le Forum ...
Pas de quoi !
Je pioche aussi de mon côté des choses super intéressantes sur le site.
Grand merci à vous deux, ce code est parfait, je vais juste ajouter la casse.
Me revoilà, juste pour vous dire que j'ai rajouté la casse dans la fonction, voilà ce que ça donne :
Function NBenLettres(NB As Double, Optional Casse As Byte = 0) 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 CFA"
Else
Résultat = Résultat + " CFA"
End If
'
'*** 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
'*** Traitement du "s" final pour vingt et cent
If VarLet = "quatre-vingt" Then
VarLet = VarLet + "s"
End If
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
Select Case Casse
Case 0
Résultat = LCase(Résultat)
Case 1
Résultat = UCase(Left(Résultat, 1)) & _
LCase(Right(Résultat, Len(Résultat) - 1))
Case 2
Résultat = UCase(Résultat)
End Select
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
Super !
Enrichissement de la fonction très intéressant
Bonne soirée à tous ,
@ Nathalie
Merci pour tous les futurs lecteurs du Forum ...