Page 1 sur 1

Copier un onglet protégé dans Google Sheets sans autoriser les utilisateurs à le modifier

Publié : 30 oct. 2024 08:37
par Nes81
Bonjour à tous,

Je travaille sur un projet Google Sheets composé d’un fichier principal appelé "Trame" et de plusieurs fichiers utilisateur. Chaque utilisateur peut, via un menu personnalisé (UI) dans son propre classeur, déclencher un script pour dupliquer l’onglet "Trame" dans son fichier afin de le remplir. 

L’onglet "Trame" contient des protections pour éviter que les utilisateurs ne modifient les formules ou la mise en forme. Mon script actuel permet de dupliquer l'onglet et de copier les protections, mais il donne également des droits de modification aux utilisateurs, ce qui annule l'effet des protections.

J’ai tenté de déployer le script en tant qu’application web, avec exécution en tant que propriétaire et accès à "toute personne ayant le lien". Malheureusement, je ne maitrise pas suffisamment cet outil pour arriver à mes fins.

Avez une suggestion pour que les utilisateurs puissent déclencher la copie de l’onglet "Trame" dans leur propre fichier tout en conservant les protections initiales, sans qu’ils aient les droits de modification.

Merci d'avance pour votre aide.
 

Re: Copier un onglet protégé dans Google Sheets sans autoriser les utilisateurs à le modifier

Publié : 31 oct. 2024 13:30
par NC_Quentin
Bonjour !

C’est effectivement un peu compliqué : il faut appeler le script déployé via UrlFetchApp, et le point d’entrée sera alors doGet() ou doPost(), en utilisant l’objet passé automatiquement par un tel appel pour faire le traitement sur la feuille voulue. Le mieux est de séparer les deux choses, et d’avoir la partie webapp dans un script standalone.

En un peu plus clair :
- On crée un script standalone
- Dedans, on crée une fonction doGet() ou doPost() qui prend un objet de requête, comme expliqué sur cette page.
- On utilise les paramètres de notre objet de requête pour appeler correctement notre fonction de copie de trame
- On déploie le tout en tant que webapp, avec "en tant que moi" pour toute personne du domaine / ayant le lien (en fonction de la sécurité de la chose)
- Dans le script lié à notre Sheet, on change la fonction de copie pour qu’elle appelle via UrlFetchApp() la webapp

C’est loin d’être trivial, vu que cela met en jeu les requêtes, mais avec la documentation Apps Script et un peu d’essais ça se fait bien !