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: 21

vgendron

XLDnaute Barbatruc
Je n'ai rien vu dans les options, et je ne vais pas m'aventurer à refaire le fichier de Patrick, mes connaissances étant limitées,je n'ai pas envie de faire pire ;)

Bonne soirée,

Phil
non non, il ne s'agit pas de réecrire les macros de patrick
juste de partir d'un fichier vierge
et dans lequel tu copies colle le module qui contient les macros

pour ca, tu ouvres l'éditeur VBA (alt + F11)
à gauche dans l'explorateur de projet, tu vois les deux fichiers: le nouveau et l"ancien"

et tu copies le module en faisant un glisser déposer du module standard

et c'est tout..
 

TooFatBoy

XLDnaute Barbatruc
Peut-être un pb de 160...


Sur ce, @+

MonAvatarXLD.jpg
 

Dudu2

XLDnaute Barbatruc
Bonjour la troupe,
Après y a quand même ce truc bizarre du trente cassé en changeant juste le type d'argument.
Le code de @patricktoulon est trop dense pour moi donc je m'arrête là.

Dans le pire des cas, reste le fichier du Post #20.
Merci d'avoir essayé, et oui il reste le fichier cité... mais ça n'expliquera pas mon souci de format ;)

Bonne soirée,

Phil
Ce n'est pas TON souci, c'est celui de l'auteur de la Macro, car si le code du Post #20 fonctionne, tu n'as pas de problème de format. D'ailleurs quand je dis "le pire des cas" c'est injuste pour son auteur car c'est pour signifier que c'est simplement une parfaite alternative.

J'admets cependant que le mystère des chiffres qui sautent sera difficile à lever sans avoir un environnement équivalent pour tester.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour
après c'est bien connu que excel 2010 nous fait des bizarreries
je l'ai eu pendant pas très longtemps et vu les bizarreries qui à première vue n'avaient pas d'explication j’étais vite revenu a 2007
je constate aujourd'hui que rien n'a été fait
c'est vraiment pas une version d'excel a garder
mon excel 2013 m'en fait quelque une aussi de bizarreries mais bon je maintiens

normalement ma fonction n'a pas de versionnage 32/64
elle traite du texte avec des fonctions des plus basique de vba

@Dudu2 mon code est très simple il applique le raisonnement que j'ai détaillé plus haut
je te le séquence et indente si tu veux en comprendre le fonctionnement
 

Dudu2

XLDnaute Barbatruc
@patricktoulon, ne fait rien pour moi, je te fais confiance, ton code fonctionne chez moi donc pas de problème. Il doit y avoir l'une des fonctions VBA qui fait pas la même chose en 2010 dans certaines circonstances et qui change la capture de la valeur.
La seule solution serait de tester dans l'environnement qui foire pour trouver le problème.

Par contre je ne comprends pas la coupure du trente en fichier du Post #48.
J'ai seulement changé le type de l'argument de String en Variant et la valorisation de Chain = dans ton code.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
allez je vais faire même mieux
je vous la refait ici juste pour la belgique(il y a moins de complexité grammaticale)
c'est une ebauche commentée basée su la FSB
je montre ici la base de la mécanique et je debug les résultats
vous allez voir à quel point c'est simple
tu va comprendre aussi pourquoi je traite la chose en string en non en numerique
VB:
Sub testj()
'EN NUMERIQUE !!!! on va jusqu'a 9 bilion 999 milliards 999 millions 999 mille 999
' NbToLettresBelge 9536985394573.45'test en numeique

'EN STRING !!!! on va jusqu'au quadrilion  soit un nombre a 28 chiffres
    NbToLettresBelge "7529698753265419536985394573.45"    'test en string
End Sub


