Fonction "Chiffre en lettre"
Bonjour à tous,
À mon travail, j'utilise beaucoup la fonction de conversion du chiffre en lettre grâce à la macro complémentaire "NbLettre.xla" pour établir les factures. (macro en PJ)
Pour l'installer, j'ai du aller dans Options, Compléments, Atteindre… et là j'ai pointé "NbLettre.xla" puis j'utilise la fonction =ConvNumberLetter() , et ça marche très bien.
Cependant, je pense au cas de figure où je dois m'absenter et je veux mettre en place une solution afin que mes collègues puisse utiliser la fonction depuis leurs PC.
J'ai essayé de mettre la macro complémentaire NbLettre.xla directement sur le serveur de l'entreprise mais sur le PC de ma collègue, la formule pointe toujours vers mon PC (chemin d'accès C://Roaming... quelque chose en local)
L'autre solution serait éventuellement d'intégrer la fonction directement dans le fichier de facturation.
Est-ce possible ?
Merci par avance
Cordialement
Salut FBidee,
regarde ce lien https://forum.excel-pratique.com/viewtopic.php?f=2&t=62488
Bonjour m3ellem1,
Merci, par contre, je ne sais pas intégré les codes pour créer la formule… peux tu m'aider stp ?
Edit : je viens de trouver, j'ai fais alt F11, insérer un module, j'ai copié le code… cool !
C'est ce code transformé en formule :
Public Function NOMBRE_EN_LETTRES(Nb, Devise As String) As String
Dim varnum, varnumD, varnumU, resultat, varlet
Static Chiffre(1 To 19)
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)
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 0
If Nb >= 1 Then
resultat = ""
Else
resultat = "zéro"
GoTo fintraitementfrancs
End If
'traitement des millions
varnum = Int(Nb / 1000000)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = varlet + " million"
If varlet <> "un" Then: resultat = resultat + "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: resultat = resultat + " " + varlet
resultat = resultat + " mille"
End If
'traitement des centaines et dizaines
varnum = Int(Nb) Mod 1000
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " " + varlet
End If
resultat = LTrim(resultat)
varlet = Right$(resultat, 4)
'traitement du "s" final pour vingt et cent et du "de" pour million
Select Case varlet
Case "cent", "ingt"
resultat = resultat + "s"
Case "lion", "ions"
resultat = resultat + " de"
End Select
fintraitementfrancs:
resultat = resultat + " " + Devise
If Nb > 2 Then: resultat = resultat + "s"
'traitement des centimes
varnum = Int((Nb - Int(Nb)) * 100 + 0.5)
If varnum > 0 Then
GoSub centaine_dizaine
resultat = resultat + " et " + varlet + " centime"
If varnum > 1 Then: resultat = resultat + "s"
End If
'conversion 1ère lettre en majuscule
resultat = UCase(Left(resultat, 1)) + Right(resultat, Len(resultat) - 1)
'renvoi du resultat de la fonction et fin de la fonction
NOMBRE_EN_LETTRES = resultat
Exit Function
'sous programme
centaine_dizaine:
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
If varnum > 0 Then: varlet = varlet + Chiffre(varnum)
Else
varnumD = Int(varnum / 10)
varnumU = varnum Mod 10
Select Case varnumD
Case Is <= 5
varlet = varlet + dizaine(varnumD)
Case 6, 7
varlet = varlet + dizaine(6)
Case 8, 9
varlet = varlet + dizaine(8)
End Select
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
If varnumD = 7 Or varnumD = 9 Then: varnumU = varnumU + 10
If varnumU <> 0 Then: varlet = varlet + Chiffre(varnumU)
End If
varlet = RTrim(varlet)
Return
End FunctionCordialement