Créer un script d'attente lors d'un lancement d'un long script

Bonjour à tous,

Excite t'il un moyen de mettre sur l'écran une animation lorsque un script s'exécute que pendant 5' mais ayant peur que l'internaute touche de nouveau une autre touche et qui buggerait le fichier ou le mettrait en désordre.

Du style "patienter jusqu'à la fin du script et qui partirait une fois celui-ci finis.

Merci pour ceux qui apporterais une solution.

mbell

Je vais travailler sur ceci https://forum.excel-pratique.com/sheets/lancer-une-url-a-l-ouverture-de-google-sheets-173343 cela pourrait aider aussi.

Toutefois, une solution simplissime ...

  • fais une page blanche sans grille
  • mets-y un gif animé + message
  • affiche cette page au moment du lancement
  • masque la page à la fin

exemple de gif

thinking emoji 43

Essaie ceci

- en début de script, lance debut(), et en fin fin()

- cela ne doit pas entraver le déroulement

remplace XXXXX ci-dessous par google

function debut() {
  var id = '11svHJuzI_MueN8ickC4rWGYwtvZMFvqU' // 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 ...');
}

function fin() {
  var closeHtml = HtmlService.createHtmlOutput("<script>google.script.host.close()</script>");
  SpreadsheetApp.getUi().showModalDialog(closeHtml, "Closing ...");
}

Bonsoir Steelson,

Le script j'ai essayer mais pas réussi.

oublions l'image une page ne serait il pas possible plus simplement de ne plus rien pouvoir faire une fois le script lancer.

image

car je n'ai envie que lorsque un joueur enregistre dans la colonne qui est active en cas de changement car tri s'effectue et replace les joueurs ici c'est la colonne "E",

que s'il effectue un nouvel enregistrement avant que le script ne soit terminé ça pourrait devenir le bousin.

J'aimerais qu'après le clic qui lance la macro le joueur ne puisse en effectuer une autre opération tant que le script ne soit pas terminé donc pas avant que la box de la ligne 57 ne s'affiche.

Une box qui s'afficherait dés le début du script jusqu'à sa fin ou pas de possibilité d'actionné le clavier ou la souris.

image

Si j'ajoute dans les colonne "M, N, O, P ou Q" pas de problème pas d'action de script normal c'est ce que j'avais demander, mais maintenant j'ai peur que si un joueur voudrait encoder trop vite donc dans la colonne "L" puis de suite la colonne "M" qui est juste à côté cela ne perturbe le fichier.

Voilà la solution trouvée provisoirement s'il y a mieux:

image

Cela va prévenir mais pas empêcher l'utilisateur à utiliser son clavier ou sa souris.

mbell

Le script j'ai essayer mais pas réussi.

dommage car c'est assez sympa et permet justement à la personne d'être attirée par cette animation

tu peux mettre l'identifiant d'une autre image (celle-ci est partagée mais présente sur mon drive), il doit être possible d'en trouver sur google

ne plus rien pouvoir faire une fois le script lancer.

je n'ai pas trouvé de solution pour cela

Pour l'image j'avais ceci sur la feuille "image" du fichier https://docs.google.com/spreadsheets/d/14CytTrC02VZ8a7uB57vjd7CcK9Nncpvvt3HV7nnOXo0/edit#gid=1889152...

Maintenant si tu as la solution de code pour faire cela je prend bien sûr Steelson

mbell

image

mis à jour

cette image est-elle sur ton drive ? et est-elle partagée ? dans ce cas tu mes son identifiant au début de la fonction debut()

var id = "id de l'image animée"

Non cette image est sur une page du fichier et je n'ai pas l'adresse elle libre de distribution donc le script demande une image mais j'ai une page

il faut une image avec un id

voilà l'image retrouvée et insérer dans la code