Function NbToLettresBelge(chaine As String)
    Dim TR, diz, Ul, Tranche, c, d, u, I&, Chain$, T, a
    'array de tranche
    Tranche = Array("", " 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")

    'array des dizaines
    diz = Array("", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "septante", "quatre-vingt", "nonante", "cent")

    'separateur decimal pour vba
    Chain = Replace(chaine, ".", ",")    'reformatage du nombre avec virgule

    ' on sort si chain vide
    If Chain = "" Then NbToLettresBelge = "": Exit Function

    'on coupe le nombre(entier/décimal) T devient un array de 1 ou 2 items
    T = Split(Chain, ",")    'on coupe (entier/decimal)

    For I = 0 To UBound(T)    'boucle de 0 a 1 0 si pas de decimal

        'formatage du nombre de t(i)"000 000 000 000 000 etc....." en supprimant les "000 "
        T(I) = Trim(Replace(Format(T(I), Application.Rept(" 000", 50)), "000 ", ""))

        'debug du resulat du formatage
        Debug.Print "partie (" & I + 1 & ") = " & T(I)

        'maintenant on coupe cette partie par les espaces(donc par ensemble de 3 chiffres)
        part = Split(T(I), " ")
        'on determine l'index dans la  tranche de départ
        TR = UBound(Tranche) - UBound(part)

        'maintenant on boucle sur ces ensembles de 3 chiffres
        For a = 0 To UBound(part)
            If Val(part(a)) > 1 And TR < UBound(Tranche) Then Tranche(TR) = Tranche(TR) & "s"
            c = Left(part(a), 1)    'le premier chiffre est donc la centaine

            If c > 1 Then centx = " cent" Else centx = ""
            If c = 1 Then c = 0: centx = "cent"

            d = Mid(part(a), 2, 1)    'le second chiffre est donc la dizaine
           
             u = Right(part(a), 1)    'le dernier chiffre est donc les unités

            If d = 1 And u > 0 Then d = 0: u = u + 10 'pour eviter le "dix-trois" au lieu de "treize"

            'on debug la sequence de 3 chiffre en nombre et en lettre  pour voir
            Debug.Print part(a) & "--->" & Ul(c) & centx & " " & diz(d) & " " & Ul(u) & Tranche(TR)
            TR = TR + 1

        Next
        If I = 0 Then Debug.Print "virgule"
    Next
End Function

voila vous reste plus qu'a faire la compilation au lieu des debug et faire quelque corrections grammaticales
pas si danse que ça hein le code ;)
 

patricktoulon

XLDnaute Barbatruc
C'est déjà moins dense et plus accessible. Ne pas utiliser Option Explicit !
@phil66 n'a plus qu'à t'envoyer la fenêtre d'exécution (Ctl + G sur le code VBA) après exécution pour les Debug.Print.

Tu veux pas jeter un oeil ?
ben c'est la base du moteur le reste dans la FSB n'est que de la correction grammaticale
alles je teste le 48
en effet je vois ça a ben moi non plus je pige pas
j'essaie sur le mien
demo.gif
 

patricktoulon

XLDnaute Barbatruc
ca y est j'ai trouvé
dans la correction finale les espace sont remplacer par un "-"
il faudra que tu m'explique
qui a fait ça'regarde le "trente dans l'array
VB:
diz = Array("", "dix", "vingt", "tre nte", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix", "cent")
tu picole ou quoi ? 😅 🥳
 

phil66

XLDnaute Junior
re
je viens de tester sur mon petit pc portable lonovo W11 et 365 le tout en 64 coucougnettes
la fonctionne donne un bon résultat

bref visiblement c'est notre ami avec son exploit qui a un soucis
Patrick et Dudu, vos conversations sont trop techniques pour mon petit niveau.

Alors comme disait Coluche : "moi j'voudrais savoir qu'est-ce qui faut que j'fais ?" , pour autant qu'il y ait quelque chose à faire dans ma situation 🥵
S'il y a un truc à vérifier qui pourrait faire foirer le système,je veux bien chercher, mais où ?

Phil
 

patricktoulon

XLDnaute Barbatruc
re
bonjour @phil66
ben si tu tourne sur W10 avec 2010 il est fort possible que les mises a jour pack redistribuable blablabla
te mette ton office en vrac et là il n'y a rien a faire a part passer minimum sur 2013
essaie une réparation office ,si tu a toujours ton disque 2010 ou ton dossier de version retail
je dis ça mais j'en sais rien ce que tu a dans ton exploit
mais si j'ai raison et que c'est pas réparable , tu es condamné a fonctionner avec un office boiteux
et il te fera des blagues comme ça insolvables

après franchement déjà à l'époque 2010 est vite parti aux oubliettes(trop de bug et des patchs a n'en plus finir)
patchs qui ne sont plus accéssible aujourd'hui donc ........ à toi d’écrire la suite de l'histoire
 

phil66

XLDnaute Junior
re
bonjour @phil66
ben si tu tourne sur W10 avec 2010 il est fort possible que les mises a jour pack redistribuable blablabla
te mette ton office en vrac et là il n'y a rien a faire a part passer minimum sur 2013
essaie une réparation office ,si tu a toujours ton disque 2010 ou ton dossier de version retail
je dis ça mais j'en sais rien ce que tu a dans ton exploit
mais si j'ai raison et que c'est pas réparable , tu es condamné a fonctionner avec un office boiteux
et il te fera des blagues comme ça insolvables

après franchement déjà à l'époque 2010 est vite parti aux oubliettes(trop de bug et des patchs a n'en plus finir)
patchs qui ne sont plus accéssible aujourd'hui donc ........ à toi d’écrire la suite de l'histoire
Je suis sur office 365 depuis 2 ans donc je suppose que ce n'est pas 2010... ou alors j'ai raté un truc ?
 

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia