Microsoft 365 nombre en lettres incomplet

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

  • NOMBRE EN LETTRES 2021.xlsm
    25.8 KB · Affichages: 23

patricktoulon

XLDnaute Barbatruc
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")
 

Dudu2

XLDnaute Barbatruc
@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...?
 

phil66

XLDnaute Junior
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: 10

patricktoulon

XLDnaute Barbatruc
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
 

patricktoulon

XLDnaute Barbatruc
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:

Dudu2

XLDnaute Barbatruc
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 & ">"
 

Statistiques des forums

Discussions
314 588
Messages
2 110 988
Membres
111 002
dernier inscrit
Lolo73i