METTRE À JOUR LES LISTES DE CHOIX D'UN FORMULAIRE GOOGLE FORM
Si la création d'un formulaire (Google Form) est relativement facile, la mise en place et surtout la modification des choix possibles est plus fastidieuse, d'autant plus quand les choix proviennent eux-mêmes du fichier Google Sheets.
La solution suivante consiste à créer un onglet nommé "listes" dans lequel on retrouve
- ligne 1 des cases à cocher
- ligne 2 les intitulés de question
- lignes 3 et suivantes les choix possibles
Le fait de cocher une case entraîne la mise à jour automatique des choix possible dans le formulaire.
Il faut définir un déclencheur sur la fonction onEdit (lors d'une modification)
const form = FormApp.openById('id du formulaire');
// mettre un déclencheur
function onSpeEdit(event) {
var feuille = event.source.getActiveSheet();
var cellule = event.source.getActiveRange();
if (feuille.getName() == 'listes' && cellule.getRow() == 1 && cellule.getColumn() > 1 && cellule.getValue()) {
valeurs = feuille.getRange(3,cellule.getColumn(),feuille.getLastDataRow(cellule.getColumn())-2,1).getValues().flat()
update(cellule.offset(1, 0).getValue(),valeurs)
cellule.setValue(!cellule.getValue())
}
}
function update(titre,valeurs) {
var items = form.getItems();
items.forEach(function (item) {
if (item.getTitle() == titre) {
var type = item.getType()
if (type == "MULTIPLE_CHOICE") {
item.asMultipleChoiceItem().setChoiceValues(valeurs)
SpreadsheetApp.getActive().toast(`${form.getTitle()} - ${titre} mis(e) à jour !`)
}
else if(type == "LIST"){
item.asListItem().setChoiceValues(valeurs)
SpreadsheetApp.getActive().toast(`${form.getTitle()} - ${titre} mis(e) à jour !`)
}
else if(type == "CHECKBOX"){
item.asCheckboxItem().setChoiceValues(valeurs)
SpreadsheetApp.getActive().toast(`${form.getTitle()} - ${titre} mis(e) à jour !`)
}
}
})
}
Object.prototype.getLastDataRow = function(col){ // col as number
var lastRow = this.getLastRow();
var range = this.getRange(lastRow,col);
if (range.getValue() !== "") {
return lastRow;
} else {
return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}
};
Commentaires
Enregistrer un commentaire