Condition WHERE dans un query sur toute une colonne

Bonsoir,

Je dispose de 2 fichiers d'import :
- premier onglet (onglet nommé import) qui contient pas mal de données sur des personnes
- second onglet (onglet bilan) où j'ai en colonne I une liste de personnes

J'aimerais afficher dans cet onglet bilan certaines données issues de l'onglet import pour chaque personne qui apparait dans l'onglet bilan. J'arrive à le faire avec la formule

=query(import!A:CD;"select Col23 where Col1="""&I2&"""";0)

, formule que je peux recopier vers le bas pour avoir les données filtrées de chacune des personnes qui m'intéressent.

J'aimerais savoir si je peux améliorer cette formule pour éviter d'avoir à recopier vers le bas sur toute ma liste de personnes cette formule.

Question subsidiaire : je peux faire le même travail avec la combinaison de fonctions INDEX/EQUIV : en terme de temps de calcul, il y-a-t-il une méthode plutôt qu'une autre à utiliser ou est-ce similaire ?

Merci d'avance

Bonjour,

Pour que la formule se développe toute seule, il faut utiliser BYROW + LAMBDA :

=byrow(query(A:CD;"select * where A is not null " );lambda(n;query({import!A:CD};"select Col23 where Col1="""&n&"""";0))

Pour la deuxième question, le mieux est de faire le test !

Cordialement,

Fil.

Bonjour,

Merci pour ton retour.

En faisant l'essai, le résultat ne correspond pas à ce que je cherche : elle me renvoie les informations dans les mêmes lignes que celle du fichier import et non pas dans la ligne correspondant à la personne.
Sans doute que je me suis mal exprimé : comme un fichier vaut mieux que mille mots, voici un fichier d'exemple : https://docs.google.com/spreadsheets/d/1ZuURLn4Bl_wne5i-soxnwqaMOrjN2nBW63CvdMEfL_8/edit?usp=sharing
- mes données issus de l'import qui contient ma "grande" base (dans mon fichier réel environ 10000 lignes)
- en Feuille 2 là où je souhaite trouver les informations : j'ai fait figurer en colonne B la formule que j'ai proposé (que je souhaite améliorer pour éviter de recopier la formule car en pratique j'ai près de 1000 lignes) et en colonne D le résultat de la fonction avec BYROW

Autre question que je me pose sur le fonctionnement de la fonction lambda dans ta proposition : je croyais que la variable (n dans ton exemple) parcourait les lignes or si c'est le cas, comment dans la fonction QUERY associée il traduit Col1="""&n&""" par la recherche d'une cellule ?

PS : d'ailleurs, je pense que dans ta proposition il doit manquer dans le premier query le nom de l'onglet import non ? :

=byrow(query(import!A:CD;"select * where A is not null " );lambda(n;query({import!A:CD};"select Col23 where Col1="""&n&"""";0))

Merci

C'est vrai que c'est plus simple avec un fichier partagé !

Voilà, c'est rectifié :

=byrow(query(import!$A$2:$D;" select A where D is not null ");lambda(n;query(import!$A$2:$D;"select A, D where A = '"&n&"' ")))

Bonsoir,

C'est beaucoup mieux mais je me rends compte qu'en voulant simplifier le fichier partagé, je t'ai peut-être induit en erreur (c'est sans doute également dû au fait que dans ma demande initiale, je cherchais à remplacer une formule pour une colonne alors qu'en réalité, j'en ai plusieurs à traiter).

Donc je reprends mon fichier:

- dans l'import, j'ai en fait plusieurs autres colonnes (je les ai rajoutées) : chaque personne a au-moins un club pour ces colonnes mais il peut y en avoir plusieurs

- dans l'onglet Feuille 2, j'importe les personnes qui ont une spécificité (qui n'apparait pas dans les données de l'onglet import) ; pour toutes ces personnes, je veux récupérer les informations des colonnes D à G qui apparaissent dans l'onglet import (toute personne de l'onglet Feuille 2 est obligatoirement dans l'onglet import).

Je sais que c'est particulier mais je ne maitrise pas les imports : ce serait pour moi beaucoup plus simple si toutes les informations utiles étaient regroupées en un seul et même fichier !

Alors, tu peux adapter comme ça :

=query(SIERREUR(byrow(query(import!$A$2:$D;" select A where A is not null ");lambda(n;query(import!$A$2:$G;"select * where (D is not null or E is not null or F is not null or G is not null) and A = '"&n&"'  order by A "))));"select Col1, Col4, Col5, Col6, Col7 where Col1 is not null ")

Je ne comprends pas ta formule mise à jour : dans quelle partie de la formule se fait la "comparaison" de la liste des personnes importées (colonnes A de la Feuille 2, que j'avais recopier en colonne H) avec celle de l'import général (colonne A de la feuille import) ?

D''après ce que je comprends rapidement (et avec mes connaissances !) de ta formule, tu affiches les noms des personnes de la feuille import pour lesquelles D, E, F ou G sont non nulles (avec les valeurs de ces colonnes associées) ?

Bonjour,

La formule donne effectivement une extraction des données de l'onglet import sans les lignes vides !

Si tu veux uniquement les données afférentes à la liste de noms de la colonne A onglet Feuille 2 :

=query(SIERREUR(byrow(query($A$2:$A;" select A where A is not null ");lambda(n;query(import!$A$2:$G;"select * where (D is not null or E is not null or F is not null or G is not null) and A = '"&n&"'  order by A "))));"select Col1, Col4, Col5, Col6, Col7 where Col1 is not null ")

Le "n" correspond aux itérations sur la colonne A !

En B2 de l'onglet Feuille 2, si tu ne souhaites pas réafficher la colonne A :

=query(SIERREUR(byrow(query($A$2:$A;" select A where A is not null ");lambda(n;query(import!$A$2:$G;"select * where (D is not null or E is not null or F is not null or G is not null) and A = '"&n&"' order by A "))));"select Col4, Col5, Col6, Col7 where Col1 is not null ")

Merci pour ton retour.

Sur un faible échantillon, ça fonctionne donc je suppose que ça marche pour beaucoup plus mais c'est très très long : sans doute car cela demande pas mal de "test" : j'ai moins de temps en ce moment donc je reprendrai ça d'ici une 10aine de jours.

Je reviendrai si besoin d'aide complémentaire (et pour mettre résolu )

Rechercher des sujets similaires à "condition where query toute colonne"