FormLimiter

gaston gaston
1 621 contributions
Membre depuis le 01/03/2001
Envoyé le 03/05/2023 à 15:08 Modifié par gaston


Bonjour,

Dans google form; j'ai voulu utiliser cette extension sur un formulaire pour le fermer à partir de la valeur d'une cellule de la sheet associée, mais ça ne fonctionne pas, ou du moins pas à tous les coups et cette extension n'a plus de support...

je me dis que ça devrait pouvoir se faire avec une macro et j'ai trouvé celle-ci, mais qui ne permet que de tenir compte du nombre de réponses.


function onSubmit() {
// Spécifiez la limite
const limite = 5;
const forms = FormApp.getActiveForm();
const nbReponses = forms.getResponses().length;
if (nbReponses >= limite )
{
forms.setCustomClosedFormMessage("Il n'est plus possible de répondre au formulaire, le nombre de "+limite+" réponses maximum a été atteint, comme la tarte.");
forms.setAcceptingResponses(false);
}
}

Elle s'utilise avec un déclencheur lors de l'envoi du formulaire.

Quelle serait la syntaxe pour faire appel à une cellule de la sheet associée ?.
carpe diem
Bipbipcoyote Bipbipcoyote
4 321 contributions
Membre depuis le 06/03/2001
Envoyé le 03/05/2023 à 16:48 Modifié par Bipbipcoyote


Bonjour,
Je pense que cela se règle dans le formulaire, en dessous de la rubrique/section

et aussi dans les paramètres, rubrique Réponses ("Gérer la façon dont les réponses sont collectées et protégées") il faut activer "Limiter à une réponse". Ainsi si l'on tente d'envoyer à nouveau, on obtient un avertissement "Vous avez déjà répondu"
J'ai suivi pour tester l'exemple de cette vidéo

Ton script, ne permet que 5 usages du formulaire donc de 5 répondants
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
gaston gaston
1 621 contributions
Membre depuis le 01/03/2001
Envoyé le 04/05/2023 à 10:21 Modifié par gaston


