Créer un script d'attente lors d'un lancement d'un long script
1-
Laisse cette ligne en l'état comme sur l'exemple donné ici https://forum.excel-pratique.com/sheets/creer-un-script-d-attente-lors-d-un-lancement-d-un-long-scri...
<img src="http://drive.xxxxx.com/uc?export=view&id=${id}" width="200" />(xxxxx à remplacer par google)
c'est uniquement au début que tu dois définir id
var id = '11svHJuzI_MueN8ickC4rWGYwtvZMFvqU' // image animée2-
ensuite, n'inclus pas le script dans la fonction onEdit(e), mais mets juste debut() au début
function onEdit(e) {
debut()
// etc.
fin()
}3-
et dans ce cas tu dois définir un déclencheur pour onEdit, sauf si c'est déjà fait par ailleurs.
Re Steelson,
je ne sais pas pourquoi je n'y arrive pas pourtant l'image sélectionner à partir du drive tourne bien avec ce lien
https://xxxx.******.com/file/d/1nAHzcj5b9uNpqmTI7vjWKlW6Gsgvmq1g/view(changer les X par drive et les * par google) .
mais impossible de lancer le script avec l'image, j'ai pourtant créer un déclencheur
En utilisant le script sans le nouveau code pour l'image tout est ok
function onEdit(e) {
// debut()
// var id = '1nAHzcj5b9uNpqmTI7vjWKlW6Gsgvmq1g' // image animée
// var html = HtmlService.createHtmlOutput(`
//<!DOCTYPE html>
//<html>
// <head>
// <base target="_top">
// </head>
// <body><center>
// <img src="http://drive.xxxxx.com/uc?export=view&id=${id}" width="200" />
// </center></body>
//</html>
// `);
// SpreadsheetApp.getUi().showModalDialog(html, 'Wait ...');
if (e.range.getColumn() == rechercheDate() && e.range.getRow() >= 5 && e.range.getRow() <= 309)
{
SpreadsheetApp.getUi().alert('Merci d avoir encoder une information sur cette feuille, VEUILLEZ PATIENTER LA FIN DE L ENREGISTREMENT ET L ANNONCE, du message en bas à droite de votre écran, "MISE Á JOUR TERMINÉE ET ENREGISTRÉE", pour continuer ou quitter le fichier.'); // l'annonce
var fonction = 'D' + (+e.range.getColumn() - 5)
this[fonction]()
var d = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd-MM HH:mm");
SpreadsheetApp.getActiveSpreadsheet().setName('Entrainement Paragolf AFGOLF mise à jour le ' + d) // mettre le nom ici
SpreadsheetApp.getActiveSpreadsheet().toast('Mise à jour terminée et enregistrée'); // affiche le pop up à droite
};
// fin()
// var closeHtml = HtmlService.createHtmlOutput("<script>google.script.host.close()</script>");
// SpreadsheetApp.getUi().showModalDialog(closeHtml, "Closing ...");
}mais une fois que j'enlève les "//" pour activer le code plus de script et pas d'image animé non plus bien pour l'envois j'ai enlevé google et remplacer par xxxx
function onEdit(e) {
debut()
var id = '1nAHzcj5b9uNpqmTI7vjWKlW6Gsgvmq1g' // image animée
var html = HtmlService.createHtmlOutput(`
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body><center>
<img src="http://drive.xxxxx.com/uc?export=view&id=${id}" width="200" />
</center></body>
</html>
`);
SpreadsheetApp.getUi().showModalDialog(html, 'Wait ...');
if (e.range.getColumn() == rechercheDate() && e.range.getRow() >= 5 && e.range.getRow() <= 309)
{
SpreadsheetApp.getUi().alert('Merci d avoir encoder une information sur cette feuille, VEUILLEZ PATIENTER LA FIN DE L ENREGISTREMENT ET L ANNONCE, du message en bas à droite de votre écran, "MISE Á JOUR TERMINÉE ET ENREGISTRÉE", pour continuer ou quitter le fichier.'); // l'annonce
var fonction = 'D' + (+e.range.getColumn() - 5)
this[fonction]()
var d = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd-MM HH:mm");
SpreadsheetApp.getActiveSpreadsheet().setName('Entrainement Paragolf AFGOLF mise à jour le ' + d) // mettre le nom ici
SpreadsheetApp.getActiveSpreadsheet().toast('Mise à jour terminée et enregistrée'); // affiche le pop up à droite
};
fin()
var closeHtml = HtmlService.createHtmlOutput("<script>google.script.host.close()</script>");
SpreadsheetApp.getUi().showModalDialog(closeHtml, "Closing ...");
}que manque t'il pour que le code fonctionne parce là je n'ai rien pas de script de mise à jour.
Help Steelson
mbell
n'inclus pas les script dans onedit mais juste l'appel au script
ensuite, n'inclus pas le script dans la fonction onEdit(e), mais mets juste debut() au début
function onEdit(e) { debut() // etc. fin() }
c'est à dire
function onEdit(e) {
debut()
// ici le code initial de onEdit
fin()
}
function debut(){
// ici le code de fonction debut
}
function fin(){
// ici le code de la fonction fin
}pour l'image, elle doit être dans ton drive et partagée
Tu as eu raison de faire comprendre que ce serais super et ca l'est.
mais il bug
function onEdit(e) {
debut()
if (e.range.getColumn() == rechercheDate() && e.range.getRow() >= 5 && e.range.getRow() <= 309)
{
// SpreadsheetApp.getUi().alert('Merci d avoir encoder une information sur cette feuille, VEUILLEZ PATIENTER LA FIN DE L ENREGISTREMENT ET L ANNONCE, du message en bas à droite de votre écran, "MISE Á JOUR TERMINÉE ET ENREGISTRÉE", pour continuer ou quitter le fichier.'); // l'annonce
var fonction = 'D' + (+e.range.getColumn() - 5)
this[fonction]()
var d = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd-MM HH:mm");
SpreadsheetApp.getActiveSpreadsheet().setName('Entrainement Paragolf AFGOLF mise à jour le ' + d) // mettre le nom ici
SpreadsheetApp.getActiveSpreadsheet().toast('Mise à jour terminée et enregistrée'); // affiche le pop up à droite
fin()
}
function debut() {
var id = '1nAHzcj5b9uNpqmTI7vjWKlW6Gsgvmq1g' // image animée
var html = HtmlService.createHtmlOutput(`
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body><center>
<img src="http://drive.xxxxx.com/uc?export=view&id=${id}" width="200" />
</center></body>
</html>
`);
SpreadsheetApp.getUi().showModalDialog(html, 'Wait ...'); // message d'attente ok
};
function fin() {
var closeHtml = HtmlService.createHtmlOutput("<script>google.script.host.close()</script>");
SpreadsheetApp.getUi().showModalDialog(closeHtml, "Closing ..."); // message de fin ok
}
} // <===############# position correcteprend vraiment beaucoup de temps et pourtant les premier essai étaient très convainquant.
En temps normal le script peut prendre 4-5' mais là il tourne en boucle.
Ce script devait fonctionner lorsque la 5ème colonne étaient modifier mais même si je change la 6, 7, 8 ème colonne le script fonctionne alors que pour ces colonne là rien ne change dans la page.
mbell
Re: En fait ce script était réalisé pour éventuellement deux script qui prennent du temps:
Dans ce cas ci la modification dans la première colonne du jour soit la 5ème qui est affichée car dans les 5 première il y en a une de masquée la 4 ème.
Pour les autres colonne rien ne bouge car pas besoin d'être triée donc pas besoin d'image c'est du direct le joueur clic est c'est tout mais pour la colonne en question lorsqu'il y a un clic cette colonne est remise à jour d'où le script qui trie et reclasse les joueurs.
j'ai déjà enlever dans le code html les "//" que j'avais pour du texte afin de me rappeler la fonction en html c'est ' si je ne me trompe?
je me rend compte que je ne t'ai même pas encore partager le fichier : https://docs.google.com/spreadsheets/d/14CytTrC02VZ8a7uB57vjd7CcK9Nncpvvt3HV7nnOXo0/edit?usp=sharing
Merci pour ton soutien Steelson
Y a t'il autre chose à résoudre sur ce topic ?
Cela dit, ton fichier est trop compliqué à mon goût. Un script ne devrait pas dépasser une feuille A4 tout compris. Mais cela t'a sans doute permis de commencer à te familiariser avec google app script.
Oui tout a fait mais comme dit je suis loin de résoudre vos codes, car ce que je formule en 50 ligne vous le faite en trois
Sur ce post oui car l'image s'ouvre et tourne souvent en boucle s'il n 'y a pas d'action puisque la seule action qui doit ce faire c'est seulement lorsque l'on remplis la colonne qui est juste à côté des présence et rien pour les autres car pas de tris.
Mais voilà si ce n'est pas possible dommage car l'affect est très bien mais si un joueur encode sur une autre colonne l'image vas tourner en boucle .
Merci quand même Steelson pour le temps passé a essayer de m'expliquer.
mbell
Bonjour Steelson,
problème presque résolut il n' y a plus que la fermeture à écrire.
Voilà j'ai pris la boîte de dialogue personnaliser dont voici les deux scripts modifier je n'ai pas mis function Logo() { .... } parceque je le lance avec "logo() " do,c tu vois je réduit déjà le nombre de ligne
const html = HtmlService.createHtmlOutputFromFile('logo')
.setWidth(400)
.setHeight(200);
SpreadsheetApp.getUi().showModalDialog(html, '⚠️ Travaux en cours ⚠️');et le script HTML
<!DOCTYPE html>
<html>
<head>
<style>
img {
display: block;
}
input {
display: inline-block;
float: center;
padding: 0.6rem 1rem 0.5rem;
margin-top: 1.5rem;
font-size: 1rem;
background: #e9fdf8;
border: 2px solid #4db699;
border-radius: 0.4rem;
cursor: pointer;
}
</style>
</head>
<body>
<center>
<img src="https://www.gifgratis.net/gifs_animes/golf/22.gif" alt="logo">
<p> Venez nous rejoindre </p>
</center>
</body>
</html>j'ai supprimer volontairement la function du bouton pour l'apercu
<input type="button" value="Fermer" onclick="google.script.host.close()">parce que j'aurais aimé que l'action se déroule à la fin de la procédure juste avant la fin du script soit avant le
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getActiveSheet().hideSheet(); // masque la feuille
// fermer ici la box html comment ?
SpreadsheetApp.getActiveSpreadsheet().toast('👍 FÉLICITATION VOTRE NOUVELLE SAISON A ETEE MASQUEE ET VOUS POUVEZ DEJA LES DATES ET LIEU SI VOUS LES AVEZ. 👏', 'Confirmation');
}Peux tu m'aider sur ce genre de code Steelson, un grand merci d'avance car voici le résultat
mbell
essaie comme ceci
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getActiveSheet().hideSheet(); // masque la feuille
// fermer ici la box html comment ?
var closeHtml = HtmlService.createHtmlOutput("<script>google.script.host.close()</script>");
SpreadsheetApp.getUi().showModalDialog(closeHtml, "Fermeture ...");
SpreadsheetApp.getActiveSpreadsheet().toast('👍 FÉLICITATION VOTRE NOUVELLE SAISON A ETEE MASQUEE ET VOUS POUVEZ DEJA LES DATES ET LIEU SI VOUS LES AVEZ. 👏', 'Confirmation');
}Bonjour Steelson,
Super et c'est rapide.
Les mots me manque pour te dire combien ton aide m'a été précieuse " MERCI " du fond du cœur pour aide précieuse
mbell