Google Forms : fermeture et ouverture automatique du formulaire

Bonjour à tous ,

néophyte , j'ai chercher un peu partout , mais sans succès , j'aimerais que mon formulaire se ferme automatiquement , journalier entre 10h et 12 h .

j'ai trouve un bout de code mais sa fonctionne pas , quelqu'un peux m'aider .

function initTrigger(){
  ScriptApp.newTrigger('oc').timeBased().atHour(0).everyDays(1).create();
}

function oc() {
  ScriptApp.getProjectTriggers().forEach(function(e){
    if(e.getHandlerFunction() == "openForm" || e.getHandlerFunction() == "closeForm") {
      ScriptApp.deleteTrigger(e)
    }
  });

  var time = new Date()
  time.setHours(00);
  time.setMinutes(01);
  ScriptApp.newTrigger("openForm").timeBased().at(time).create();

  time.setHours(10);
  time.setMinutes(0);
  ScriptApp.newTrigger("closeForm").timeBased().at(time).create();

var time = new Date()
  time.setHours(14);
  time.setMinutes(0);
  ScriptApp.newTrigger("openForm").timeBased().at(time).create();

  time.setHours(23);
  time.setMinutes(59);
  ScriptApp.newTrigger("closeForm").timeBased().at(time).create();

}

function openForm() {
  var form = FormApp.getActiveForm();
  form.setAcceptingResponses(true);
}

function closeForm() {  
  var form = FormApp.getActiveForm();
  form.setAcceptingResponses(false);
  // deleteTriggers_();
}

se code si j'ai rajouter en espérant que sa l'ouvre il n'était pas d'origine

var time = new Date()
  time.setHours(14);
  time.setMinutes(0);
  ScriptApp.newTrigger("openForm").timeBased().at(time).create();

  time.setHours(23);
  time.setMinutes(59);
  ScriptApp.newTrigger("closeForm").timeBased().at(time).create();

et le formulaire s'est bloquer cette nuit , je comprends pas .

Qui pourrait m'aider

rapport

Bonjour,

  1. sans voir le fichier, ce sera difficile d'interpréter ... peux-tu refaire un fichier et une form simplifiée pour reproduire le phénomène ?
  2. je en sais pas si c'est lié, mais as-tu bien aligné les timezone entre ta feuille, ton script (*) et tes paramètres ?

(*) voir ici https://forum.excel-pratique.com/sheets/google-script-remplissage-et-creation-quittances-puis-envoie...

  1. sans voir le fichier, ce sera difficile d'interpréter ... peux-tu refaire un fichier et une form simplifiée pour reproduire le phénomène ?

j'ai juste copier le code dans apps script du formulaire rien de plus

  1. je en sais pas si c'est lié, mais as-tu bien aligné les timezone entre ta feuille, ton script (*) et tes paramètres ?

oui j'ai vérifiiez c'est juste .

j'ai aucune connaissance , Jai créer un autre fichier simple, j'aimerais simplement qu'il se ferme tous les jours entre 10h et14h , https://docs.google.com/forms/d/1OtODNcqrOaYP99d2gwCFLzhv74baOPFGwLYxzVq_NQQ/edit?usp=sharing

je pense qu'il y a un problème de synchronisation entre la fonction oc et la fonction openForm, car les triggers ne se déclenchent jamais pile poil à l'heure demandée

je vais faire des essais avec le fichier que tu as donné, merci encore

Est-ce que ceci ne suffirait pas ?

version supprimée

j'ai mis 13h et 14h pour voir ... en espérant que ce soit bien en phase avec mes paramètres.

Aucune idée , je ne connait rien en code . donc la le code que vous avez mis s'est qu'il ouvre a 13 h et se ferme a 14 h ?

la s'est une durée d'ouverture , mais je voudrait le sens inverse une durée de fermeture , que l'on puise avoir accès toute la journée sauf entre 10h et12 h .

désole si je me suis mal exprimée , en tous cas merci de votre aide et de votre temps

il n'y a pas de soucis, j'ai mis ces heures-là pour tester dans l'apm

mais comme rien ne se passe, je vais changer les heures (13h devient 15h) et on verra bien !

j'espère ne pas avoir de décalage d'horaires avec GMT

a priori les réglages sont faits sur GMT+2 pour moi, donc c'est ok (heure d'été en France)

note qu'avec les triggers ce n'est pas du tout précis à la minute !

je regarderai pour une solution plus précise, car là je crois que les heures, quand cela fonctionnera, ce sera un peu n'importe quoi !

