Variable String qui se 'transforme en notation scientifique

Bonjour le forum,
Bonjour les cracks,

pour le fun, j'ai écrit, en VBA évidemment, une Sub() destinée à convertir un nombre en lettres.
Tout va bien jusqu'aux portes du billiard - 1E^15, terme que je ne connaissais pas, je dois bien vous l'avouer.

Mais, si je tente un nombre supérieur, le code plante, la variable STRING contenant le nombre à traiter ayant basculé en notation scientifique !!

scstr

Quelqu'un a-t-il déjà rencontré ce souci ?
Non pas que j'essaye de convertir en lettres le montant de mon compte bancaire mais ça fait désordre d'autant qu'un de mes tableaux pointe jusqu'au quadrilliard !
Pourquoi se contenter de peu ?

  tM = Array("cent", "mille", "million", "milliard", "billion", "billiard", "trillion", "trilliard", "quadrillion", "quadrilliard")

Merci pour vos lumières !

A+

15cstr-num.xlsm (26.57 Ko)

Bonsoir Curulis,

Connais tu le CDU. Non, ce n'est pas qu'un parti politique allemand. Mais la règle qui permet de structurer les nombres entiers, donc tous ceux à gauche de la virgule.

Le U pour l'unité, le D pour la dizaine et le C pour la centaine. Si je coupe par exemple un nombre entier tous les 3 chiffres. Exemple: 9 782 651 253 145.

Le 1ier chiffre en débutant par la droite, soit 5 correspondra à l'unité. Le 4ième chiffre, soit 3 correspondra à l'unité mais du millier. Le 7ième chiffre, soit 1 à l'unité du million...etc...

Le 2ième chiffre par la droite, soit 4 correspondra à la dizaine et le 3ième donc 1 à la centaine. Et la même structure continuera à s'appliquer pour le millier, le million, le milliard... Etc.

Il suffit donc de découper la variable texte par bloc de 3 pour la traiter dans la dimension unitaire, millier, million... Dès que l'on fait un saut d'unité supérieure. Et tu n'auras pas à utiliser en VBA des fonctions de conversion. Ni être géné par de très grands nombres.

C'est exactement ce que j'ai fait, X Cellus!

        'Principe du calcul : je saucissonne sM en blocs de 3 caractères avec ajout de "0" en tête de variable pour compléter le bloc
        If Len(sM1) Mod 3 > 0 Then sM1 = IIf(Len(sM1) Mod 3 = 1, "00", "0") & sM1
        For y = Len(sM1) To 1 Step -3                                           'on débute par la droite du nombre
            iIdx = 0                                                            '3 caractères par bloc
            sRep = ""                                                           'RAZ variable résultat de l'étape
            iStep = iStep + 1                                                   'compte l'enchaînement des blocs traités

Salut les as,
Salut X Cellus,

j'ai trouvé un début de commencement de solution : obligation d'encoder un "A" en début de nombre pour forcer le maintien du typage en String.
J'avais essayé en ajoutant "A" dans le code après validation = échec!
Je vais creuser afin de faciliter l'usage car ce "A" n'est vraiment nécessaire qu'au-delà du billion.

image

A+

Bonsoir à tous !

A voir !

@ bientôt

LouReeD

Ah, comme il nous manque, notre cher MFerrand !

image

Merci à LouReed pour les liens fournis. Voilà un "mystère" résolu que ChatGPT n'a pas été f... de me dire!
M'en vais lui chauffer les oreilles!

A+

A nouveau,

Cela veut dire que tu ne converse pas bloc de 3 par bloc 3.

Ci-dessous l'image pour un nombre de 25 chiffres.

img 20250110 221209

Votre fichier avec la textbox :

23cstr-num-lrd.xlsm (38.56 Ko)

@ bientôt

LouReeD

LouReed,

tu m'enlèves l'idée de la tête!
Je regarde tout de suite!

À tout'

Suite,

La limite pour une cellule au format texte étant de 255 caractères. On peut traiter jusqu'à 85 tierces. Pour des centaines de quadrillons il faut 9 tierces comme sur ma photo.

Après le nombre jusqu'à 85 tierce est astronomique. Même MUSK est loin de ce nombre.

Bonne fin de soirée.

Merci à vous deux de m'avoir mis sur la voie.
Je m'étais bien dit que l'encodage au-delà de 15 chiffres était corrompu de base mais vous m'en avez apporté la confirmation et la connaissance!

Comme on dit chez nous : l'union fait la force!

A+

Bonsoir,

merci de votre retour !

@ bientôt

LouReeD

Rechercher des sujets similaires à "variable string qui transforme notation scientifique"