Microsoft 365 nombre en lettres incomplet

  • Initiateur de la discussion Initiateur de la discussion phil66
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

phil66

XLDnaute Junior
Bonjour à tous,

J'ai récupéré une feuille avec laquelle une formule me traduit les nombres en lettres (et surtout au format "belge" 😉 ).
Par contre il y a un souci dans la formule car si j'ai bien la partie "entier" qui s'affiche en lettres, les décimales restent
en chiffres!

Exemple : € 714,15 devient : sept cent quatuorze euros et 15 centimes...

Qu'est-ce qui coince ?

Je joins le fichier en question.

Merci d'avance,

Phil
 

Pièces jointes

re
@Dudu2
selon moi le "dix" est de trop
de 2 jusqu'a 9 " cents" mais "dix cents" ça n'existe pas 😉
VB:
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")
 
@patricktoulon,
Je ne sais pas, j'ai juste récupéré le code qui a l'air de fonctionner selon mes quelques tests et modifié des micro-détails du genre les majuscules en minuscules sur les devises, ajout du "et" pour séparer les décimales en devises et la majuscule facultative au début.
Après je ne sais pas ce que l'auteur du code fait de cet Array() mais je sais que le chiffre 10 existe alors...?
 
Bonjour à tous,

Voilà, j'ai utilisé le fichier du post #20 de DUDU et ça fonctionne très bien.
Les milliers sont bien traduits.

Concernant le fichier de Patrick, je n'ai fait que l'enregistrer et changer le nombre,rien de plus...

Désolé pour "l'arrachage de cheveux", Patrick 😧

Phil
 

Pièces jointes

  • Fichier DUDU ok.PNG
    Fichier DUDU ok.PNG
    25.3 KB · Affichages: 11
ok merci
en attendant j'ai essayé sur un tableau structuré et même avec le qarobase sur la colonne mes résultats sont corrects
et cela même !!! avec les nombres abrégés
demo.gif
 
re
chez moi le pc fixe est en w64 et office 32 2013 et le pc portable (le petit dernier) est en w11 et 365 64 bits
je n'ai pas de problème sur l'un et l'autre
et le code de ma fonction n'utilise pas d'object ou fonctions vb particulières
le principe de ma fonction

  1. je récupère le string du value(donc sans formatage)
  2. je formate le decimal pour vba(point ou virgule)
  3. je coupe en deux(entier/decimale)
  4. je boucle de 1 a (2 si decimale)
  5. parti de la je coupe les partie par serie de 3 chiffres)
partie de la avec mes series de 3 chiffre XYZ
X c'est pour les centaine
Y c'est pour les dizaine
Z c'est pour les unité
pour la france je traite les dizaines le 9x et le 7x(je descend le premier chiffre de 1
exemple 91 devient 80 et 11 soit quatre-vingt-onze
pour la belgique on change rien puisque c'est 90 et 1 soit nonante-et-un
+quelque aménagement orthographique
mon moteur est d'une simplicité enfantine d'ailleurs dans les ressource vous l'avez le moteur de base sans considération monétaire

ainsi par exemple
36455893,45
sera traité comme suit
format decimal
36455893.45
entier=036455893

decimal=045

maintenant boucle sur les deux en segmentation de trois chiffres
pour l'entier
036 soit trente-six millions
455 soit quatre-cent-cinquante-cinq mille
893 soit huit-cent-nonante-trois

pour le décimal
045 quarante-cinq

quelques correction orthographiques du genre "un mille" c'est "mille" etc....

a la fin on regroupe le tout avec euro( ou ce que vous voulez )et centime(s) a la fin

terminé
 
Dernière édition:
En effet, devrait pas y avoir de problème, d'ailleurs je n'en ai pas.
Je remarque que ton paramètre est String, ce qui implique une conversion implicite entre Double et String par Excel lorsqu'il passe la valeur. Va savoir si c'est pas là qu'il y a un problème...

Tu devrais essayer de passer ton paramètre en Variant, vérifier que c'est bien un VarType = vbDouble et faire un Cstr(Double) juste pour voir.
VB:
Function NbToLettresFSB(Nombre As Variant, Optional region As String = "")
    Dim It, TR, diz, Ul, c, d, u, dix, I&, Tranche, monnaie$, Ctme$, Chain$, T, X&, Ch, Et$, Entier$, Dec$, de, q
    Tranche = Array(" nonilliard", " nonillion", " octilliard", " octillion", " septilliard", " septillion", " sextilliard", " sextillion", " quintilliard", " quintillion", " quadrilliard", " quadrillion", " trilliard", " trillion", " billiard", " billion", " milliard", " million", " mille", "")
    Ul = Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf")
    diz = Array("", "dix", "vingt", "tre nte", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix", "cent")
 
    If Not VarType(Nombre) = vbDouble Then NbToLettresFSB = "La valeur passée n'est pas un nombre!": Exit Function
    Chain = Replace(CStr(Nombre), ".", ",")    'reformatage du nombre avec virgule
    'MsgBox "<" & Chain & ">"
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour