quelques fonctions développées ...
ATTENTION: le code peut effrayer ... ce n'est pas le but! il s'agit de mettre en place des "briques" de programmation qui permettront de faire ensuite une fonction facile à utiliser et pertinente. Ce qu'il faut voir surtout c'est l'atteinte de l'objectif : avoir une feuille indépendante des réponses au formulaire et qui puisse être vue indépendamment par plusieurs personnes selon la valeur contenues en B.
// enable google sheets api
function vuesFiltreesEnRafale() {
try { delFilterViews() } catch (e) { }
const ss = SpreadsheetApp.getActiveSpreadsheet()
const sh = ss.getSheetByName('liste')
var data = sh.getRange(2, 1, sh.getLastRow() - 1, 1).getValues()
for (var i =0;i<data.length;i++){setFilterView(data[i][0], 10000+i , data[i][0], 1)}
}
function setFilterView(nomFiltre, num, critere, colonne) {
const ss = SpreadsheetApp.getActiveSpreadsheet()
const resource = {
"requests": [
{
"addFilterView": {
"filter": {
"filterViewId": num,
"title": nomFiltre,
"range": {
"sheetId": ss.getSheets()[0].getSheetId(),
"startRowIndex": 0,"endRowIndex": 100,"startColumnIndex": 0,"endColumnIndex": ss.getSheets()[0].getLastColumn()
},
"filterSpecs": [
{
"filterCriteria": {"condition": {"type": "TEXT_CONTAINS","values": [{"userEnteredValue": critere }]}},
"columnIndex": colonne
}
]
}
}
}
]
};
Sheets.Spreadsheets.batchUpdate(resource, ss.getId());
var url = 'https://docs.google.com/spreadsheets/d/'+ss.getId()+'/edit#gid='+ss.getSheets()[0].getSheetId()+'&fvid='+num
console.log(nomFiltre, url)
}
function delFilterViews(nomOnglet) {
var ssId = SpreadsheetApp.getActive().getId();
Sheets.Spreadsheets.batchUpdate(
{
requests: Sheets.Spreadsheets.get(ssId, {
fields: 'sheets/filterViews/filterViewId',
}).sheets[0].filterViews.map(function (e) {
return { deleteFilterView: { filterId: e['filterViewId'] } };
}),
},
ssId
);
}