Numeriblog Google Workspace Google Forms, des formulaires interactifs gratuit Google Forms Google Sheets : recueillir et utiliser les URLs de modification de réponse

Google Forms Google Sheets : recueillir et utiliser les URLs de modification de réponse

Google Forms est un outil de création et de gestion des formulaires qu’on ne présente plus. Vous avez remarqué qu’il est possible de paramétrer un formulaire pour que l’utilisateur puisse modifier ses réponses. Ce lien […]

personnes ont consulté cet article

2 minutes

Rédigé par Antoine MARTIN - il y a 2 ans

Ce que vous allez découvrir

  • Paramétrez Google Forms pour autoriser la modification des réponses
  • Script de récupération des URLs de modification du formulaire
  • Associez les URLs à la feuille de réponses
  • Ajoutez un déclencheur pour lancer le script à chaque soumission de formulaire

Google Forms Google Sheets : recueillir et utiliser les URLs de modification de réponse

Google Forms est un outil de création et de gestion des formulaires qu’on ne présente plus. Vous avez remarqué qu’il est possible de paramétrer un formulaire pour que l’utilisateur puisse modifier ses réponses.

Ce lien apparaît une fois le formulaire validé et après que les réponses aient été enregistrées et envoyées dans Sheets. L’utilisateur peut, grâce à ce lien, afficher à nouveau le formulaire avec ses réponses précédemment données, les modifier et soumettre à nouveau le formulaire sans créer une nouvelle ligne dans la table de données.

Les réponses modifiées sont identifiées sur la feuille de réponses par l’ajout d’une remarque qui s’affiche au survol :

formulaire pour récupérer URL

Ce lien très pratique n’est accessible que sur la fenêtre de fin de formulaire et dans le message de copie des réponses reçu par l’utilisateur. Comment mémoriser ce lien pour permettre à n’importe qui de modifier des réponses d’une même ligne ? Imaginez un référentiel de produits où chaque produit est créé via un formulaire. Chaque membre de l’équipe pourrait ainsi ouvrir le formulaire pour apporter une simple modification sans avoir à recréer une ligne.

Google Apps Script apporte la solution une fois de plus. Voici la procédure que j’ai mise en place pour à la fois exploiter la synchronisation native des données entre Forms et Sheets (souple et sécurisée) et récupérer, pour chaque ligne, le lien vers le formulaire de modification des réponses.

Paramétrez Google Forms pour autoriser la modification des réponses

Créez un formulaire ou copiez cet exemple en cliquant sur le lien https://docs.google.com/forms/d/1Ng3zdfmaitXEEomWeSFiOQrtagb6ZraX0XdTLnTftqE/copy

Il faut bien sûr autoriser l’utilisateur à modifier ses réponses dans les paramètres de Forms. Les URLs seront tout de même récupérables si vous ne le faites pas mais les liens seront inutilisables tant que l’autorisation n’aura pas été validée.

formulaire pour récupérer URL

Récupérez l’ID du formulaire dans l’URL et gardez-le au frais.

Soumettez quelques réponses tests à votre formulaire.

Enfin, créez le fichier Sheets de recueil de réponses.

Script de récupération des URLs de modification du formulaire

Ouvrez la feuille de réponses Google Sheets générée depuis Forms ;

Créez un onglet nommé « editResponseUrl » ;

Créez le script suivant dans la feuille de réponses du formulaire :

function editResponseUrl() {
/*
ATTENTION: remplacez IDDEVOTREFORMULAIRE par l'Id de votre formulaire.
*/
  const form = FormApp.openById('IDDEVOTREFORMULAIRE');
  const formResponses = form.getResponses();
  let reponses = [];
  for (let i = 0; i < formResponses.length; i++) {
    const formResponse = formResponses[i];
    const formResponseTime = formResponse.getTimestamp();
    const formResponseEditUrl = formResponse.getEditResponseUrl();
    reponses.push([formResponseTime, formResponseEditUrl]);
  }
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('editResponseUrl');
sheet.clear();
  sheet.getRange(1, 1, reponses.length, reponses[0].length).setValues(reponses);
}
  • Ouvrir le formulaire indiqué par l’ID (à adapter à votre cas).
  • Récupérer toutes les réponses du formulaire.
  • Pour chaque réponse, récupérer l’horodateur et l’URL de modification des réponses.
  • Injecter ces informations dans une table de valeurs.
  • Écrire toutes ces informations dans la feuille « editResponseUrl ».

Lancez le script manuellement et validez les autorisations. Vous retrouverez dans le fichier Sheets de réponses la feuille « editResponseUrl » contenant deux colonnes de données : l’horodateur de la réponse qui servira de clé d’association et la fameuse URL.

Dans cette capture, j’ai récupéré les huit réponses déjà soumises dans le formulaire.

formulaire pour récupérer URL

J’ai choisi de mettre à jour toutes les informations d’un coup plutôt que d’ajouter une seule ligne à chaque soumission de formulaire pour récupérer également les réponses qui auraient déjà été renseignées avant la création du script.

Associez les URLs à la feuille de réponses

Dans la feuille de réponses, ajoutez une colonne pour afficher les URLs en face de chaque ligne, en faisant une recherche verticale sur l’horodateur.

formulaire pour récupérer URL

Ajoutez un déclencheur pour lancer le script à chaque soumission de formulaire

formulaire pour récupérer URL

Cet article vous présentait une procédure de récupération des URLs de modifications de données que j’ai mise en place. Il vous appartient de l’adapter à vos besoins et votre pratique. En complément de l’utilisation des liens préremplis, cette solution facilite la mise à jour de données. Chacune ayant ses avantages et inconvénients : la principale différence étant la possibilité de dresser un historique des modifications avec la solution des liens préremplis car chaque modification fait l’objet de la création d’une nouvelle ligne datée, mais oblige à utiliser la dernière ligne saisie comme référentiel.

