QUERY et condition de temps

Bonjour,
Je continue de me creuser la tête et comme je n'y arrive pas tout seul, je vous met à contribution ;-)
En A des dates en B des noms
Je cherche à récupérer les noms et les dates (A & B) si le nom n'est pas apparu depuis 30 jours.
j'ai tenté plusieurs trucs mais n'arrive à rien (comme souvent ;-))
https://docs.google.com/spreadsheets/d/1Pp2C2mXmgqTTNQmK5c2ijHfF69dVWBTC-N6qjIfgVZk/edit?usp=sharing
merci de l'aide
bonne journée bien cordialement
Marc

Bonjour Marc,

Voilà une solution :

=sort({UNIQUE(FILTER(B3:B;A3:A< AUJOURDHUI()-30))\byrow(unique(FILTER(B3:B;A3:A< AUJOURDHUI()-30));lambda(n;query(A3:B100;"select max(A) where B='"&n&"' label max(A)''")))})

https://docs.google.com/spreadsheets/d/108jfwV_Fp0oZdtgqXSqF3zP9LOEh2Ev-iFBRxR0pdDw/edit?usp=sharing

=query(byrow(unique(FILTER(B3:B;A3:A< AUJOURDHUI()-30));lambda(n;query(A3:B100;"select B, max(A) where B='"&n&"' group by B  label max(A)''")));"select * order by Col2 desc")

Ou trié par dates....

Cordialement,

Fil.

Bonsoir Fil,

merci pour ce retour.

Quelle formule ! je ne connaissais pas byron, lambda et n ... je vais creuser la question.

malheureusement cela ne fonctionne pas, regarde le fichier que tu as joint, il n'y a que 27 jours à certaines dates....
merci encore

bonne soirée

bien cordialement
Marc

=sort({UNIQUE(FILTER(B3:B;A3:A< AUJOURDHUI()-30))\byrow(unique(FILTER(B3:B;A3:A< AUJOURDHUI()-30));lambda(n;query(A3:B100;"select max(A) where A<DATE '"&TEXTE(AUJOURDHUI()-30;"yyyy-MM-dd")&"' and B='"&n&"' label max(A)''")))})
=query(byrow(unique(FILTER(B3:B;A3:A< AUJOURDHUI()-30));lambda(n;query(A3:B100;"select B, max(A) where  A<DATE '"&TEXTE(AUJOURDHUI()-30;"yyyy-MM-dd")&"' and B='"&n&"' group by B  label max(A)''")));"select * order by Col2 desc")

https://docs.google.com/spreadsheets/d/108jfwV_Fp0oZdtgqXSqF3zP9LOEh2Ev-iFBRxR0pdDw/edit?usp=sharing


C'est rectifié, j'avais omis une condition...


Rebonjour et REMERCI ;-)

Malheureusement, ça ne fonctionne pas et je n'arrive pas à comprendre quoi et comment corriger ....
Certains noms sont présents dans la liste alors qu'il ont moins de 30 j ...

forum

merci de ton aide
Bien cordialement

Marc

Bonjour,

Solution avec script :

function quiEstCe() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheetByName("Feuille 1"); // Remplacez "Feuille 1" par le nom de votre feuille
  let donnees = sheet.getRange(3, 1, sheet.getLastRow(), 2).getValues(); // dans ce cas, début de plage ligne 3, colonne 1 à modifier au besoin
  let trentejours = new Date();
  trentejours.setDate(trentejours.getDate() - 30);
  let nomPerimes = donnees.filter(row => {
    let dateNom = new Date(row[0]);
    return dateNom < trentejours;
  });

  nomPerimes = nomPerimes.filter(nomPerime => {
    return !donnees.some(nom => nom[1] === nomPerime[1] && new Date(nom[0]) > trentejours);
  });

  sheet.getRange(3,4,nomPerimes.length,nomPerimes[0].length).setValues(nomPerimes) // plage d'écriure des noms périmés, dans ce cas à partir de la ligne 3, colonne 4 à modifier au besoin
}

@Fil si tu trouves une solution avec Query ça m'intéresse

Super

ça fonctionne
je reste également intéressé par la formule query ;-)

bonne journée @ tous

merci

J'espère que j'ai bon cette fois-ci...

https://docs.google.com/spreadsheets/d/1N7yhWeJb6oDbnvvLpjs0ENwRAOw4JHNyKtcJFEtBShM/edit?usp=sharing
=SORT(UNIQUE(ARRAYFORMULA(SI(NB.SI(query(A3:B100;"select B where A > DATE '"&TEXTE(AUJOURDHUI()-30;"yyyy-MM-dd")&"'");query(byrow(unique(FILTER(B3:B;A3:A< AUJOURDHUI()-30));lambda(n;query(A3:B98;"select B, max(A) where A<DATE '"&TEXTE(AUJOURDHUI()-30;"yyyy-MM-dd")&"' and B='"&n&"' group by B label max(A)''")));"select Col1 order by Col2 desc"))=0;query(byrow(unique(FILTER(B3:B;A3:A< AUJOURDHUI()-30));lambda(n;query(A3:B98;"select B, max(A) where A<DATE '"&TEXTE(AUJOURDHUI()-30;"yyyy-MM-dd")&"' and B='"&n&"' group by B label max(A)''")));"select Col2, Col1 order by Col2 desc");)));2;1)
=query(UNIQUE(ARRAYFORMULA(SI(NB.SI(query(A3:B100;"select B where A > DATE '"&TEXTE(AUJOURDHUI()-30;"yyyy-MM-dd")&"'");query(byrow(unique(FILTER(B3:B;A3:A< AUJOURDHUI()-30));lambda(n;query(A3:B98;"select B, max(A) where A<DATE '"&TEXTE(AUJOURDHUI()-30;"yyyy-MM-dd")&"' and B='"&n&"' group by B label max(A)''")));"select Col1 order by Col2 desc"))=0;query(byrow(unique(FILTER(B3:B;A3:A< AUJOURDHUI()-30));lambda(n;query(A3:B98;"select B, max(A) where A<DATE '"&TEXTE(AUJOURDHUI()-30;"yyyy-MM-dd")&"' and B='"&n&"' group by B label max(A)''")));"select Col1, Col2  order by Col2 desc");)));"select Col2, Col1 where Col1 is not null")

Whaouuuuuu !!!
je ne suis pas prêt de la comprendre celle là ;-)
elle a l'air de fonctionner.

Bravo et merci beaucoup

Il y avait plus de contraintes qu'il n'y paraissait...

Si ça fonctionne, tu peux clôturer le sujet, stp ?

Merci,

Rechercher des sujets similaires à "query condition temps"