Google sheet macro pour fermer un formulaire Google form en fonction d'une valeur

a marqué ce sujet comme résolu.

Bonjour,

Est-il possible de faire une macro qui à partir d’une condition déclencherait la fermeture/ouverture d’un formulaire.

Exemple : j’ai un formulaire d’inscription (FormInscip) pour une manifestation quelconque. dans ce formulaire j’ai une question ’nombre de personnes’. Ce formulaire est lié à un tableur (SheetInscrip) qui reçoit les réponses.

’Le nombre de personne’ est lié à la colonne F du tableur (SheetInscrip). Je recupére la somme de la colonne F dans la cellule G1.

Si G1 est égal ou supérieure à 100 alors on ferme le formulaire qui est lié a ce tableur .

N’étant que bidouilleur je voulais voir avec vous la mise en place. Macro depuis SheetInscrip ?

Merci d’avance

+0 -0

Oui, c’est possible, il existe une méthode pour obtenir l’url du form lié à la spreadsheet.

Pour fermer un formulaire il suffit de faire :

1
2
3
4
5
6
7
var spreadsheet SpreadSheetApp.getActive();
var formUrl = spreadsheet.getFormUrl();
if (formUrl == null) { // s'il n'y a pas ou plus de form lié à la sheet
    return;
}
var form = FormApp.getByUrl(formUrl);
form.setAcceptingResponses(false); // et là on dit qu'on n'accepte plus la réponse.

après je te propose de suivre ce tutoriel pour créer ta macro et obtenir automatiquement la valeur à la cellule G1.

+1 -0

Bonjour,

Merci artragis.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function test(){
var spreadsheet = SpreadsheetApp.getActive();
var formUrl = spreadsheet.getFormUrl();
if (formUrl == null) { // s'il n'y a pas ou plus de form lié à la sheet
    return;
}
var form = FormApp.**open**ByUrl(formUrl);
form.setAcceptingResponses(false); // et là on dit qu'on n'accepte plus la réponse.

}

je regarde pour la macro

+0 -0

Bonjour,

Merci artragis.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function test(){
var spreadsheet = SpreadsheetApp.getActive();
var formUrl = spreadsheet.getFormUrl();
if (formUrl == null) { // s'il n'y a pas ou plus de form lié à la sheet
    return;
}
var form = FormApp.openByUrl(formUrl);
form.setAcceptingResponses(false); // et là on dit qu'on n'accepte plus la réponse.

}

je regarde pour la macro

ludovic

Merci pour la correction.

+0 -0

Bonjour,

Je ne comprends pas ça ne fonctionne pas…

Le script s’exécute parfaitement manuellement. Mais avec un déclencheur ’a partir de la feuille de calcul après une modification’ rien ne se passe .

le but étant que des lors que la valeur d’une cellule change le script vérifie la condition.

Une idée ?

+0 -0

Voici le script sur la feuille de calcul :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
NB_REPONSE = '40'

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var formUrl = spreadsheet.getFormUrl();
var range = spreadsheet.getRange("G2:G27");
var value = range.getValues();
var form = FormApp.openByUrl(formUrl);
var s = 0;


function Limit(){
for(var i=0; i<value.length; i++){
s += value[i][0];
}
 if (s >= NB_REPONSE){
    form.setAcceptingResponses(false); // et là on dit qu'on n'accepte plus la réponse.
  }
}

Donc je fais la somme de la colonne G2 a G27 qui représente le nombre de personnes inscrites via la question a choix multiples du formulaire ’combien de personnes’ si le résultat est égal ou supérieur a 40 çela ferme le formulaire.

J’ai ajouté un déclencheur sur la fonction limit sur la feuille quand il y a une modification.

J’ai ensuite entré différente valeur depuis le questionnaire mais le script de la feuille n’a pas l’air de se lancer.

https://docs.google.com/spreadsheets/d/1Fq02ZXrwbAdY5HV1-u4GKxNaQWXXzM4A3sxYjlcdTbc/edit?usp=sharing

https://docs.google.com/forms/d/e/1FAIpQLSfcswz9LuRYwyEpSEyeztXPtwiK91EbMwTIvk8sbiKNFY8LzA/viewform

+0 -0

toutes les déclarations doivent être à l’intérieur de la fonction :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
function Limit(){
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var formUrl = spreadsheet.getFormUrl();
    var range = spreadsheet.getRange("G2:G27");
    var value = range.getValues();
    var form = FormApp.openByUrl(formUrl);
    var s = 0;
    for(var i=0; i<value.length; i++){
        s += value[i][0];
    }
    if (s >= NB_REPONSE){
        form.setAcceptingResponses(false); // et là on dit qu'on n'accepte plus la réponse.
    }
}

si tu ne fais pas ça, les valeurs ne sont assignées qu’une fois : à l’ouverture du document, puis après elles ne s’adaptent pas.

A l’opposé si tu les déclare dans la fonction, toutes les instructions sont exécutées à chaque fois que la fonction est appelée.

Apparemment il s’agit d’un problème d’autorisation d’accès aux dossiers.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function Limit(){
NB_REPONSE = '20'
deleteTriggers_();

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

var formUrl = spreadsheet.getFormUrl();
var range = spreadsheet.getRange("G2:G27");
var value = range.getValues();
var form = FormApp.openByUrl(formUrl);
var s = 0;
var document = SpreadsheetApp.getActive();

 if (NB_REPONSE !== "") { 
     ScriptApp.newTrigger('Limit').forSpreadsheet(spreadsheet).onFormSubmit()
      .create();
  }


for(var i=0; i<value.length; i++){
s += value[i][0];
}
 if (s >= NB_REPONSE){
    form.setAcceptingResponses(false); // et là on dit qu'on n'accepte plus la réponse.
  }
}

function deleteTriggers_() {  
  var triggers = ScriptApp.getProjectTriggers();  
  for (var i in triggers) {
    ScriptApp.deleteTrigger(triggers[i]);
  }
}
+0 -0

via la fonction ScriptApp.newTrigger(’Limit’).forSpreadsheet(spreadsheet).onFormSubmit() .create();

et non via le menu.

Avec la fonction on a une demande d’autorisation d’exécution du script en mode absent. cette autorisation n’apparait pas quand on crée le trigger depuis le menu. Il y a surement possibilité de donner cette autorisation autrement mais j’ai pas trouvé.

Bonjour, je suis novice en macro google, je souhaite fermer et ouvrir un formulaire, j’ai repris votre macro et j’ai le message d’erreur ci dessous, pouvez vous m’aider svp ?

function mac3() { var spreadsheet = SpreadsheetApp.getActive(); var formUrl = spreadsheet.getFormUrl(); if (formUrl == null) { // s’il n’y a pas ou plus de form lié à la sheet return; } var form = FormApp.openByUrl(formUrl); form.setAcceptingResponses(false); // et là on dit qu’on n’accepte plus la réponse. }

Message d’erreur : You do not have permission to call FormApp.openByUrl. Required permissions: https://www.googleapis.com/auth/forms

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte