XL 2013 Extraction données sur plusieurs critères

jik67

XLDnaute Nouveau
Bonjour et merci d'avance pour votre aide,

Alors j'ai un petit problème que j'essaie de régler depuis pas mal de temps
(voir fichier)

Je voudrais que dans la feuille 2 en fonction de 2 critères, cela m'affiche tout les références liés à cela. Le problème c'est que la référence est basée en fonction d'un numéro produit sur une ligne et l'autre sur une cellule (les codes sont des acronymes pour un état d'avancé en quelques sortes et les réf sont des réf d'opérations).

J'ai bien essayé une solution de ce type : https://www.excel-downloads.com/threads/extraction-dune-liste-en-fonction-dun-critere.141877/ (l'exemple de madweb)
Mais comme dit je bloque complètement à cause des colonnes.
Le but étant aussi de pas avoir d'usine à gaz étant donné que y'a plus de 1200 réf d'opérations.
Et même si VBA existe j'y comprends absolument rien en programmation :D.

Merci
 

Pièces jointes

  • Classeur1.xlsx
    9.3 KB · Affichages: 11
Dernière édition:

JHA

XLDnaute Barbatruc
Bonjour à tous,

Avec une formule matricielle
VB:
=SIERREUR(INDEX(Feuil1!$A$4:$A$100;PETITE.VALEUR(SI(DECALER(Feuil1!$A$3;1;EQUIV($J$2;Feuil1!$B$3:$F$3;0);100)=$J$4;LIGNE(DECALER(Feuil1!$A$3;1;EQUIV($J$2;Feuil1!$B$3:$F$3;0);100))-3);LIGNE(1:1)));"")
Copier vers le bas

JHA
 

Pièces jointes

  • Classeur1 (4).xlsx
    10.6 KB · Affichages: 15

jik67

XLDnaute Nouveau
Bonjour à tous,

Avec une formule matricielle
VB:
=SIERREUR(INDEX(Feuil1!$A$4:$A$100;PETITE.VALEUR(SI(DECALER(Feuil1!$A$3;1;EQUIV($J$2;Feuil1!$B$3:$F$3;0);100)=$J$4;LIGNE(DECALER(Feuil1!$A$3;1;EQUIV($J$2;Feuil1!$B$3:$F$3;0);100))-3);LIGNE(1:1)));"")
Copier vers le bas

JHA
Salut JHA,

Merci de ton aide, et oui c'est exactement ce que je voulais, cependant quand je copie la formule sur mon doc source et en modifiant les plages et les feuilles. Excel me sort une erreur comme quoi cette formules est fausse etc.
J'ai également essayé de recopier à la main mais là il y a juste rien qui s'affiche... Pas même de zéro, de N/A.
Aurais-tu une explication ?

Edit : J'ai bien fait ctrl/maj/enter.
Egalement je comprends pas totalement le sens de tout les termes, je n'ai jamais utiliser de formules matricielles avant.
 
Dernière édition:

JHA

XLDnaute Barbatruc
Bonjour à tous,

Tu as certainement un soucis avec ligne()-3.

VB:
=PETITE.VALEUR(SI(DECALER(Feuil1!$A$3;1;EQUIV($J$2;Feuil1!$B$3:$F$3;0);100)=$J$4;LIGNE(DECALER(Feuil1!$A$3;1;EQUIV($J$2;Feuil1!$B$3:$F$3;0);100))-3);LIGNE(1:1))

Code:
=DECALER(Feuil1!$A$3;1;EQUIV($J$2;Feuil1!$B$3:$F$3;0);100)
DECALER(réf, lignes, colonnes, [hauteur], [largeur])

La fontion decaler() te permet de trouver le "produit" dans le tableau de la "Feuil1", le point de référence est la cellule "$A$3"; le "1" est pour débuter en ligne 4 de la "Feuil1", la fonction equiv() permet de trouver la colonne du produit recherché en "J2" de la Feuil2. J'ai mis "100" pour le nombre de données de la plage (hauteur) donc pour ton exemple, cela représente la plage "$C$4:$C$100".

Pour la fonction petite.valeur(), on recherche le nombre de produits qui ont le code de "$J$4", tous les codes trouvés seront notés "vrai" dans la formule. Afin de le retrouver dans la plage, on recherche l'index dans la plage (l'emplacement) avec la fonction ligne(), comme tes données débutent en ligne 4 dans la "Feuil1", il faut ôter "-3".
Ligne(1:1) permet de définir la plus petite valeur, quand tu recopies vers le bas, tu as ligne(2:2) soit la seconde plus petite valeur, etc..

On peut simplifier un peu la formule avec "LIGNE(Feuil1!$A$4:$A$100)-3":
Code:
=SIERREUR(INDEX(Feuil1!$A$4:$A$100;PETITE.VALEUR(SI(DECALER(Feuil1!$A$3;1;EQUIV($J$2;Feuil1!$B$3:$F$3;0);100)=$J$4;LIGNE(Feuil1!$A$4:$A$100)-3);LIGNE(1:1)));"")

J'espère avoir assez clarifié cette formule:rolleyes: pour la remettre dans ton fichier original.


JHA

JHA
 

jik67

XLDnaute Nouveau
Salut !
Merci de ton explication j'ai réussi à résoudre les soucis en modifiant le "-3" et les références du DECALER.
Cependant sur ma source je ne comprends pas pourquoi la formule marche pour qu'un seul critère... Si on se réfère à mon exemple il marche que avec le code "NO" et le reste ne m'affiche rien. Est ce que Excel n'est pas capable de lire les cases du restes ? Ces codes sont mises de manières automatique via SIERREUR où "NO" est le code pour la valeur si erreur et si oui un RECHERCHEV va chercher le code sur une autre feuille source avec les données.

Merci
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

Tu as peut-être:
- un problème avec les "$" dans les formules pour figer les plages de recherche.
- une erreur de syntaxe ou d'espace sur les données, peux-tu vérifier si l'écriture des "codes" est identique dans le tableau et le code à rechercher.
" ABC" est différent de "ABC" qui est différent de "ABC ".

Si tu as toujours le problème, peux-tu annexer un bout de ton fichier sans les données personnelles.

JHA
 

jik67

XLDnaute Nouveau
Salut JHA,

Eh bah... Je pensais pas que Excel était si peu intuitif sur des points comme ça mais effectivement, il manquait des espaces sur mon tableau des codes et tout a été résolu ! Merci à toi !

P.S.: Sait-tu si on peut incorporer une formule ou des formules dans la formule de départ pour éviter de faire des doublons ou vaut mieux faire un tableau séparé qui prendra les données pour en compiler les infos ?
 

jik67

XLDnaute Nouveau
Salut,

Alors oui je connais cette méthode pour les enlever mais n'y a-t-il pas de le faire tout de suite sur le premier tableau directement et pas en une deuxième ? Je trouve que le temps de calcul est quelques peu long, après si y'a pas d'autres moyens je ferrais avec parceque c'est déjà bien comme ça.

En tout cas merci de ton temps et de ton aide :)
 

Discussions similaires