Ouverture fichier ligne date de jour

Bonjour à tous,

Je cherche une personne qui pourrait m'aider et idéalement me modifier le fichier ci-joint de telle manière que lorsque j'ouvre le fichier google sheet, ca me cale directement sur la date de jour qui est inscrite en colonne B.

Merci à vous !

Salut,

Voici un fichier exemple :

https://docs.google.com/spreadsheets/d/1111vM4udKa0uUBmf8pKBeUyU_wyfJgYgHJkEbkDSOIQ/edit?usp=sharing

Et le script : (il faut adapter le nom de la feuille et la plage des dates, car dans mon cas, c'est la colonne A).

function onOpen(e) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('Feuille 1');
  const today = new Date();
  const todayString = today.toDateString();
  const range = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
  for (let i = 0; i < range.length; i++) {
    let cellDate = new Date(range[i][0]);
    let cellDateString = cellDate.toDateString();
    if (cellDateString === todayString) {
      sheet.getRange(i+1,1).activate()
    }
  }
}

Salut @Pierre,

Par curiosité, pourquoi tu utilises .toDateString pour comparer les dates ? le === ne fonctionne pas sur les objets date directement ?

Salut !

J'ai pour habitude d'uniformiser les données avant des tests / comparaisons pour plus de robustesse, encore plus sur google Sheets qui applique des formats spécifiques sur certaines données (les dates par ex).

Dans ce cas, j'utile toDateString car sinon l'heure est prise en compte (dans ma variable today) et donc, today != cellDate

screenshot 2025 02 27 15 17 43

Il y a toutefois une alternative, moins "propre" mais plus rapide, ce serait de transformer les dates à comparer en string :

function onOpen(e) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('Feuille 1');
  const today = new Date();
  const todayString = Utilities.formatDate(today,'GMT+1','dd/MM/yyyy').toString();
  const range = sheet.getRange(1, 1, sheet.getLastRow(), 1).getDisplayValues();
  for (i=0;i<range.length;i++) {
    if (range[i][0] === todayString) {
      sheet.getRange(i+1,1).activate()
    }
  }
}

Dans ce cas, le script fonctionne, toutefois, c'est un peu bancale de transformer la date en texte, et si demain un user change le format par exemple de : 01/01/2025 à 01/01/25 ou en mercredi 1 janvier 2025 alors le premier script lui fonctionnera toujours, pas le second.

Ah d'accord il ajoute l'heure à la date. Oui du coup tu as besoin de reformater pour extraire uniquement "le jour". Ok super merci !

Merci Pierre.

Je ne suis pas chez moi je vais essayer en rentrant. Par contre comme moi c est B il faut que je remplace les 1 par 2 c est ça ? Merci

Voici le résultat je ne sais pas si c'est normal le jour en cours apparait en bas. C'est un petit long à charger. Merci pour vos éclairages.

capture d ecran 2025 02 27 215913

Salut,

Concernant la rapidité, j'ai mis 15000 dates sur mon fichier et fais des tests (100 itérations) :

avec la version actuelle (qu'on appellera V1), l’exécution de la fonction met : 554.95 ms en moyenne

Avec une seconde version où on remplace la boucle par une recherche d'index :

 const index = range.findIndex(row => row[0] === todayString);
  if (index !== -1) {sheet.getRange(index + 1, 1).activate()}

la fonction met : 629.84 ms en moyenne

En remplaçant la logique par une bouche forEach : 702.22 ms

En JS habituellement les boucles while sont légèrement plus rapide, pas là : 633.99 ms

En conclusion, qu'importe la façon de faire, on arrive sur moins d'une seconde donc, c'est négligeable, le temps de chargement vient peut être du chargement de la page sheets, car il faut qu'elle soit chargée avant que onOpen se lance

Rechercher des sujets similaires à "ouverture fichier ligne date jour"