Problème de déclencheur
Bonjour,
J'ai mis en place un script pour ouvrir une popup sur une feuille spécifique avec des paramètres de date, heure et de message personnalisé depuis une cellule.
La colonne A contient les dates, la colonne B les heures et la colonne C le message à afficher dans la popup.
Le script fonctionne normalement quand je fais le test et que je l'exécute manuellement. La popup s'affiche bien avec le bon message.
J'ai voulu l'automatiser avec un déclencheur, pour déclencher le script automatiquement pour ouvrir la popup aux dates et aux heures prévues.
Je l'ai paramétré sur un facteur temps toutes les minutes. Mais ça ne fonctionne pas, j'ai testé toutes les 5 minutes et idem.
J'ai une erreur :
Erreur Exception: Cannot call SpreadsheetApp.getUi() from this context.
at ouvrirPopup(rappel:27:24)Voici le script :
function ouvrirPopup() {
var nomFeuille = "Feuille 42";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var feuille = ss.getSheetByName(nomFeuille);
if (feuille == null) {
Logger.log("La feuille spécifiée n'a pas été trouvée.");
return;
}
var plageDate = feuille.getRange("A1:A6").getValues();
var plageHeure = feuille.getRange("B1:B6").getValues();
var plageMessage = feuille.getRange("C1:C6").getValues();
for (var i = 0; i < plageDate.length; i++) {
var date = plageDate[i][0];
var heure = plageHeure[i][0];
var message = plageMessage[i][0];
if (date !== "" && heure !== "" && message !== "") {
var dateHeure = new Date(date.getFullYear(), date.getMonth(), date.getDate(), heure.getHours(), heure.getMinutes());
var dateActuelle = new Date();
if (dateActuelle.getTime() >= dateHeure.getTime()) {
var htmlOutput = HtmlService.createHtmlOutput('<h2>Un rappel est prévu sur le ticket n°</h2><p>' + message + '</p>');
SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Rappel');
}
}
}
}Ma question est la suivante : comment automatisé le lancement du script à intervalle régulier pour que celui-ci s'exécute ? Exister t'il un moyen différent que l'utilisation des déclencheurs ?
En vous remerciant.
Bonjour,
Sans avoir testé ton script et sans être certain du comportement de ce type de déclencheur, ton problème me semble en fait assez logique
Car si Google exécute ton script de son côté toutes les 5 minutes, la modification de l'UI ne présente aucun intérêt (le bot de Google ne va pas cliquer sur ta popup) ... Donc ça me paraîtrait logique que les fonctions d'UI ne soient pas autorisées puisqu'inutiles.
Si tu veux réafficher régulièrement une popup de ton côté, essaie de supprimer ton déclencheur puis de relancer ta fonction depuis ta fonction après un temps d'arrêt.
Je t'ai fait un exemple simple :
function test() {
const ui = SpreadsheetApp.getUi();
// Si on relance la fonction dans 10 secondes
if (ui.alert('Relancer dans 10 secondes ?', ui.ButtonSet.YES_NO) == ui.Button.YES) {
// Pause en millisecondes (max 300000 = 5 minutes)
Utilities.sleep(10000);
// Relance de cette fonction
test();
}
}Cordialement,
Merci pour ton éclairage, j'ai effectivement apporté quelques modifications (notamment le soucis de la popup qui se réaffiche malgré l'effacement de la ligne, et les soucis de délais d'exécution dépassé)
Tout fonctionne, il me reste qu'à l'intégrer dans la feuille en question.