Ajouter 7 jours à une date
Bonjour,
Je suis encore novice sur Apps Script donc j'écris encore mes premiers codes. J'ai essayé de commencer par un petit projet mais je bloque depuis plusieurs jours déjà...
Le projet en question : Ajouter automatiquement une nouvelle feuille à un planning Google Sheets où 1 feuille = 1 semaine.
J'ai réussi à insérer une nouvelle feuille à partir d'un modèle, mais je ne parviens pas à modifier la date (ici en I3).
Mes avancements jusqu'ici :
function nouvelleFeuille() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var feuille = ss.getActiveSheet()
var reponse = Browser.inputBox("Nom de la nouvelle feuille ?")
var modele = ss.getSheetByName("MODELE PLANNING")
var nouveauDoc = ss.insertSheet(reponse,{template:modele} )
var derniereFeuille = SpreadsheetApp.getActive().getSheets().shift();
var jour1Ancien = derniereFeuille.getRange("I3").getValue()
var dateJour1Ancien = new Date (jour1Ancien)
var jour1Nouveau = nouveauDoc.getRange("I3").getValue()
var dateJour1Nouveau = new Date (jour1Nouveau)
dateJour1Nouveau.setDate(dateJour1Ancien.getDate()+7)
}Quand je clique sur "exécuter", une nouvelle feuille est bien créée à partir du modèle mais la date ne change pas...
Des conseils pour débloquer la situation ?
Merci
Bonjour,
Si tu veux insérer dans ta nouvelle feuille la date de l'ancienne feuille + 7 jours, voici comment procéder :
function nouvelleFeuille() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var feuille = ss.getActiveSheet()
var reponse = Browser.inputBox("Nom de la nouvelle feuille ?")
var modele = ss.getSheetByName("MODELE PLANNING")
var nouveauDoc = ss.insertSheet(reponse,{template:modele} )
var derniereFeuille = SpreadsheetApp.getActive().getSheets().shift();
var jour1Ancien = new Date(derniereFeuille.getRange("I3").getValue());
jour1Ancien.setDate(jour1Ancien.getDate() + 7);
var formattedDate = Utilities.formatDate(jour1Ancien, Session.getScriptTimeZone(), "dd/MM/yyyy");
nouveauDoc.getRange("I3").setValue(formattedDate)
}EDIT : Il me semble judicieux d'ajouter des vérifications : modele existe t il bien ? reponse existe t il bien ? jour1Ancien existe t il bien ?
Bonjour,
C'est normal, quand vous ajoutez "du temps" à une date dans le language AppScript (ou JavaScript), l'unité de mesure est la miliseconde. Donc vous retournez Jour1Ancien + 7 ms… D'où la date identique.
Reférence : Internally, JavaScript represents a date object as the number of milliseconds since January 1, 1970 UTC.
https://developers.google.com/google-ads/scripts/docs/features/dates?hl=en
Pour contourner le problème, remplacez
dateJour1Nouveau.setDate(dateJour1Ancien.getDate()+7)par
dateJour1Nouveau.setDate(dateJour1Ancien.getTime() + 7 * 24 * 60 * 60 * 1000)Par ailleurs, vous n'avez pas besoin des variables dateJour1Ancien et jour1Nouveau. En réalité on peut simplement écrire :
function nouvelleFeuille() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var feuille = ss.getActiveSheet();
var reponse = Browser.inputBox("Nom de la nouvelle feuille ?");
var modele = ss.getSheetByName("MODELE PLANNING");
var nouveauDoc = ss.insertSheet(reponse,{template:modele} );
var derniereFeuille = SpreadsheetApp.getActive().getSheets().shift();
nouveauDoc.setRange("I3").setValue(new Date(derniereFeuille.getRange("I3").getValue().getTime() + 7 * 24 * 60 * 60 * 1000));
// ou, avec plus de variables pour mieux comprendre
// var dateIni = derniereFeuille.getRange("I3").getValue();
// var dateFinale = new Date(dateIni.getTime() + 7 * 24 * 60 * 60 * 1000);
// nouveauDoc.setRange("I3").setValue(dateFinale);
}Merci beaucoup Pierre ! Je viens de tester et ça marche nickel !!
Oui j'ai créé le modèle en amont, et "reponse" et "jour1Ancien" existent également :)
Ah d'accord saboh12617, je comprends enfin d'où vient le problème !
Je note pour la prochaine fois, merci beaucoup