Bonjour,
Merci pour ta réponse, mais je ne sais pas ce que tu as compris de ma question, parce que je ne comprends pas à quoi tu me réponds ? [:o]
En effet dans ce que tu évoques là, il y a deux choses différentes:
1- le cas de section à condition, quand on veut que les gens puissent envoyer le formulaire après une section, et non pas passer à la section suivante( je l'ai déjà utilisé, à dire vrai)
2- limiter à une réponse, je ne l'utilise pas, car dans ce cas il faut que les gens soient connectés à leur compte Google pour pouvoir répondre, donc cela limite un peu vu que certains n'ont pas du tout envie d'avoir un compte Google... je préfère donc gérer ça manuellement.
Mais donc ces deux choses n'ont rien à voir avec ma question...

À part cela, je sais bien que mon script limite le nombre de réponses à 5: c'était un exemple [;)]
Ce que je veux c'est : fermer le formulaire lorsque la valeur d'une cellule de la feuille associée dépasse ce 5, et non pas que le nombre de réponses dépasse ce 5

Edit: je pense que ceci répond à ma question https://www.tutoderien.com/recuperer-les-valeurs-des-cellules-avec-google-apps-script/
carpe diem
Bipbipcoyote Bipbipcoyote
4 321 contributions
Membre depuis le 06/03/2001
Envoyé le 04/05/2023 à 13:24 Modifié par Bipbipcoyote


Bonjour,
Le lien que tu indiques ne parle pas de Google Forms mais de Google Sheet, donc le terme "formulaire" dans ta question m'a orienté dans la mauvaise direction [:D]
et comme j'ai lu quelque part que l'on peut récolter les réponses d'un formulaire (Google Forms) dans une feuille de calcul ----> confusion !
je sais que l'on peut présenter des cellules sous l'aspect d'un formulaire mais à la base c'est toujours une feuille de calcul. C'est ce qui est un peu énervant de nos jours c'est que l'on transforme les tableurs en base de données. Or pour bien faire, il faudrait bien séparer les choses, un tableur pour faire des calculs et un SGBDR (système de gestion de base de données relationnelle style, ACCESS , SQL avant il y avait DBASE etc... ) pour le reste , mais bon, je conçois que les tableurs sont faciles mais en ce qui me concerne, c'est une hérésie [:D]

Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
Bipbipcoyote Bipbipcoyote
4 321 contributions
Membre depuis le 06/03/2001
Envoyé le 04/05/2023 à 15:12


Bonjour,
Alors, en fait, on ne peut pas fermer un fichier Google Sheet
et comme dans Excel on ne peut pas masquer toutes les feuilles, il doit toujours y en avoir une qui reste active, donc le mieux et de créer une page vierge (enfin, presque vierge car puisqu'on travaille en ligne il faut un certain temps pour que le fichier s'affiche, donc y ajouter un message comme "Veuillez Patientez !" n'est pas superflu

Donc nous avons 2 pages nommées ici dans l'exemple MaFeuille et Exemple (on peut les nommer comme on veut
MaFeuille est la feuille de travail
et Exemple est la feuille qui va permettre de masquer MaFeuille (on ne peut pas faire mieux, il ne faut pas oublier que l'on utilise le navigateur, ce n'est pas une application à proprement parler, l'utilisateur a peut être ouvert d'autres onglets, etc)
et donc avec le bouton "Fermer" on masque la feuille de travail et on affiche la page exemple
et lors de la réouverture, la page "Exemple" est visible, le temps que le fichier se charge complètement et que le script de bascule s'exécute

Fichier à télécharger
Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
gaston gaston
1 621 contributions
Membre depuis le 01/03/2001
Envoyé le 04/05/2023 à 17:19


Bonjour,
Pour cette dernière réponse, tu es sûr que tu ne t'es pas trompé de fil ? [:o]
ou alors c'est moi qui ne comprends rien, ça se peut aussi [:D]
carpe diem
Bipbipcoyote Bipbipcoyote
4 321 contributions
Membre depuis le 06/03/2001
Envoyé le 04/05/2023 à 23:54 Modifié par Bipbipcoyote


Bonjour,
Je finis par ne plus comprendre ce que tu veux, soit tu crées un pseudo - formulaire sur une feuille donc un truc comme ceci soit c'est un formulaire lié à une feuille de calcul mais dans ce second cas, lorsque l'utilisateur envoie ses réponses, il reçoit une notification qui dit "Votre réponse a bien été enregistrée." (cet utilisateur ne voit que le formulaire (=Google Forms), il n'a pas accès à la feuille de calcul liée = Google Sheets)

si tu ne limites pas les réponses, il y a un lien pour "Envoyer une autre réponse" et ici idem, cette dernière page est dans un onglet tu te retrouves donc devant les mêmes restrictions concernant la fermeture d'onglet
On ne peut même pas utiliser de javascript (genre window.close puisque la feuille n'est pas créée par cette méthode)

Sais tu que pour fermer l'onglet actif dans un navigateur, on utilise le raccourci clavier CTRL+W (et pour en ouvrir un nouveau CTRL+T)

J'ai cherché un truc comme SendKeys dans Excel (version bureau) mais ce n'est pas possible parce qu'en fait les commandes ou entrées clavier sont traitées côté serveur et pas sur notre ordinateur (local) En fait comme je le comprends, Google Sheets réagit un peu comme php, il y a donc un dialogue client-serveur à chacune de nos modifications mais Google Sheets n'interagit pas avec le navigateur local. Ce dernier ne sert qu'à afficher la feuille de calcul

Sur un site internet, on utilise souvent php pour dialoguer avec la base de données, la construction de la page se réalise sur le serveur, mais on peut toujours utiliser javascript pour lancer des commandes locales, c'est notre machine qui agit alors, le serveur n'est pas impacté... mais ici, les scripts n'interagissent pas localement, du moins c'est comme ceci que je l'ai compris.....

D'ailleurs petite expérience que j'ai faite, je me suis dit, je vais utiliser l'enregistreur de macro, j'ai donc tenté l'enregistrement de CTRL+W .... code généré = rien, cela n'enregistre rien, j'ai recommencé avec CTRL+A (cela sélectionne toute la zone utilisée par les données), là l'enregistreur de macro m'a produit un code qui fournit le résultat, mais cela ne correspond pas à l'enregistrement des 2 touches, mais un code classique comme ceci

function Macrosanstitre() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1').activate();
var currentCell = spreadsheet.getCurrentCell();
spreadsheet.getActiveRange().getDataRegion().activate();
currentCell.activateAsCurrentCell();
};

Bref, j'ai bien peur que ce que tu demandes ne soit pas possible, en tout cas, je n'ai pas trouvé

Visitez mon Site Google est mon ami, il répond mieux que moi, posez lui d'abord vos questions
gaston gaston
1 621 contributions
Membre depuis le 01/03/2001
Envoyé le 05/05/2023 à 01:04 Modifié par gaston


Bonjour,

Ah ok, je vois qu'on n'était pas du tout sur le même longueur d'onde [:D]
Mon formulaire c'est un formulaire de Google forms et non pas un formulaire sur Sheets
Ce formulaire, par contre, est relié à une Google Sheet, dans laquelle les enregistrements s'enregistrent, créant ainsi, comme tu le disais plus haut, une petite base de données.
Dans un formulaire de Google forms, on peut fermer un formulaire en décochant Réponses acceptées.
La macro dont je parle doit remplir ce rôle, sous condition: en l'occurrence dans le code que j'ai montré, c'est le nombre de réponses, mais moi je voudrais le résultat d'un total qui est dans une cellule de la Google sheet.

PS: pour moi, l'avantage d'un Google forms avec une feuille associée, et qu'on peut utiliser ce formulaire sur un site, intégré ou alors avec un lien, de manière sécurisée, et l'exploitation des résultats offre moulte possibilités avec des importrange et des arrayformula en première ligne des colonnes rajoutées, afin de faire des opérations ligne par ligne automatiquement.
Dès que j'ai un moment, je vais faire une copie du formulaire et de sa feuille associée sur laquelle je travaille actuellement pour une asso et je te ferai passer le lien par mp, comme ça tu verras un peu
carpe diem

Discussion trop ancienne

Cette discussion a été automatiquement fermée car elle n'a plus reçue de nouveau message depuis trop longtemps.

Nous vous suggérons de créer un nouveau message

« Retour sur la liste des messages de ce forum