Merci pour vos retours dans les commentaires !

Besoin d'un peu plus d'aide sur Sheets ?

Des formateurs sont disponibles toute l'année pour vous accompagner et optimiser votre utilisation de Sheets, que ce soit pour votre entreprise ou pour vos besoins personnels !

Découvrir nos formations Sheets

Rédacteur

Photo de profil de l'auteur
Antoine MARTIN

Consultant et formateur sur les outils bureautiques, j'ai intégré l'équipe de Numericoach en 2020. J'accompagne les utilisateurs de Google Workspace à trouver des solutions répondant à leurs besoins. Mes domaines de prédilections sont les outils Sheets, Docs, Slides et Google Apps Script.

S’abonner
Notification pour
guest
12 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires

Au top comme.d’hab’. C’est malin et généreux de ta part !

Cet avis vous a été utile ?

Fred
Fred

Un gros merci pour cette procédure… Qui fait tomber aujourd’hui une impasse technique sur un projet que j’avais depuis longtemps… Moi qui suis non pro, n’y connaît pas grand chose, mais qui pratique GSheets de manière « intermédiaire »… Merci mille fois franchement

Cet avis vous a été utile ?

Répondre à  Fred
1 année il y a

Merci Fred pour votre commentaire !

Cet avis vous a été utile ?

PRON X.
PRON X.

Ah ! Magnifique, je croyais que ce n’était pas possible. Merci à vous ! Je vous souhaite une belle année 2022.

Cet avis vous a été utile ?

Répondre à  PRON X.
1 année il y a

Merci et bonne année également !

Cet avis vous a été utile ?

Thibault
Thibault

Bonjour Antoine, Merci beaucoup pour ce script qui m’a bien simplifié la vie 😀
Je l’ai un peu modifier afin de réduire au maximum les actions utilisateur:
function editResponseUrl() {
const form = FormApp.openByUrl(SpreadsheetApp.getActiveSpreadsheet().getFormUrl());
const formResponses = form.getResponses();
const answerSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
const formColumn = answerSheet.getLastColumn() + 1
answerSheet.getRange(1, formColumn).setValue(« url de modification de réponse »)
const lastRow = answerSheet.getLastRow()
for (let i = 0; i < formResponses.length; i++) {
const formResponse = formResponses[i];
const formResponseTime = formResponse.getTimestamp();
const formResponseEditUrl = formResponse.getEditResponseUrl();
for (let i=2; i <= lastRow; i++) {
let sheetTime = answerSheet.getRange(i,1).getValue()
if (sheetTime.getTime() == formResponseTime.getTime()) {
answerSheet.getRange(i,formColumn).setValue(formResponseEditUrl)
}
}
}
}
Il permet de ne pas créer de feuille complémentaire et de ne pas avoir à entrer en dur l'ID du form. La seule action qui reste est l'ajout du déclencheur que l'on pourrait coder aussi au besoin.
Encore merci et au plaisir 🙂

Cet avis vous a été utile ?

Coloc
Coloc

Bonjour
Merci à Antoine et Thibault pour vos procédures.
J’ai testé celle d’Antoine mais il me met une erreur pour la ligne « sheet.clear(); », je ne sais pas pourquoi, étant novice en programmation dans google Apps.
J’ai testé celle de Thibault qui par contre fonctionne parfaitement
sauf que j’ai deux formulaires rattachés à un seul document.
Quand je fais uniquement le lien avec le premier formulaire et que je lance la macro, ça fonctionne.
Par contre à partir du moment où je fais le lien avec mon deuxième formulaire, je duplique la macro et change son nom en editReponse2URL. Je change l’URL de destination. Quelque soit la macro que je lance, il met systématiquement les réponses dans la 2me feuille et même si il change le bon URL dans la ligne 1, le lien envoie sur le 2e formulaire.
Avez-vous une solution pour moi ?
Merci
Co

Cet avis vous a été utile ?

Antoine MARTIN
Répondre à  Coloc
9 mois il y a

Bonjour Coloc; Merci pour ton message.
pour l’erreur
sheet.clear();
vérifie bien que « sheet » est correctement défini
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘editResponseUrl’);
donc que tu as bien une feuille nommée « editResponseUrl » dans ton fichier.
Je te conseillerais de séparer les deux formulaires dans des spreadsheets différents. si tu as besoin de récupérer les infos dans un même spreadsheet, utilise des Importrange.
Bonne continuation !

Cet avis vous a été utile ?

Coloc
Coloc
Répondre à  Antoine MARTIN
9 mois il y a

Bonjour Antoine,
Effectivement, en mettant un seul formulaire par spreadsheets, ça fonctionne.
Merci pour ton aide
Co

Cet avis vous a été utile ?

Coloc
Coloc
Répondre à  Coloc
9 mois il y a

Bonjour Antoine,
Je reviens vers toi car j’ai un soucis avec le script. Il fonctionne parfaitement sauf que le formulaire étant assez important, chaque création de lien est très longue. Du coup, ayant plusieurs formulaires de rempli (et j’en aurai de plus en plus), il est régulièrement en Etat de Délai expiré. Y aurait-il un moyen de recalculer le lien uniquement pour les nouveaux formulaires ou pour les formulaires modifiés et non pour tous les formulaires existants
Co

Cet avis vous a été utile ?

Coloc
Coloc
Répondre à  Antoine MARTIN
9 mois il y a

Ok merci,
Je reviendrai régulièrement pour voir ta proposition
Co

Cet avis vous a été utile ?