Extraire le 2eme chiffre significatif (non nul)

Résolu/Fermé
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 - 19 oct. 2018 à 10:34
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 - 20 oct. 2018 à 09:55
Bonjour à tous,

Je souhaite extraire le 2eme chiffre significatif d'une cellule contenant un nombre.
Exemples :
4578,45 => 5
3,14156 => 1
0,3548 => 5 (attention, ici le 1er chiffre significatif est 3 : le 1er chiffre significatif est le 1er chiffre en partant de gauche non nul)
1046.23 => 0
Quelle formule utiliser ?

Je vous remercie d'avance pour votre aide
A voir également:

5 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
Modifié le 19 oct. 2018 à 10:51
Bonjou

pour obtenir une valeur texte:

=SI(STXT(A1;2;1)=",";STXT(A1;3;1);STXT(A1;2;1))

et pour numériser le résultat
=(SI(STXT(A1;2;1)=",";STXT(A1;3;1);STXT(A1;2;1))*1)

cette formule ressort le 2° chiffre du nombre en A1 sauf dans le cas ou l'entier avant la virgule ne contient qu'un seul chiffre (0 ou autre) , dans ce cas c'est le 1° chiffre après la virgule qui ressort

Crdlmnt
0
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2
19 oct. 2018 à 10:59
cette formule fonctionne très bien merci :)
exception faite des nombres décimaux inférieurs à 1 :
exemple : 0,92 : le 1er chiffre significatif (CS) est 9, le 2eme est 2. Cette formule ressort 9 ...
idem si j'ai 0,084 : le 1er CS est 8, le 2eme CS est 4

Une seconde formule pourrait gérer les nombres inférieurs à 1 ?
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
19 oct. 2018 à 11:14
Alors après réflexion essayez celle ci toute simple et revenez nous dire quels cas ne conviennent pas

=STXT(SUBSTITUE(A1;0;"");2;1)

ou bien sur selon le format voulu:
=STXT(SUBSTITUE(A1;0;"");2;1)*1

crtdlmnt
0
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2
19 oct. 2018 à 11:23
J'ai trouvé une astuce, peut être pas forcément la meilleure solution :
Sachant extraire le 1er chiffre significatif non nul (colonne Z dans ce cas), je crée une colonne dans laquelle :
1) Je teste si mon nombre est inférieur à 1 (cellule X2 dans ce cas)
2) Si c'est le cas, je trouve la position de ce 1er CS dans ma cellule, et j'extrais le caractère immédiatement à droite :
=SI(X2<1;SI(STXT(X2;TROUVE(Z2;X2)+1;1)="";0;STXT(X2;TROUVE(Z2;X2)+1;1));"")


exemple :
0.054
1) J'extrais le 1er CS : 5
2) Avec la formule TROUVE, je constate que "5' est en 4eme position, j'extrais donc le 5eme caractère soit le chiffre 4
Le hic c'est si j'ai cet exemple : 0.05
Il n'y a plus rien après le 5 donc la formule sort le vide, et je dois donc prévoir une condition pour remplacer par 0.
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
Modifié le 19 oct. 2018 à 11:28
voyez plutôt avec ma dernière proposition ici, ça devrait je pense régler tous les problèmes:
soit rappel de mon dernier message:
https://forums.commentcamarche.net/forum/affich-35646310-extraire-le-2eme-chiffre-significatif-non-nul#3

... sauf que je ne sais pas ce que vous voulez ressortir quand il n'y a qu'un chiffre après le 0
à tout hasard donc pour ressortir l'éventuel chiffre unique

=SI(NBCAR(SUBSTITUE(A1;0;""))=1;SUBSTITUE(A1;0;"");STXT(SUBSTITUE(A1;0;"");2;1))

crdlmnt
0
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2
19 oct. 2018 à 11:25
La formule que vous proposez contient trop d'exceptions pour être utilisée ...
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
Modifié le 19 oct. 2018 à 13:55
Bonjour à tous,

un essai :
=STXT(TEXTE(A2;"0.00E+00");3;1) 

eric

0
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2
19 oct. 2018 à 14:23
ça ne marche pas pour les lignes : 3,4,5,10,12
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
Modifié le 19 oct. 2018 à 14:43
Parce que la mantisse est trop courte et elle se trouve arrondie.
Garde plus de chiffre pour la mantisse (à choisir selon le nombre max de chiffres significatifs de tes nombres) :
=STXT(TEXTE(A2;"0.00000000E+00");3;1)

eric

PS : perso je n'avais un écart que sur la ligne 5...
Tes vrais nombres ne sont pas issus d'une formule et tu aurais un arrondi à l'affichage ?
Si ton 0.08 est 0.079 le vrai second chiffre est 9, pas 0
Dans ce cas insère le même arrondi dans la formule si tu veux être d'équerre avec l'affichage :
=STXT(TEXTE(ARRONDI(A2;2);"0.00000000E+00");3;1)
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
19 oct. 2018 à 14:22
Bonjour,

