XL pour MAC extraire des données et les trier en fonction du contenu de certaines cellules

clineM

XLDnaute Junior
Bonjour,
j'ai une feuille data, où j'ai toutes mes données. Je souhaiterai extraire les données et les classer dans de nouvelles feuilles.
Pour chaque élément analysé Li, Be, B ... je vais avoir les données suivantes : Conc, Conc RSD, CPS, CPS RSD
Je souhaite extraire sur des feuilles séparées chaque données.
En partant du modèle =INDEX(data!$C$5:$T$33;EQUIV($A2;data!$A$2:$A$182;0);EQUIV(B$1;data!$B$3:$CC$3;0))
ou et comment j'insère l'info données Conc etc .... ?
Il est possible que certains éléments ne soient pas analysé dans ce cas je souhaite qu'il affiche dans la cellule NA quand pas de données.
Sur la ligne 1 j'ai copié le nom des échantillons, est-il possible de ne prendre que le nom des échantillons pour lequel la cellule C4 (dilution) dans 'data' est > à 1

enfin, dernière question c'est vraiment histoire d'éliminer toute manipulation : dans la colonne A j'ai les noms des éléments analysés. Le nom n'apparait qu'en face de l'info Conc, pour extraire les données il faudrait qu'il apparaisse aussi en face des autres données Conc RSD, CPS, CPS RSD. Est-il possible d'automatiser cela ?

Merci
 

Pièces jointes

  • exemple.xlsx
    26.6 KB · Affichages: 31

Nairolf

XLDnaute Accro
Salut,

Je te propose une solution qui est valable quelque soit l'onglet "donnée" sans modification à faire sur l'onglet data, avec les formules suivantes :
- En A1 : le nom de ta donnée (exemple : CPS)
- En B1 à étirer vers la droite :
Code:
=SIERREUR(INDEX(data!$A$1:$T$33;1;PETITE.VALEUR(SI(data!$C$4:$T$4>1;COLONNE(data!$C$4:$T$4);"");COLONNE()-1));"")
- En A2 à étirer vers le bas :
Code:
=SIERREUR(INDEX(data!$A$1:$T$33;4*LIGNE()-3;1);"")
- En B2 à étirer vers la droite et vers le bas :
Code:
=SIERREUR(INDEX(data!$A$1:$T$33;4*(LIGNE()-2)+EQUIV($A$1;data!$B:$B;0);PETITE.VALEUR(SI(data!$C$4:$T$4>1;COLONNE(data!$C$4:$T$4);"");COLONNE()-1));"")

A noter que ces formules fonctionnent uniquement si les données sont structurées toujours de la même façon dans l'onglet 'data'.
 

clineM

XLDnaute Junior
C'est hors de ma portée, par exemple en B1, je voudrais modifier ton code pour obtenir le nom d'échantillon qui est en fait sur la ligne 3 et pas la 1, je ne vois même pas où ça se trouve :eek:;)
désolée c'est vendredi soir et je suis sur mon automatisation de fichier depuis le début de semaine ....
 

Nairolf

XLDnaute Accro
Salut,

Si je décompose la formule en "B1":
Code:
=SIERREUR(INDEX(data!$A$1:$T$33;1;PETITE.VALEUR(SI(data!$C$4:$T$4>1;COLONNE(data!$C$4:$T$4);"");COLONNE()-1));"")