Toutes les recherches que j'ai pu faire renvoient vers un "add-on" qui s'appelle formLimiter

https://www.google.com/search?q=google+form+open+close+automatically&oq=google+form+open+close+autom...

Dans tous les cas, je travaille plutôt avec cette solution https://stackoverflow.com/a/63629623/15019380 en ajoutant pour le moment un email qui me dira quand ce sera ouvert et quand ce sera fermé !

Il semble que ceci fonctionne, reste à confirmer demain

Mets ton adresse email en tête (ce n'est pas obligatoire mais permet d'être averti de l'heure exacte de fermeture et ré-ouverture)

Lance action en donnant les autorisations

version supprimée

confirme bien le timezone

image

Bonjour,

Alors ... cela marche très bien à l'heure pile, MAIS, google n'aime pas du tout un déclencheur de ce type qui se répète et mets pudiquement

image

je vais donc essayer de le mettre en place juste quelques minutes avant l'heure H pour la fermeture et l'ouverture, mais pas de façon "revolving".

nouvel essai avec ceci

version supprimée

l'idée est d'avoir un déclencheur "normal", donc à une heure approximative, qui va lancer un déclencheur à heure exacte d'ici l'heure suivante

Merci pour votre dévouement , mais je n'ai pas reçu d'email et il est toujours ouvert . un grand merci ,mais je ne veux pas acaperez votre temps , c'est très gentil d'avoir essayer de m'aider

Pas de soucis, le sujet m'intéresse car il est assez nouveau pour moi, cela me permet de comprendre et progresser.

J'ai bien reçu un mail de fermeture, mais ensuite le trigger s'est trouvé fermé par google ... donc j'essaie une autre voie. L problème des tests est qu'il faut toujours attendre un cycle complet.

Résultat des tests ... google n'aime pas non plus la version donnée ci-dessus

La seule qui semble fonctionner est la suivante

var email = ""

function ouvrir() {
  var d = new Date();
  ScriptApp.getProjectTriggers().filter(trigger => trigger.getHandlerFunction() == 'openForm').forEach(t => ScriptApp.deleteTrigger(t))
  ScriptApp.newTrigger('openForm')
    .timeBased()
    .after(((60 - d.getMinutes()) * 60 - d.getSeconds()) * 1000) // prochaine heure 
    .create()
}
function fermer() {
  var d = new Date();
  ScriptApp.getProjectTriggers().filter(trigger => trigger.getHandlerFunction() == 'closeForm').forEach(t => ScriptApp.deleteTrigger(t))
  ScriptApp.newTrigger('closeForm')
    .timeBased()
    .after(((60 - d.getMinutes()) * 60 - d.getSeconds()) * 1000) // prochaine heure 
    .create()
}
function openForm() {
  var form = FormApp.getActiveForm();
  var d = new Date();
  form.setAcceptingResponses(true);
  if (email != '') GmailApp.sendEmail(email, "open time", "The time is: " + d.toString());
  ScriptApp.getProjectTriggers().filter(trigger => trigger.getHandlerFunction() == 'openForm').forEach(t => ScriptApp.deleteTrigger(t))
}
function closeForm() {
  var form = FormApp.getActiveForm();
  var d = new Date();
  form.setAcceptingResponses(false);
  if (email != '') GmailApp.sendEmail(email, "close time", "The time is: " + d.toString());
  ScriptApp.getProjectTriggers().filter(trigger => trigger.getHandlerFunction() == 'closeForm').forEach(t => ScriptApp.deleteTrigger(t))
}

et il faut lancer fermer et ouvrir dans l'heure qui précède l'événement souhaité. Exemple, à 9h30 tu lances fermer pour que le questionnaire soit clos à 10h et à 13h30 tu lances ouvrir pour que le questionnaire soit ouvert

je comprends un peu google qui a restreint cette possibilité à "heure exacte"

plutôt bonne nouvelle, je progresse ...

j'avais programmé en rafale des ouvertures et fermetures à h:45 et h:55 et c'est pas mal

donc on va peut-être avoir enfin une solution !

image
conclusion des essais ... le seul qui fonctionne est celui-ci https://forum.excel-pratique.com/sheets/google-forms-fermeture-et-ouverture-automatique-du-formulair...
il faut donc lancer
fermer
et
ouvrir
dans l'heure qui précède l'événement souhaité. Exemple, à environ 9h30 tu lances
fermer
pour que le questionnaire soit clos à 10h et à environ 13h30 tu lances
ouvrir
pour que le questionnaire soit ouvert
Rechercher des sujets similaires à "google forms fermeture ouverture automatique formulaire"