J'ai créé une "fiche" sur un onglet qui me permet d'exporter par mail un PDF A4 avec des infos que je récupère dans un tableau sur l'onglet d'à côté.
Le hic, c'est que je n'avais pas anticipé de devoir en créer une seconde sur un nouvel onglet... ce qui m'oblige à adapter maintenant mes scripts que je lance depuis le menu Google Sheet :
J'ai fait mes tests sur la dernière option du menu "Vider la Fiche de FAB" car c'est la plus pratique/rapide (et surtout je n'envoie pas de mail à chaque fois).function onOpen() {var ui = SpreadsheetApp.getUi();var menu = ui.createMenu("Fiche de FAB");
menu.addItem("[Guide] Comment utiliser le planning.","reglesUtilisateur");
menu.addItem("Copier sur le serveur","exportMailServeur");
menu.addItem("Envoyer par mail","exportMailUtilisateur");
menu.addItem("Vider la Fiche de FAB","cleanFab");
menu.addToUi();}
La seule variable qui me parait importante, c'est celle qui me permet de cibler toutes mes constantes dans les 3 scripts du menu, à savoir le nom de l'onglet, que j'ai appelé "fabID".
Donc avant je ciblais forcément "FAB", maintenant je dois lancer mes scripts sur "FAB" ou "FAB2".
Plutôt que créer des duplicatas de mes fonctions (testées et approuvées) dans code.gs (et donc de doubler les entrées de mon menu), je me suis dit qu'il serait plus "propre" de créer une boucle pour vérifier l'onglet affiché, et renvoyer la variable "fabID" qui m'intéresse.
Jusqu'ici, je suis parvenu à lancer le bon script en fonction de l'onglet affiché :
Si onglet "FAB" affiché -> lance cleanFab1()
Si onglet "FAB2" affiché -> lance cleanFab2()
Si tout autre onglet du classeur -> message d'erreur
Là où ça se complique, c'est que j'ai essayé de voir comment adapter cette "boucle" pour qu'elle ne soit pas DANS ma fonction "cleanFab()" (laquelle appelait ensuite soit cleanFab1() soit cleanFab2()), pour que ce soit une fonction autonome que je pourrai utiliser dans mes autres scripts quelque soit l'item cliqué dans mon menu.
J'ai donc créé une nouvelle fonction "controlOnglet()", et j'ai placé son activation au début de ma fonction "cleanFab()" en espérant pouvoir ensuite copier juste cette ligne au début de mes 2 autres scripts de menu.
Sauf que la variable "fabID" ne veut pas suivre... et j'ai un message d'erreur qui m'indique qu'elle n'est pas définie.
Voilà où je me suis arrêté à ce stade...
J'ai bien tenté un truc en utilisant la variable "ongletID" mais ça n'a pas marché... pour les mêmes raisons d'ailleurs...function controlOnglet() {
var ongletID = SpreadsheetApp.getActiveSpreadsheet().getSheetName();
if(ongletID == 'FAB'){
const fabID = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('FAB');
}else if(ongletID == 'FAB2'){
const fabID = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('FAB2');
} else{
var ui = SpreadsheetApp.getUi();
ui.alert('Vous devez être sur l\'onglet de votre fiche de FAB');
}}
function cleanFab() {
controlOnglet()
//const fabID = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(ongletID);
const cellPlanning = fabID.getRange('G2').clearContent();
const cellDevis = fabID.getRange('M2').clearContent();
const cellProdPoses = fabID.getRange('H15').clearContent();
const cellProdDouble = fabID.getRange('F17').clearContent();
const cellProdFormat = fabID.getRange('F19').clearContent();
const cellProdPasse = fabID.getRange('N15').clearContent();
const cellProdFeuilles = fabID.getRange('O17').clearContent();
const cellProdTotal = fabID.getRange('P19').clearContent();
if(ongletID == 'FAB2'){
const cellDescriptif = fabID.getRange('A8').clearContent();
}}
Si une bonne âme peut m'aider... snif.