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