Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 À la recherche d'une fonction

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Le titre est un peu nébuleux, mais il aurait été difficile de le résumer en une simple phrase.
J'essaie de résoudre un problème et, pour ce faire, j'envisage d'utiliser une fonction (donc VBA) qui me renvoie, pour un chiffre décimal, le nombre de "0" après la virgule avant le premier chiffre qui ne soit pas nul.
Ex :
- 0,52866320023 (mais ça aurait pu être 258,52866320023) --> 0
- 0,0528066320023 --> 1
- 0,00528066320023 --> 2
- 0,000528066320023 --> 3

Merci d'avance pour toute aide.
 

patricktoulon

XLDnaute Barbatruc
et ben dis donc c'est le concours de gros bras là
je m'imagine le Magic_Doctor
Am stram gram Am, stram, gram,Pic et pic et colégram,Bour et bour et ratatam,Am, stram, gram.

juste pour jouer les troubles fait c'est quand même limité a 12 zéro au delà ben on a un double zero
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Pour la formule de mapomme, le problème est que Excel ne rend pas la même chose pour (A2 & 1) selon l'ordre de grandeur du chiffre.
Jusqu'à 18 décimales Excel retourne un format 0,0000000000000000011
Au-delà Excel retourne un format Exposant 1E-191
C'est un peu délicat à contrer, et même si c'est possible, ça rompt le charme de la formule, hélas !
Par exemple: =SIERREUR(ENT(-LOG10(MOD(ABS(TEXTE(A1;"#,"&REPT("#";100)) & 1);1)));0)
Qui ne fonctionne que pour les nombres décimaux d'au plus 100 décimales.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour @job75 dans ce cas là l'erreur serait une erreur de plafond ;il faudrait donc le préciser dans le retour erreur sinon ça n'a pas de sens l’utilisateur ne connaissant pas les fonctions de la formule s'arracherait les cheveux
et quoi que l'erreur pourrait venir des sub antécédents de la formule et donc trouver la raison devient un bicmac
pfffiiuuu....
 

job75

XLDnaute Barbatruc
Il n'est pas bien difficile de voir et comprendre qu'il y a une erreur quand A2 est un nombre entier (MOD=0) ou quand A2 est un texte (MOD=#VALEUR!).

Evidemment il faut savoir que LOG10(0) renvoie une erreur.
 

Dudu2

XLDnaute Barbatruc
Avec PLAFOND je pense que la formule de mapomme a encore du charme
Je confirme, beaucoup de charme. Quelle belle trouvaille !
J'avais essayé plein de choses mais sûrement pas -LOG10(MOD(ABS(A1);1))-1
Quand bien même, ne connaissant pas PLAFOND, je serais resté scotché au plancher
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re à tous, à @job75,

Il me semble que la formule avec plafond coince quand la partie décimale est un sous-multiple de 10 (voir fichier).

Une autre formule qui doit mieux fonctionner (j'emploie le verbe devoir car je ne suis plus sûr de rien)
VB:
=SIERREUR(ENT(-(LOG10(MOD(ABS(A2);1)*1,1)));)

Voir le fichier avec les deux fonctions.

nota : heureusement que les question de @Magic_Doctor nous permettent de maintenir la bonne santé de nos neurones. Merci Docteur
 

Pièces jointes

  • Magic_Doctor- 0 après la virgule- v2.xlsx
    13.1 KB · Affichages: 16
Dernière édition:

Dudu2

XLDnaute Barbatruc
Ça va devenir un sujet de thèse !
Ça semblait pas mal mais petit souci pour 0,91 par exemple et toute la suite de ses 10èmes (0,091, ...)
Le facteur 1,1 n'est malheureusement pas l'équivalent du & 1.
Pour ça il faut sortir l'artillerie du TEXTE(A2;"#,"&REPT("#";100)) & 1) qui n'est pas très élégant.
 

job75

XLDnaute Barbatruc
Non ce n'est pas PLAFOND qui est en cause mais la fonction MOD.

En E5 et E27 de ton dernier fichier évalue (F9) l'expression MOD(XXX;1).

Cela ne pose pas de problème avec la formule de mon post #17 mais en pose avec LOG10.

Ta solution de multiplier MOD par 1,1 me paraît bizarre mais les résultats sont bons.
 

Dudu2

XLDnaute Barbatruc
Je ne sais pas si c'est MOD qui pose problème.
Car si tu remplaces MOD(ABS(A2);1) par ABS(A2)-ENT(ABS(A2) il y a le même problème.
Le -LOG10 retourne une valeur (ex: 3,00000000000101) qui va passer à 4 avec PLAFOND.
Je ne sais pas si cette valeur est "légitime" ou si ça résulte des calculs d'Excel. Faudrait creuser.

Edit: bien sûr que la valeur n'est pas "légitime" car si 0,01 donne un bon résultat, 12,01 devrait donner le même résultat puisqu'on élimine le 12 !
 
Dernière édition:

job75

XLDnaute Barbatruc
Bien sûr que ça provient des calculs d'Excel sur les différences, c'est tout à fait classique.

L'utilisation de LOG10 s'avère donc une mauvaise solution dans ces conditions, désolé mapomme.
 

Dudu2

XLDnaute Barbatruc
Ou alors il faut forcer les étapes de calcul d'Excel pour qu'il ne prenne pas des raccourcis improbables:
=SIERREUR(PLAFOND(-LOG10(TEXTE(MOD(ABS(A2);1);"Standard"))-1;1);0)

Le charme est-il encore là ?
 
Dernière édition:

job75

XLDnaute Barbatruc
En effet mais au lieu du format "Standard" autant utiliser le format Scientifique "0E+00" :
VB:
=SIERREUR(PLAFOND(-LOG10(TEXTE(MOD(ABS(A2);1);"0E+00"))-1;1);)
Alors ça devient assez voisin de ma solution du post #17.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…