Ou ceci

=SI(STXT(CNUM(SUBSTITUE(SUBSTITUE(A1;",";"");",";""));2;1)="";"0";STXT(CNUM(SUBSTITUE(SUBSTITUE(A1;",";"");",";""));2;1))

Cdlt
0
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2
19 oct. 2018 à 14:34
Parfait ! je pense avoir trouvé la même idée au même moment ^^
Juste que le CNUM intervient après le STXT et le résultat n'est donc pas numérique.
Je saurai cependant m'en sortir :)

Je vais maintenant m'employer à convertir cette formule en VBA :)

Merci pour votre aide et vos idées
0
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2
19 oct. 2018 à 14:31
Je pense avoir trouvé un début de solution assez simple en utilisant SUBSTITUTE :
1) Je supprime la virgule du montant inscrit en colonne A
=SUBSTITUE(A2;",";"")

2) Puis j'extrais de ce résultat le chiffre immédiatement à droite du 1er CS de la colonne B.

Connaissant le montant en colonne A ainsi que le 1er CS en colonne B, je peux finalement tout résumer dans une seule formule qui est la suivante :
=SIERREUR(CNUM(STXT(SUBSTITUE(A2;",";"");TROUVE(B2;SUBSTITUE(A2;",";""))+1;1));0)
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
Modifié le 19 oct. 2018 à 14:51
J'ai complété ma réponse car à mon avis tu n'avais pas tout dit
https://forums.commentcamarche.net/forum/affich-35646310-extraire-le-2eme-chiffre-significatif-non-nul#15

En vba une simple boucle le fait, sans prise de tête ;-)

Et j'ai dans l'idée que ton vrai objectif est d'arrondir des prix.
Tu as Plancher() et Plafond() pour ça
0
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2
Modifié le 19 oct. 2018 à 16:34
Je n'ai pas donné effectivement la raison de ce que je voulais faire :
Je travaille sur le test de Benford que vous connaissez sûrement.

Isoler le 1er CS de chaque donnée et tracez la courbe, vous obtenez toujours (très souvent) une répartition comme ceci :
1er chiffre % théorique
1 30,1%
2 17,6%
3 12,5%
4 9,7%
5 7,9%
6 6,7%
7 5,8%
8 5,1%
9 4,6%

De plus, ça fonctionne également pour le 2eme CS (avec des proportions néanmoins plus "tassées"). Et c'était l'objet de mon questionnement : isoler ce fameux 2eme CS.


La répartition devient totalement homogène à partir du 3eme CS.

Voici un exemple avec la suite de Fibonacci : (1er et 2eme CS)
https://www.cjoint.com/c/HJtoBXBwk3M

base de données sur le 1er onglet
graphiques sur le 2eme onglet

[EDIT] : j'ai oublié de changer dans le 2eme onglet, le tableau en dessous du 1er graphique correspond bien à la répartition du 2eme CS.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2
19 oct. 2018 à 17:07
Petit soucis il me semble avec la fonction SUBSTITUTE sous VBA …
Elle ne fonctionne pas...
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
19 oct. 2018 à 18:36
Pas de raison, mais en VBA tu as Replace.
Note que ma proposition moins tarabiscotée et 2 fois plus courte n'a pas cette fonction.
Mais bon...
0
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2
Modifié le 20 oct. 2018 à 10:09
Je retiens ta proposition qui effectivement est plus simple.
Juste un petit détail : c'est bien une virgule dans le paramètre de la fonction TEXTE, parce que moi, j'avais toujours 0 en résultat je ne comprenais pas ... et j'ai également converti en numérique.
J'ai testé tous les cas de figure

Voici la formule que je retiens donc :
=CNUM(STXT(TEXTE(A1;"0,00000000E+00");3;1))
Merci en tout cas pour votre aide !

PS : avant de clore cette discussion, je peux revenir ici pour la traduction au VBA en cas de soucis ou je dois ouvrir une autre discussion ?


[EDIT]
Ci-dessous le code en VBA pour réaliser la même chose que via cette formule
Je pense que je n'ai plus d'autres questions du coup.
Il ne me reste plus qu'à vous remercier pour votre aide précieuse, je vais pouvoir continuer d'avancer :)
Je mets en RESOLU d'ici la fin du week-end.
Sub extraction()

Dim total As Long
total = Range("A60000").End(xlUp).Row

For i = 1 To total
    Cells(i, 2) = Val(Mid(Format(Cells(i, 1), "0.0000000000E+00"), 3, 1))
Next i

End Sub
0