Bonjour à tous!
je travaille sur un script google dont l'objectif est de compléter des listes déroulantes dans des formulaires à l'aide des données contenues dans un classeur gsheet (il s'agit en l'occurrence de listes de classes).
Mes contraintes sont les suivantes:
- à chaque classe correspond une feuille du classeur,
- à chaque classe doit correspondre un formulaire indépendant (à part cela, ils ont tous la même structure et la liste déroulante avec les noms et prénoms est le premier item du formulaire),
- tous les formulaires sont contenus dans le même dossier sur Google Drive.
Je pourrais faire un script par formulaire et par classe. Mais le nombre de classes peut varier selon les années et je n'ai pas envie de remettre les mains dans le cambouis sans arrêt.
Voici où j'en suis:
- j'ai réussi à faire un script qui recense tous les formulaires présents dans le dossier-cible, qui récupère leur nom et leur ID (dans le drive de Google, chaque fichier ou dossier est identifié par un ID unique) et qui stocke ces données dans un array.
- j'ai réussi à ajouter un script qui, pour une ligne précise de l'array, sélectionne la feuille correspondante du classeur gsheet et remplit la liste déroulante avec les noms des élèves de la classe-cible.
Maintenant il faut que je puisse faire la même chose pour chaque ligne de l'array. J'ai pensé à une boucle while, mais cela ne marche pas: pas d'erreur de syntaxe (la console ne renvoie aucun bug) mais aucun effet! C'est la première fois que je fais un script aussi complexe (pour mon niveau), et je n'arrive pas à voir où est le bug. Voici le code de la boucle en question:
Merci d'avance pour vos conseils!
Modifié par bouffandt (08 Dec 2021 - 08:43)
je travaille sur un script google dont l'objectif est de compléter des listes déroulantes dans des formulaires à l'aide des données contenues dans un classeur gsheet (il s'agit en l'occurrence de listes de classes).
Mes contraintes sont les suivantes:
- à chaque classe correspond une feuille du classeur,
- à chaque classe doit correspondre un formulaire indépendant (à part cela, ils ont tous la même structure et la liste déroulante avec les noms et prénoms est le premier item du formulaire),
- tous les formulaires sont contenus dans le même dossier sur Google Drive.
Je pourrais faire un script par formulaire et par classe. Mais le nombre de classes peut varier selon les années et je n'ai pas envie de remettre les mains dans le cambouis sans arrêt.
Voici où j'en suis:
- j'ai réussi à faire un script qui recense tous les formulaires présents dans le dossier-cible, qui récupère leur nom et leur ID (dans le drive de Google, chaque fichier ou dossier est identifié par un ID unique) et qui stocke ces données dans un array.
- j'ai réussi à ajouter un script qui, pour une ligne précise de l'array, sélectionne la feuille correspondante du classeur gsheet et remplit la liste déroulante avec les noms des élèves de la classe-cible.
Maintenant il faut que je puisse faire la même chose pour chaque ligne de l'array. J'ai pensé à une boucle while, mais cela ne marche pas: pas d'erreur de syntaxe (la console ne renvoie aucun bug) mais aucun effet! C'est la première fois que je fais un script aussi complexe (pour mon niveau), et je n'arrive pas à voir où est le bug. Voici le code de la boucle en question:
var fileList = list.sort(); //dans cette variable se trouvent les noms et ID de tous les formulaires dont j'ai besoin sous forme d'un array à deux colonnes: [Nom, ID].
//Si je log fileList, j'ai bien ma liste de formulaires au complet.
while (fileList.hasNext){
var list = fileList.next();
Logger.log (list) //quand je log la variable list, je n'obtiens rien!
var formId = file[0][1]; //ici on récupère l'ID qui servira à ouvrir le bon formulaire (premier crochet = ligne, à itérer, 2e crochet = colonne à ne surtout pas modifier)
//récupération du titre du formulaire pour trouver automatiquement le nom de la feuille contenant la liste de classe voulue (nécessite une stricte correspondance du titre du formulaire et de la feuille)
var formTitle = FormApp.openById(formId).getTitle();
//ouverture du classeur dont j'ai récupéré l'ID au début du script
var wsData = SpreadsheetApp.openById(ssId).getSheetByName(formTitle);
//ouverture du formulaire de la classe
var form = FormApp.openById(formId);
//variable stockant le nom des élèves dans un tableau
var options = wsData
.getRange(2, 1,wsData.getLastRow()-1, 1)
.getValues()
.map(function (o){return o[0]});
//récupération de l'identifiant de la liste déroulante et établissement de la liste de choix selon le contenu de la variable "options"
var chercheitemID = form.getItems()
var itemId = chercheitemID[0].getId().toString();
for (var i=0;i<fileList.length;i++){
var item = form.getItemById(itemId);
item.asListItem().setChoiceValues(options);}
};
Merci d'avance pour vos conseils!
Modifié par bouffandt (08 Dec 2021 - 08:43)