Se deplacer a l'ouverture

Bonjour,

je souhaiterai à l'ouverture d'un onglet d'un fichier sheet aller directement sur la ligne de la date du jour. Le nb de lignes etant important et le scroll long a la souris.

Si vous pouvez me depanner new en gogle sheet Merci

Bonjour,

je te prépare quelque chose en parallèle

Exemple :

  • dates en colonne A de la première feuille au format yyyy-MM-dd
  • timezone de l'éditeur de script en conformité avec les paramètres locaux
function onOpen() {
  var d = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy-MM-dd");
  var sh = SpreadsheetApp.getActiveSheet()
  var calend = sh.getRange('A:A').getDisplayValues().flat().filter(d => d != '')
  sh.getRange('A' + (calend.indexOf(d) + 1)).activate()
}

Comment faire c'et un google sheet

J'ai cela

capture d e cran 2022 04 19 a 11 45 17

c'est quoi la ligne 7 ?

comment sont notées tes dates ? sur quelle colonne ? avec quel format ?

pour partager un fichier https://www.sheets-pratique.com/fr/cours/partage

Ligne 7 : derniere ligne de ta fonction

DATE : en A1:A167

Format : "Du : "ddd" "dd"/"mm"/"yyyy

https://docs.google.com/spreadsheets/d/15Xaey5J9JXAhVL-9bEKZXGtLbaGlOmGdif91e7cHIw0/edit?usp=sharing

D'abord le timezone du script doit être réglé à Europe/France pour être en conformité avec ta feuille

image

pour le régler ... https://forum.excel-pratique.com/sheets/google-script-remplissage-et-creation-quittances-puis-envoie...

Ensuite, ta zone A2 n'est pas une date mais du texte, on le voit via la barre d'adresse

image

alors que pour A11 c'est ok

image

le dernier point à traiter est la transformation du jour anglais en jour français !! sinon j'obtiens Du : Tue 19/04/2022

... à suivre

J'ai contourné le problème du format de date

function onOpen() {
  const today = new Date();//today
  const d = new Date(today.getFullYear(),today.getMonth(),today.getDate()); // 00:00:00
  var sh = SpreadsheetApp.getActiveSheet()
  var calend = sh.getRange('A1:A'+sh.getLastRow()).getValues().flat()
  for (var i=0;i<calend.length;i++){
    if (isDate(calend[i])) calend[i]=calend[i]*1
  }
  sh.getRange('A' + (calend.indexOf(d*1) + 1)).activate()
}
function isDate(date) {
  return (date instanceof Date && !isNaN(date.valueOf()));
}

https://docs.google.com/spreadsheets/d/1xWGd8Pas0zbM9g3lZL_BEKVncRmuaI_Ntg9jIeKQzyA/edit?usp=sharing

Super , ca marche

J'abuse

Mais comment placer ces 2 fonctions en une seule et

comment automatiser les 2 fonctions a l'ouverture sans avoir besoin de déclencher manuellement les deux macros

Merci

Mais comment placer ces 2 fonctions en une seule et

comment automatiser les 2 fonctions a l'ouverture sans avoir besoin de déclencher manuellement les deux macros

  1. onOpen s'exécute à l'ouverture automatiquement (comme son nom l'indique)
  2. et isDate est une "sous-fonction" qui est appelée par onOpen ...

tu n'as donc rien à faire

Merci beaucoup pour cette aide

et si je veux re utiliser ces fonctions dans d'autres feuilles, que faut il faire: copier les fonctions dans autre macro ou autre chose ?

Encore merci ca facilite la tache

A+

La fonction s'applique par défaut à la première feuille du classeur, celle qui est ouverte "par défaut"

Si on veut en plus ouvrir sur une feuille particulière, il faut essayer ceci

function onOpen() {
  var nom = "le nom de la feuille à ouvrir";
  var today = new Date();
  var d = new Date(today.getFullYear(),today.getMonth(),today.getDate()); // 00:00:00
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName(nom)
  var calend = sh.getRange('A1:A'+sh.getLastRow()).getValues().flat()
  for (var i=0;i<calend.length;i++){
    if (isDate(calend[i])) calend[i]=calend[i]*1
  }
  ss.setActiveSheet(sh)
  sh.getRange('A' + (calend.indexOf(d*1) + 1)).activate()
}
function isDate(date) {
  return (date instanceof Date && !isNaN(date.valueOf()));
}

je n'ai pas testé

Ok je vais tester

2 autres precisions STP

Si dans la colonne date j'ai une formule type :"SI(AUJOURDHUI()=T86;SI(S86="";$N$2;);)" ca marche aussi ???

----------------

D'autre part, je remarque que le focus se place bien sur la date d'aujourdhui mais si la date aujourdhui se trouve à la ligne 678 la feuille scrollera t elle jusque la cellule A678 ????

Si dans la colonne date j'ai une formule type :"SI(AUJOURDHUI()=T86;SI(S86="";$N$2;);)" ca marche aussi ???

oui

D'autre part, je remarque que le focus se place bien sur la date d'aujourdhui mais si la date aujourdhui se trouve à la ligne 678 la feuille scrollera t elle jusque la cellule A678 ????

dans ce cas, il faut se déplacer d'abord x lignes plus loin et revenir en arrière

function onOpen() {
  const today = new Date();//today
  const d = new Date(today.getFullYear(),today.getMonth(),today.getDate()); // 00:00:00
  var sh = SpreadsheetApp.getActiveSheet()
  var calend = sh.getRange('A1:A'+sh.getLastRow()).getValues().flat()
  for (var i=0;i<calend.length;i++){
    if (isDate(calend[i])) calend[i]=calend[i]*1
  }
  if (calend.indexOf(d*1) != -1){
    sh.getRange('A' + (calend.indexOf(d*1) + 10)).activate()
    sh.getRange('A' + (calend.indexOf(d*1) + 1)).activate()
  }
}
function isDate(date) {
  return (date instanceof Date && !isNaN(date.valueOf()));
}

pas testé, à voir

Merci beaucoup on va tester tout cela et Merci encore pour votre aide

Rechercher des sujets similaires à "deplacer ouverture"