Enregistrer l'heure actuelle

Avatar de l’utilisateur
Miso

Membre tout neuf
Messages : 1
Inscription : 18 janv. 2024 18:24

Enregistrer l'heure actuelle

Message par Miso »

Bonjour,
J'ai rencontré un problème lors de la création d'un bouton me permettant d'inscrire l'heure à laquelle je l'active dans une cellule (avec un bouton début et un bouton fin pour au final mesurer une durée)
J'ai choisi d'utiliser la fonction =MAINTENANT() : le script la copie puis colle la valeur seul dans la case de l'heure de début. Le problème étant que le document ne s'actualise pas lors de l'activation du script et donc l'heure relevée est faussé.
Malgré avoir essayer de faire d'abord écrire la formule =MAINTENANT() au script (problème de permission ?) ou d'écrire autre chose dans une autre cellule pour actualiser le doc rien n'y fait, la valeur finalement reporté par le script est la valeur du =MAINTENANT(), non actualisé, au lancement du script.
Quelqu'un aurait t'il une voie de recherche ou même une solution à mon problème ?
Merci !
Avatar de l’utilisateur
NC_Quentin

Coach Numericoach
Invétéré
Messages : 32
Inscription : 10 oct. 2022 09:06
A remercié : 1 fois
Remercié : 11 fois

Re: Enregistrer l'heure actuelle

Message par NC_Quentin »

Bonjour !

Sans avoir le code sous les yeux, je ne peux pas identifier directement le problème. Toutefois, je peux vous proposer deux solutions, très similaires. La première étant d’écrire la formule puis de l’écraser :

Code : Tout sélectionner

function ecrireMaintenant(){
  const logsSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Logs");
  const targetRange = logsSheet.getRange(logsSheet.getLastRow() + 1, 1);
  targetRange.setFormula("=NOW()");
  targetRange.setValue(targetRange.getDisplayValue());
}
L’autre étant d’utiliser plutôt Date(), avec en prime un petit formatage pour avoir quelque chose de similaire :

Code : Tout sélectionner

function ecrireDate(){
  const logsSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Logs");
  const targetRange = logsSheet.getRange(logsSheet.getLastRow() + 1, 1);
  const date = new Date();
  targetRange.setValue(new Intl.DateTimeFormat('fr', {
    dateStyle: 'short',
    timeStyle: 'short'
  }).format(date));
}
Toutefois, si le problème vient du fait que le script a une longue durée et que c’est le temps de début qui est affiché, c’est peut-être dû à l’absence de flush. 

SpreadsheetApp.flush()

De manière générale, Apps Script essaye d’attendre avant de faire toutes les opérations de transformation du Sheet, afin de minimiser le temps d’attente. Ce qui expliquerait peut-être votre problème, en fonction du code et de ce que vous faites ! Dans ce cas précis, vous pouvez donc lui ordonner de faire une mise à jour avec un flush, puis écrire votre heure, ce qui devrait corriger ce souci.

En espérant que cela a pu vous être utile !
Avatar de l’utilisateur
Robbert

Membre tout neuf
Messages : 1
Inscription : 20 févr. 2024 09:10

Re: Enregistrer l'heure actuelle

Message par Robbert »

Salut,

Pour votre problème avec la fonction =MAINTENANT() dans un script, une solution possible serait d'utiliser une fonction personnalisée dans votre script pour insérer directement l'heure et la date actuelles comme valeur statique, plutôt que d'insérer la formule =MAINTENANT() qui se met à jour à chaque recalcul du document.Voici un exemple de code en Apps Script pour Google Sheets qui pourrait vous aider :

Code : Tout sélectionner

function insererHeureDebut() { var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var cellule = feuille.getRange("A1"); // Ajustez à la cellule souhaitée var date = new Date(); var options = {hour: '2-digit', minute:'2-digit', second:'2-digit', hour12: false}; cellule.setValue(date.toLocaleTimeString('fr-FR', options)); } function insererHeureFin() { var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var cellule = feuille.getRange("B1"); // Ajustez à la cellule souhaitée var date = new Date(); var options = {hour: '2-digit', minute:'2-digit', second:'2-digit', hour12: false}; cellule.setValue(date.toLocaleTimeString('fr-FR', options)); } 
Ce script insère l'heure actuelle dans les cellules spécifiées (A1 pour le début et B1 pour la fin) en tant que texte, ce qui évite le problème de l'actualisation automatique de la formule =MAINTENANT(). Vous devrez ajuster les références de cellules dans le script selon vos besoins.Pour l'utiliser, vous devrez créer des boutons dans votre feuille Google Sheets et assigner ces fonctions (

Code : Tout sélectionner

insererHeureDebut
et

Code : Tout sélectionner

insererHeureFin
) à chaque bouton respectivement.
Répondre

Rejoignez la discussion 💬

Vous devez être enregistré pour participer à la discussion et échanger avec les différents membres

Inscrivez-vous dès aujourd'hui

Vous n'êtes pas encore membre ? Rejoignez-nous gratuitement dès aujourd'hui et contribuer en postant votre réponse ou question sur tous les forums disponibles

Inscription

Connectez-vous