Faire un top 10 avec conditions
Bonjour
Je souhaiterai créer un top 10 d'une colonne si deux cellules sont vérifiées.
Quelqu'un aurais-t-il une formule sous la main ? d'habitude je combine INDEX(Matrice;EQUIV(PETITE.VALEUR(;);;)).
Merci d'avance
Salut,
Je pensais plutôt à une combinaison INDEX-SI-LIGNE-PETITE.VALEUR !
Bonne journée
Ferrand
Merci pour cette réponse MFerrand je vais essayer.
Pour être plus clair je mets un fichier expliquant mon cas.
Ma réponse a planté, j'ignore pourquoi ?
Je ne reprends pas les explications (plus tard si besoin). Formule matricielle sur première cellule, à tirer vers le bas, pour chaque cas. Voir classeur.
A+
Ferrand
Effectivement, j'ai essayé la formule sans succés, je ne comprends pas pourquoi : LIGNE(PETITE.VALEUR()) ne fonctionne pas ...
Merci pour la formule matricielle. Je vais essayer de l'adapter à mon fichier.
J'aimerais bien des explication sur les formules matricielles car j'avoue que c'est une découverte pour moi
Merci en tout cas je pense tenir le bon bout ^^
Bonsoir,
[b]=T(INDEX(A:A;MOD(PETITE.VALEUR(Tableau1[Moyenne]*1000+SI((Tableau1[Critère1]="AZ")*(Tableau1[Critère2]="OP");LIGNE(Tableau1[Moyenne]);900999);LIGNE(1:1));1000)))
[/b]
Je rectifie ma formule ! Il me semblait bien que quelque chose n'allait pas, elle donnait le bon résultat en fait parce que tes résultats étaient triés par moyenne croissante, mais ne l'auraient pas donné autrement. J'ai été un peu perturbé par ton tableau en mode "Tableau Excel" que je n'aime pas trop utiliser et étant pressé par le temps... Mais en commençant à donner l'explication, elle ne cadrait pas avec la formule !! D'où rectification avec une formule qui fonctionne quel que soit le classement des données.
Le problème : tu veux classer les 10 premiers de ta liste qui répondent à un critère 1 et un critère 2 simultanément dans l'ordre croissant du résultat de la colonne D. Il faut donc faire en sorte que ceux qui répondent aux conditions de critères 1 et 2 se placent devant ceux qui n'y répondent pas, et ensuite qu'ils soient eux-mêmes classés entre eux dans l'ordre des moyennes de la plus petite à la plus grande. Puis y incorporer en même temps un élément permettant d'extraire le nom correspondant qui se trouve en colonne A.
Si les éléments prennent des valeurs correspondant à l'ordre indiqués, on récupèrera la valeur des 10 premiers par PETITE.VALEUR rangs 1 à 10. Si à partir de la valeur on peut trouver le nom, on aura donc notre Top.
On va donc transformer ce tableau en une matrice de valeurs numériques classables :
- La moyenne garantit un classement ordonné, indépendamment des conditions.
- Il faut donc assortir cette moyenne d'un élément d'identification pour ceux qui répondent aux conditions, et gonfler la valeur pour les rejeter de ceux qui n'y répondent pas.
- Si on multiplie la moyenne par un nombre assez élevé (en fonction du nombre de participants, il y en a moins de 100), 1000 paraît convenable, et qu'on ajoute pour ceux qui répondent aux conditions le numéro de ligne, ceux qui répondent seront toujours classés dans l'ordre voulu et on pourra extraire le numéro de ligne avec MOD.
- Reste à éliminer ceux qui ne répondent pas aux conditions. On va donc leur ajouter un nombre supérieur à celui que peut atteindre au maximum ceux qui répondent à la condition : on a pour ces dernier un nombre inférieur à 100000, donc en en ajoutant 900000 on est sûr d'être au-delà.
- Mais si le nombre se termine par 000, la recherche de ligne sur 0 va générer une erreur. En ajoutant 900999, on fera pointer ceux qui ne répondent pas aux conditions sur la ligne 999 dont on sait qu'elle est vide, ce qui éliminera du top 10 ceux qui ne répondent pas aux conditions.
Donc pour chaque ligne de la liste on compose un nombre = moyenne*1000 + si conditions ok : numéro ligne, sinon : 900999.
On obtient donc une matrice de nombre dont on peut extraire les 10 premières petites valeurs. Pour la première, il faut 1 comme 2e argument de la fonction PETITE.VALEUR. Si on met LIGNE(1:1) qui renvoie 1, en se recopiant sur les lignes suivantes, l'expression va s'incrémenter et renvoyer 2, 3, 4... La fonction va donc être "tirable".
On applique au résultat renvoyé par PETITE.VALEUR l'extraction du reste de la division par 1000, avec MOD, ce qui va nous donner le numéro de ligne pour les "bons" et 999 pour les éliminés.
Avec INDEX on peut extraire le nom de la colonne A en appliquant la fonction à l'ensemble de la colonne. Pour les éliminés, s'affichera la valeur de A999, soit 0 puisqu'elle est vide.
En utilisant T (fonction qui force le renvoi en texte), s'agissant d'une cellule vide, au lieu de 0 elle renverra "".
Pour que la matrice composée à partir des colonnes B, C, D soit prise en compte comme matrice, il faut valider la formule par la combinaison de touches Ctrl+Maj+Entrée, ce qui l'encadre d'accolades.
Il ne reste plus qu'à tirer pour la recopier.
Merci pour ton aide
Je comprends mieux la fonction ^^ maintenant je vais essayer de l'appliquer à mon cas.
Grace à toi je vais prendre du niveau en excel 8)
Bonjour,
Propositions sans formule avec un TCD, à voir si c'est compatible avec ton vrai tableau.
Choisir les critères dans les segments à droite.
eric
Merci Eric pour ta contribution.
Je n'arrivais pas appliquer la formule matricielle à mon tableau qui est plus complexe que celui que j'ai fait pour mon exemple (ma faute...).
Mais la méthode de ton deuxième TCD correspond parfaitement à mes besoins, je vais pouvoir avancer dans mon travail .
Je vais quand même continuer à m'exercer sur la formule matricielle histoire de voir si j'arrive à me l'approprier
Merci à tous les deux donc