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

a marqué ce sujet comme résolu.
Auteur du sujet

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

Édité par artragis

+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.

Édité par artragis

+1 -0
Auteur du sujet

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

Édité par artragis

+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.

Édité par artragis

+0 -0
Auteur du sujet

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 ?

Édité par ludovic

+0 -0
Auteur du sujet

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

Édité par artragis

+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.

+0 -0
Auteur du sujet

Merci,

Par contre j’ai le même problème le script ne s’exécute pas automatiquement

J’ai l’impression que le déclencheur ne fonctionne pas.

Édité par ludovic

+0 -0
Auteur du sujet

oui je viens de tester mais c’est pareil. Il ne fonctionne pas Quand je rentre une valeur manuellement ca fonctionne, Mais via le formulaire non

Édité par ludovic

+0 -0
Auteur du sujet

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]);
  }
}

Édité par ludovic

+0 -0
Auteur du sujet

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é.

+0 -0

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

+0 -0
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