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(10).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

Posts les plus consultés de ce blog

INSÉRER UN TABLEAU PROVENANT D'UNE FEUILLE DANS UN COURRIEL

METTRE À DISPOSITION DES INFORMATIONS SANS ACCÈS AU FICHIER COMPLET

NAVIGUER AU SEIN D'UN FICHIER À L'AIDE D'UN MENU DÉROULANT