Liste avec 3 conditions
Bonjour à toutes et tous,
Grace à une formule matricielle adaptée à partir d'une solution de Jacques Boisgontier j'arrive à extraire une liste avec 2 conditions.
Je voudrais pouvoir faire la même chose mais avec 3 conditions.
Suite a vos conseils respectifs j'ai bien conscience qu'une solution via formule notamment matricielle est consommatrice de temps de calcul (mon jeu de données réels contient beaucoup de valeurs), je suis donc aussi à l'écoute d'une approche via MACRO. Même si la solution via formule m'intéresse par curiosité et apprentissage.
Attention si vous me proposez une solution via MACRO, je précise que je suis Excel MAC qui ne gére pas DICTIONARY.
Je ne cherche pas sur cette liste à extraire sans doublons ni trier les données ( je le ferais une fois la première liste obtenue).
Ci joint un classeur exemple.
Merci
Cordialement
Hugues
Bonjour Hugues,
L'adaptation suivante à la formule de JB devrait fonctionner:
=SI(SOMME((Condition01=$M$2)*(Condition02>=$M$3)*(Condition03<=$M$4))>=LIGNES($1:1);INDEX(DONNEES;PETITE.VALEUR(SI((Condition01=$M$2)*(Condition02>=$M$3)*(Condition03<=$M$4);LIGNE(Condition01)-1);LIGNES($1:1)));"")Tu as raison de supposer que ça risque de "pédaler" sur un volume conséquent
Avant d'opter pour une macro, tu peux aussi te passer des formules matricielles, si tu acceptes d'ajouter une colonne à ton tableau de départ. Est-ce envisageable ?
Bonjour à toutes et tous, Bonjour U. Milité
Merci pour ta réponse à la fois rapide et qui répond parfaitement à mon problème.
Et en plus ta formule va me permettre d'essayer de comprendre ce que je n'avais pas réussi à adapter
Oui je peux envisager une étape via colonne supplémentaire à la fois par curiosité mais aussi si au final sur la base réelle cela accélère les temps de calcul.
Encore un grand merci U. Milité
Cordialement
Hugues
Re-bonjour,
Dans ton fichier en pièce jointe, la colonne supplémentaire évoquée est en E; la liste correspondant aux 3 conditions est en colonne I
PS: dans la formule proposée dans mon message précédent, remplacer $I$2 par $M$2 et $I$3 par $M$3 ... si tu essaies de la comprendre, ce sera moins perturbant Je ferai la modif dans les minutes qui suivent, dans le message.
PS2: si tu veux tester la solution par macro, fais-le nous savoir
Bonjour à toutes et tous, Re bonjour U.Milité
Merci pour la solution avec formule et colonne supplémentaire (je vais faire des tests sur ma base réelle pour comparer temps de calcul versus formule une colonne matricielle)
Dans la même optique de tester et d'apprendre oui je veux bien aussi voir une approche via macro (il pleut chez moi en Bretagne et à priori pour tout le week end, un temps à rester chez soi et jouer avec EXCEL).
Dans ta formule initiale j'avais déjà remplacé les éléments tels que tu me le suggère dans ton second message
Et autrement j'adore le "si, si, maintenant c'est bon!" et je confirme que oui cela fonctionne. Merci
Cordialement
Hugues
'
Re,
C'est rare de voir quelqu'un d'aussi curieux, qui cherche à comprendre (et qui lit même les commentaires ajoutés au fichier
En Belgique, il gèle (et on annonce l'arrivée de la neige en soirée: de 3 à 6 cm, selon les régions de cette vaste contrée). Je m'en vais installer un abri et une mangeoire pour les zoiseaux, dès que j'aurai posté la proposition par macro).
Dans le fichier joint, j'ai converti la plage source en tableau (à en croire sa mise en forme, tu avais dû en faire autant). J'ai supprimé les deux lignes vides que contenait cette plage. Attention à l'année de la date en D2 ... qui me semble bien éloignée dans le temps
Les résultats seront "versés" en colonne K.
La macro (procédure événementielle) est lancée chaque fois qu'une cellule aura été éditée dans le tableau ou dans une des cellules contenant les conditions (I2:I4). Si on veut n'exécuter la mise à jour que sur demande, on pourrait l'associer à un bouton (au risque d'oublier de l'activer après chaque changement).
On peut inscrire les 'x' en minuscules (au cas où)
Je présume que ça devrait aussi fonctionner avec ta version d'Excel ?
Bonjour,
Avec une fonction perso réutilisable.
-sélectionner J2:J20
=listecond(A2:A2000;B2:B2000;H2;C2:C2000;H3;D2:D2000;H4)
-Valider avec maj+ctrl+entrée
Boisgontier
Bonjour à toutes et tous, Bonjour U. Milité & Boigontier,
U. Milité, Boigontier merci à vous 2 pour vos contributions qui solutionne ma problématique.
Me voilà donc avec plusieurs approches qui répondent à mon problème donc de quoi m'amuser pour adapter sur ma base réelle et d'autres à venir.
U. Milité :
Oui je confirme que sur la base réelle, les données seront organisée en tableau ceci afin de rendre cela dynamique au fur et à mesure que la base grandit.
Ta macro fonctionne très bien sur ma version d'Excel MAC et je pense la laisser en mode événementielle.
Merci de tes réponses rapides et d'avoir pris le temps de réaliser la proposition via macro avant de mettre les skis pour prendre soins de nos amis les volatiles qui vont voir leur graines être recouvertes par un joli tapis blanc en Belgique semble t'il.
Boigontier :
Merci pour cette fonction personnalisée que je vais m'empresser d'ajouter à ma boite à outils Excel.
Bon week end à vous 2 et à toutes et tous
Post résolu merci beaucoup
Cordialement
Hugues