Copier première et dernière entrée complète selon critères

Bonjour,

Est-il possible en partant d'un fichier servant de base de données de copier intégralement la première et la dernière entrée ?

Ex : dans la Feuille 1 j'ai toutes mes données

Je souhaiterais que la feuille 2 s'implémente de la première ligne ou chaque N° de série est apparu pour la première foie et de la dernière ou il est apparu.

Je l'ai simulé manuellement sur ce fichier de démo/test.

P.S. comme toujours pour moi, script impossible car bloqué par l'entreprise.

Merci par avance

Bonjour,

Sous l'entête essayez ceci :

=sort({QUERY($A$1:$F;"SELECT MIN(A), MIN(B), C, MIN(D), MIN(E), MIN(F) WHERE A IS NOT NULL GROUP BY C LABEL MIN(A)'', MIN(B)'', C'', MIN(D)'', MIN(E)'', MIN(F)''";0);QUERY($A$1:$F;"SELECT MAX(A), MAX(B), C, MAX(D), MAX(E), MAX(F) WHERE A IS NOT NULL GROUP BY C LABEL MAX(A)'', MAX(B)'', C'', MAX(D)'', MAX(E)'', MAX(F)''";0)};2;VRAI;3;VRAI;1;VRAI)

Pour avoir le contenu complet de la colonne F, il faut que le format soit "texte brut" sinon, vu qu'il y a plus de nombre que de texte, seule les nombres s'afficheront.

On peut alléger un peu comme ceci :

=sort({QUERY('Feuille 1'!$A$2:$F;"SELECT MIN(A), MIN(B), C, MIN(D), MIN(E), MIN(F) GROUP BY C LABEL MIN(A)'', MIN(B)'', C'', MIN(D)'', MIN(E)'', MIN(F)''";0);QUERY('Feuille 1'!$A$2:$F;"SELECT MAX(A), MAX(B), C, MAX(D), MAX(E), MAX(F) GROUP BY C LABEL MAX(A)'', MAX(B)'', C'', MAX(D)'', MAX(E)'', MAX(F)''";0)};2;VRAI;3;VRAI;1;VRAI)

Merci beaucoup Fred_Bzh, cela va me permettre de largement alléger ma base qui devenait beaucoup trop grosse

J'essaie de l'adapter pour différencier des éléments de la colonne F tel que 1000098 de 1000RES mais j'ai un message d'erreur que je n'avais jamais eu avant :

=sort({QUERY(DB!$A$1:$F;"SELECT MIN(A), MIN(B), C, MIN(D), MIN(E), MIN(F) WHERE F like '1000098' GROUP BY C LABEL MIN(A)'', MIN(B)'', C'', MIN(D)'', MIN(E)'', MIN(F)''";0);QUERY(DB!$A$1:$F;"SELECT MAX(A), MAX(B), C, MAX(D), MAX(E), MAX(F) WHERE F like '1000098' GROUP BY C LABEL MIN(A)'', MAX(B)'', C'', MAX(D)'', MAX(E)'', MAX(F)''";0)};2;VRAI;3;VRAI;1;VRAI)

" Dans la fonction ARRAY_LITERAL, il manque des valeurs pour une ou plusieurs lignes d'un littéral de tableau. "

j'ai lu quelques tuto sur le sujet mais je ne vois pas où, ici, cela ne correspond pas.

En faisant comme ceci

=sort({QUERY(DB!$A$2:$F;"SELECT MIN(A), MIN(B), C, MIN(D), MIN(E), F WHERE F = '1000RES' GROUP BY C, F LABEL MIN(A)'', MIN(B)'', C'', MIN(D)'', MIN(E)'', F''";0);QUERY(DB!$A$2:$F;"SELECT MAX(A), MAX(B), C, MAX(D), MAX(E), F WHERE F = '1000RES' GROUP BY C, F LABEL MAX(A)'', MAX(B)'', C'', MAX(D)'', MAX(E)'', F''";0)};2;VRAI;3;VRAI;1;VRAI)

Vous pourriez également faire différemment en utilisant une liste de validation

Par exemple en A1 une liste de validation avec les données : 1000001, 1000009, 1000098, 1000RES

en A3 vous mettez votre entête et en A4 cette formule :

=sort({QUERY(DB!$A$2:$F;"SELECT MIN(A), MIN(B), C, MIN(D), MIN(E), F WHERE F = '"&$A$1&"' GROUP BY C, F LABEL MIN(A)'', MIN(B)'', C'', MIN(D)'', MIN(E)'', F''";0);QUERY(DB!$A$2:$F;"SELECT MAX(A), MAX(B), C, MAX(D), MAX(E), F WHERE F = '"&$A$1&"' GROUP BY C, F LABEL MAX(A)'', MAX(B)'', C'', MAX(D)'', MAX(E)'', F''";0)};2;VRAI;3;VRAI;1;VRAI)

Comme ça, suivant le code alarme sélectionné, vous auriez les résultats et ce qui réduit considérablement la longueur du tableau.

et pour aller plus loin avec cette liste de validation :

Par exemple en A1 une liste de validation avec les données : Afficher tout, 1000001, 1000009, 1000098, 1000RES

en A3 vous mettez votre entête et en A4 cette formule :