SIERREUR(formule; valeur si erreur) va mettre une valeur choisie (ici c'est "") dans le cas où la formule est renvoie une erreur, ce qui est le cas quand il n'y a pas de correspondance.

INDEX(plage; ligne; colonne) va chercher la valeur pointée dans la 'plage' de la cellule selon sa position relative dans cette plage (ex: si ligne=1 et colonne=1 alors la valeur retournée est celle de la première cellule de la plage).

Dans la formule INDEX(), ici 'ligne'=1 et 'colonne'=PETITE.VALEUR(...), donc si tu mets 3 au lieu de 1, tu pointeras sur la 3ème ligne de 'plage'.
Celle-ci commençant à "A1", la 3ème ligne de 'plage' est la 3ème ligne de l'onglet.
 

clineM

XLDnaute Junior
Merci pour ce retour. Je m'y remet aujourd'hui après 1 semaine de congés !!!
Petite question : comment fais tu pour que ta formule soit valable pour toute la feuille sans à avoir à étendre ta formule sur des lignes et colonnes supplémentaires ou a supprimer des lignes et colonnes quand le format change ?
 

clineM

XLDnaute Junior
Salut,

Si je décompose la formule en "B1":
Code:
=SIERREUR(INDEX(data!$A$1:$T$33;1;PETITE.VALEUR(SI(data!$C$4:$T$4>1;COLONNE(data!$C$4:$T$4);"");COLONNE()-1));"")

SIERREUR(formule; valeur si erreur) va mettre une valeur choisie (ici c'est "") dans le cas où la formule est renvoie une erreur, ce qui est le cas quand il n'y a pas de correspondance.

INDEX(plage; ligne; colonne) va chercher la valeur pointée dans la 'plage' de la cellule selon sa position relative dans cette plage (ex: si ligne=1 et colonne=1 alors la valeur retournée est celle de la première cellule de la plage).

Dans la formule INDEX(), ici 'ligne'=1 et 'colonne'=PETITE.VALEUR(...), donc si tu mets 3 au lieu de 1, tu pointeras sur la 3ème ligne de 'plage'.
Celle-ci commençant à "A1", la 3ème ligne de 'plage' est la 3ème ligne de l'onglet.

Bonjour, J'essaye de rajouter dans ton code la condition supplémentaire que la cellule sur la ligne4 doit être différent de 1 ou bien que la cellule dans ligne 3 doit contenir blet et donc afficher la cellule dans ligne 3
 

clineM

XLDnaute Junior
Bonjour, j'ai essayé avec ce code :
=INDEX(data!$C$5:$CG$342;EQUIV($A2&$A$1;data!$A5:$A342&data!$B5:$B342;0);EQUIV(B$1;data!C$3:CG$3;0))
mais j'ai une erreur et je n'arrive pas à trouvé d'où elle provient (afin d'afficher la valeur de la cellule qui correspond à 7 LI (2) & BC1 & CPS)
 

Nairolf

XLDnaute Accro
Merci pour ce retour. Je m'y remet aujourd'hui après 1 semaine de congés !!!
Petite question : comment fais tu pour que ta formule soit valable pour toute la feuille sans à avoir à étendre ta formule sur des lignes et colonnes supplémentaires ou a supprimer des lignes et colonnes quand le format change ?
Si j'ai bien compris, il faut utiliser la fonction DECALER() sur les plages concernées en combinaison avec la fonction NBVAL() appliquées à la colonne B et à la ligne 1.

Je regarderai les autres points demain, n'hésite pas à remettre des exemples (avec le résultat réalisé manuellement de ce que tu veux obtenir) pour que tes demandes soient plus claires.
 

Nairolf

XLDnaute Accro
Pour comprendre ce qui a été fait, le mieux est de décomposer fonction par fonction en commençant par la fonction la plus imbriquée.

Un moment je travaille sur des matrices, le symbole * est un "et logique" et le symbole + est "ou logique".
Exemples :
(matA=1)*(matB="test") , ici je cherche la combinaison de conditions qui doivent-être vrai toutes les deux.
(matA=1)+(matB="test") , là je cherche la combinaison de conditions pour lesquelles au moins une doit être vrai.
 

clineM

XLDnaute Junior
Pour comprendre ce qui a été fait, le mieux est de décomposer fonction par fonction en commençant par la fonction la plus imbriquée.

Un moment je travaille sur des matrices, le symbole * est un "et logique" et le symbole + est "ou logique".
Exemples :
(matA=1)*(matB="test") , ici je cherche la combinaison de conditions qui doivent-être vrai toutes les deux.
(matA=1)+(matB="test") , là je cherche la combinaison de conditions pour lesquelles au moins une doit être vrai.
Bonjour Nairolf,
j'ai donc essayé de décortiqué ton code afin de pouvoir l'utiliser dans d'autres situations très proches.
je n'arrive pas à comprendre dans tes formules décaller que vient faire le -1 après la (largeur)
 

Discussions similaires