Protection/Déprotection de plages via apps scripts

Bonjour,

Soit un tableau à disposition d'éditeurs désignés sur Drive. (Partage)

Sur les feuilles des plages sont protégées, d'autres non. (Mise à jour par les éditeurs)

Il y a aussi des "Boutons" pour lancer des macros (par les éditeurs)

Problème : certaines de ces macros mettent en causes des cellules (plages) protégées et ne peuvent s'exécuter !...

Je cherche donc à compléter mes macros avec, au début, un ordre de déprotection des plages concernées...

= = = = =

= = = = =

Et à la fin, un ordre de protection des plages préalablement déprotégées !!...

Compte tenu de mon niveau d'incompétence, je ne trouve pas de solution...

Pouvez vous éclairer ma lanterne ? je vous en serai bien reconnaissant.

Cordialement

JL

Bonjour,

Voici la documentation de Google, cela ne semble pas très compliqué, toutefois, au niveau des autorisations, j'ignore comment cela se passe :

https://developers.google.com/apps-script/reference/spreadsheet/protection?hl=fr

Bonjour et merci de votre réponse.

J' avais bien trouvé cet exemple, après des recherches laborieuses ... mais n' ayant rien compris aux lignes suivantes :

for (var i = 0; i < protections.length; i++) {
var protection = protections[i];
if (protection.canEdit()) {
protection.remove();  
}
}
j'avais passé mon chemein !

Comment doit-on lire ces instructions ?
Que signifie "protection" par rapport à "protectionS"
Que signifie i++

Si vous voulez bien encore m'accorder quelques minutes, je serai sans doute plus instruit !...
Cordialement
JL

Bonjour,

Voici le détail ligne par ligne :

1. on déclare l'endroit où on veut que le code s'exécute, dans ce cas, le fichier Google Sheet actif (là où le code est exécuté).

var ss = SpreadsheetApp.getActive();

2. on crée une variable nommée "protections"qui contient en donnée le lieu où des protections sont présentes, en gros c'est des coordonnées stockées dans une variable.

var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);

3. on crée une boucle, c'est-à-dire un bout de code qui tourne pendant qu'une condition est remplie, dans ce cas, on défini notre point de départ qu'on nomme "i" (> vous pouvez mettre n'import quoi, mais par convention on met généralement "i" ) à 0

for (var i = 0; i < protections.length; i++) {

Puis, on dit que tant que i est inférieur au nombre de données présentes dans la variable "protection" on fait une boucle et on rajoute 1 à i (i++ est égale à i+1) ex :

Si protections contient 9 données, tant que i ne sera pas égal à 9 il fera une boucle et ajoutera 1 à i, une fois que i sera égale à 9 la boucle cessera.

4. dans la boucle, on crée une nouvelle variable "protection" qui va prendre 1 à 1 les données présentes dans la variable "protections" : protection[i] = protections[0] la première boucle, protections[1] la seconde et ainsi de suite, comme cela, toutes les données vont être mises dans la variable temporaire protection. (afin d'être testé unitairement, commeii est égale à un nombre correspondant à une donnée de notre variable).

var protection = protections[i];

5. maintenant, on effectue un test : si je peux éditer la protection sélectionnée, alors je la supprime :

if (protection.canEdit()) {
protection.remove();

Ce code fonctionne donc, si vous avez la possibilité de modifier les protections, il faut donc avoir les droits suffisants.

Merci, je vais me coucher moins bête

Cordialement

JL

Rechercher des sujets similaires à "protection deprotection plages via apps scripts"