=SI($A$1="Afficher tout";sort({QUERY(DB!$A$2:$F;"SELECT MIN(A), MIN(B), C, MIN(D), MIN(E), MIN(F) GROUP BY C LABEL MIN(A)'', MIN(B)'', C'', MIN(D)'', MIN(E)'', MIN(F)''";0);QUERY(DB!$A$2:$F;"SELECT MAX(A), MAX(B), C, MAX(D), MAX(E), MAX(F) GROUP BY C LABEL MAX(A)'', MAX(B)'', C'', MAX(D)'', MAX(E)'', MAX(F)''";0)};2;VRAI;3;VRAI;1;VRAI);sort({QUERY(DB!$A$2:$F;"SELECT MIN(A), MIN(B), C, MIN(D), MIN(E), F WHERE F = '"&$A$1&"' GROUP BY C, F LABEL MIN(A)'', MIN(B)'', C'', MIN(D)'', MIN(E)'', F''";0);QUERY(DB!$A$2:$F;"SELECT MAX(A), MAX(B), C, MAX(D), MAX(E), F WHERE F = '"&$A$1&"' GROUP BY C, F LABEL MAX(A)'', MAX(B)'', C'', MAX(D)'', MAX(E)'', F''";0)};2;VRAI;3;VRAI;1;VRAI))

Si vous sélectionnez "Afficher tout", vous avez le visuel sur l'ensemble date min et max quel que soit le code alarme, sinon vous choisissez le code alarme pour n'afficher que le résultat qui correspond.

D'accord :)

Qu'appelez vous entête en A3 ?

J'essaie d'intégrer dans votre formule :

=sort({QUERY(DB!$A$2:$F;"SELECT MIN(A), MIN(B), C, MIN(D), MIN(E), F WHERE F = '1000RES' GROUP BY C, F LABEL MIN(A)'', MIN(B)'', C'', MIN(D)'', MIN(E)'', F''";0);QUERY(DB!$A$2:$F;"SELECT MAX(A), MAX(B), C, MAX(D), MAX(E), F WHERE F = '1000RES' GROUP BY C, F LABEL MAX(A)'', MAX(B)'', C'', MAX(D)'', MAX(E)'', F''";0)};2;VRAI;3;VRAI;1;VRAI)

l'affichage de la colonne G de 'db' mais je n'y arrive pas

L'entête c'est le titre de vos colonnes

Date Alarme système Nom Client N° Série Appareil Contrat Intitulé Code alarme Resul Alarme

Sans liste de diffusion :

=sort({QUERY(DB!$A$2:$G;"SELECT MIN(A), MIN(B), C, MIN(D), MIN(E), F, MIN(G) WHERE F = '1000RES' GROUP BY C, F LABEL MIN(A)'', MIN(B)'', C'', MIN(D)'', MIN(E)'', F'', MIN(G)'' ";0);QUERY(DB!$A$2:$G;"SELECT MAX(A), MAX(B), C, MAX(D), MAX(E), F, MAX(G) WHERE F = '1000RES' GROUP BY C, F LABEL MAX(A)'', MAX(B)'', C'', MAX(D)'', MAX(E)'', F'', MAX(G)'' ";0)};2;VRAI;3;VRAI;1;VRAI)

avec liste de diffusion en A1

=SI($A$1="Afficher tout";sort({QUERY(DB!$A$2:$G;"SELECT MIN(A), MIN(B), C, MIN(D), MIN(E), MIN(F), MIN(G) GROUP BY C LABEL MIN(A)'', MIN(B)'', C'', MIN(D)'', MIN(E)'', MIN(F)'', MIN(G)''";0);QUERY(DB!$A$2:$G;"SELECT MAX(A), MAX(B), C, MAX(D), MAX(E), MAX(F), MAX(G) GROUP BY C LABEL MAX(A)'', MAX(B)'', C'', MAX(D)'', MAX(E)'', MAX(F)'', MAX(G)''";0)};2;VRAI;3;VRAI;1;VRAI);sort({QUERY(DB!$A$2:$G;"SELECT MIN(A), MIN(B), C, MIN(D), MIN(E), F, MIN(G) WHERE F = '"&$A$1&"' GROUP BY C, F LABEL MIN(A)'', MIN(B)'', C'', MIN(D)'', MIN(E)'', F'', MIN(G)''";0);QUERY(DB!$A$2:$G;"SELECT MAX(A), MAX(B), C, MAX(D), MAX(E), F, MAX(G) WHERE F = '"&$A$1&"' GROUP BY C, F LABEL MAX(A)'', MAX(B)'', C'', MAX(D)'', MAX(E)'', F'', MAX(G)''";0)};2;VRAI;3;VRAI;1;VRAI))

Merci beaucoup, j'ai encore dû raté une "," ou un truc du genre car j'ai tenté cela aussi avant de poster... suis nul^^

N'oubliez pas de mettre le sujet en résolu si la solution vous convient.

C'est fait et merci pour votre dernière proposition : c'est super.

Bonjour, petite question, est-il possible de demander la formule de ne pas classer par ordre alphabétique de B mais par ordre Chronologique du premier résultat en A ?

D'ailleurs pourquoi classe-t-elle par B, aucun élément ne lui demande ? c'est pas défaut l'ordre alphabétique ?

Bonjour Sébastien,

La fonction Sort() trie tes résultats par défaut en ordre croissant.

Cordialement,

Fil.

Ok cela se joue donc dans la partie :

};2;VRAI;3;VRAI;1;VRAI

que je dois passer en

};1;VRAI;2;VRAI;3;VRAI)

ce qui va me donner un tri par date puisque colonne 1=A et A = ma date

Ok merci :)

Rechercher des sujets similaires à "copier premiere derniere entree complete criteres"