Extraire le 2eme chiffre significatif (non nul)
Résolu
F60lebaladinverni
Messages postés
128
Date d'inscription
Statut
Membre
Dernière intervention
-
F60lebaladinverni Messages postés 128 Date d'inscription Statut Membre Dernière intervention -
F60lebaladinverni Messages postés 128 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Extraire le 2eme chiffre significatif (non nul)
- Extraire une video youtube - Guide
- Extraire le son d'une vidéo - Guide
- Excel trier par ordre croissant chiffre - Guide
- Clavier iphone chiffre et lettre - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
5 réponses
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
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
Bonjour à tous,
un essai :
eric
un essai :
=STXT(TEXTE(A2;"0.00E+00");3;1)
eric
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) :
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 :
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)
Bonjour,
Ou ceci
=SI(STXT(CNUM(SUBSTITUE(SUBSTITUE(A1;",";"");",";""));2;1)="";"0";STXT(CNUM(SUBSTITUE(SUBSTITUE(A1;",";"");",";""));2;1))
Cdlt
Ou ceci
=SI(STXT(CNUM(SUBSTITUE(SUBSTITUE(A1;",";"");",";""));2;1)="";"0";STXT(CNUM(SUBSTITUE(SUBSTITUE(A1;",";"");",";""));2;1))
Cdlt
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)
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)
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
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
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Petit soucis il me semble avec la fonction SUBSTITUTE sous VBA …
Elle ne fonctionne pas...
Elle ne fonctionne pas...
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.
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
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 ?
=STXT(SUBSTITUE(A1;0;"");2;1)
ou bien sur selon le format voulu:
=STXT(SUBSTITUE(A1;0;"");2;1)*1
crtdlmnt
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.
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