function onEdit(e) {
function debut() {
var id = "https://www.gifsanimes.com/data/media/2174/smiley-golf-image-animee-0006.gif"
     var html = HtmlService.createHtmlOutput(`
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body><center>
    <img src="http://drive.zzzzze.com/uc?export=view&id=${https://www.gifsanimes.com/data/media/2174/smiley-golf-image-animee-0006.gif}" width="200" />
  </center></body>
</html>
  `);
  SpreadsheetApp.getUi().showModalDialog(html, 'Wait ...');
}

    if (e.range.getColumn() == rechercheDate() && e.range.getRow() >= 5 && e.range.getRow() <= 85) {

 //    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

   };
   function fin() {
  var closeHtml = HtmlService.createHtmlOutput("<script>google.script.host.close()</script>");
  SpreadsheetApp.getUi().showModalDialog(closeHtml, "Closing ...");
}
} // <===############# position correcte

mais ca ne vas toujours pas :( Steelson

mbell

ce n'est pas un identifiant au sens google de l'image mais une url que tu donnes

var id = "https://www.gifsanimes.com/data/media/2174/smiley-golf-image-animee-0006.gif"

exemple de ce que j'avais pris

var id = '11svHJuzI_MueN8ickC4rWGYwtvZMFvqU'

quand tu es dans drive, tu sélectionne l'image, tu prends le lien et tu en extirpe l'id

j'ai essayé de prendre dans la bibliothèque d'images de google mais je n'ai pas trouvé l'id

Bonsoir Steelson,

désoler mais je ne comprend pas où tu trouve "id" de l'image.

j'ai trouvé ceci sur un site

22

[IMG]https://www.gifgratis.net/gifs_animes/golf/22.gif[/IMG] elle serait super comme image d'attente mais je ne sais pas où trouver son ID, as tu une solution?

Merci d'avance

télécharge

mets là sur ton drive

partage

clique droit puis sur obtenir le lien

image

ensuite copier le lien

tu as donc une url comme ici ... l'id est ce qui se trouve entre les 2 derniers / soit ici

image

Re: cette fois j'ai le lien et ID de l'image seul problème le script ne se lance pas.

Pour ID c'est bien cette partie à copier

image

Petit soucis, lorsque je lance le script

image

le code html doit il se trouver dans la même section "Menu.gs"

car si je le met dans Sans titre.html

image

J'ai une autre erreur il ne reconnais pas la ligne 57

image

Alors j'ai soit trop ou trop enlevé et ou pas mis à la bonne place.

PS: Je ne connais rien en codage.

merci pour ta patience et de ton aide Steelson

mbell

il manque cette ligne

var html = HtmlService.createHtmlOutput(`

reprend le code en intégralité, pas une partie

attention à l'accent grave en fin de ligne, ce n'est pas une apostrophe

Bonjour Steelson,

voici la réponse

image

je n'ai pas la même ligne que toi en "59" si je part directement du drive j'ai ceci : drive folders

où est l'erreur.

mbell

je ne sais pas travailler avec une image, mets ton script en texte ici

as-tu recopié exactement le script proposé ?

voici le script

function onEdit(e) {
function debut() {
var id = '11jHTQif22EyHT5ClMEX43DTl7dI6MJDE' // image = HtmlService.createHtmlOutput(`
var html = HtmlService.createHtmlOutput(`

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body><center>
    <img src="https://drive.*****e.com/uc?export=view&id=${11jHTQif22EyHT5ClMEX43DTl7dI6MJDE}" width="200" />
  </center></body>
</html>

  `);

  SpreadsheetApp.getUi().showModalDialog(html, 'Wait ...');
}

    if (e.range.getColumn() == rechercheDate() && e.range.getRow() >= 5 && e.range.getRow() <= 85) {

 //    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

   };
   function fin() {
  var closeHtml = HtmlService.createHtmlOutput("<script>google.script.host.close()</script>");
  SpreadsheetApp.getUi().showModalDialog(closeHtml, "Closing ...");
}
} // <===############# position correcte
Rechercher des sujets similaires à "creer script attente lors lancement long"