Verrouillage à une heure

Bonjour j'ai besoin d'aide pour bloquer des cellules à une date et heure précise si possible,

je met le lien d'un petit sheet pour comprendre.

https://docs.google.com/spreadsheets/d/10aCPGXN4NGe9PUkrfxiqCmWeow7hP3Lv95TNS4la8PQ/edit?usp=sharing

Bonjour,

Réalisable à l'aide d'un script, voici un exemple :

function verrouillerPlageHeure() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Feuille 1"); // à changer par le nom de la feuille à protéger
  var plageAVerrouiller = sheet.getRange("A1:Z100"); // à changer par la plage que vous souhaitez verrouiller

  plageAVerrouiller.protect();
}

+ le trigger de l'heure est à ajouter dans les déclencheurs

+ la plage peut être dynamique, changer d'un jour sur l'autre, dans ce cas, dites-moi quelle est la plage initiale (jour J) et quelle est la plage de destination (jour J+1), ensuite cela se règle par une boucle qui déplace jour après jour la plage.

Bonjour,

Merci beaucoup pour la réponse,

c'est exactement ce que je recherche depuis longtemps :),

j'ai exactement 34 cellules de 9 lignes à la suite a verrouiller a des dates précises sur 24 onglets (les mêmes dates sur les 24 onglets),

puis-je raccourcir le code ou est ce que je dois le faire pour chaque ?

Bonjour,

Voici un code modifié permettant d'appliquer la protection à tous les onglets, j'ai ajouté une constante ongletsExclus si jamais vous en avez qui ne sont pas à protéger.

Pour ce qui est de la plage dynamique, quelle est la plage ? Les plages ?

const SS = SpreadsheetApp.getActiveSpreadsheet();

function verrouillerPlageHeure(sheet) {
  var plageAVerrouiller = sheet.getRange("A1:Z100"); // à changer par la plage que vous souhaitez verrouiller

  plageAVerrouiller.protect();
}

function ongletsAProteger(){
  const ongletsExclus = ['Feuille 4']; // ajouter les onglets à exclure dans les crochets, entre guillements, séparés par des virgules
  var fichier = SS.getSheets();
  for (var i = 0; i < fichier.length; i++) {
    var onglet = fichier[i];
    var ongletNom = onglet.getName();
    // Vérifie si l'onglet actuel doit être exclu
    if (ongletsExclus.indexOf(ongletNom) === -1) {
      verrouillerPlageHeure(onglet)
    }}
}

Merci beaucoup pour l'aide que vous m'apportez.

J'ai refait un sheet qui correspond exactement à ce que j'ai.

Je vous ai mis les explications dessus.

Si jamais vous avez des questions je vous apporterez les réponses avec plaisir.

https://docs.google.com/spreadsheets/d/1J-tYovFwuMHhM760IDM6IimWNHSrn90yAi2_u1E9HYM/edit?usp=drivesd...

Merci pour votre aide

Bonjour,

Accès refusé, pouvez-vous partager un fichier exemple, sans données sensibles, accessible en lecture seule ?

Merci, si je comprends bien, dans chaque onglet, c'est la plage jaune qui se situe initialement en M16:O23 + M24:N24 qui doit se déplacer chaque jour (+12 lignes / jours).

Comment savoir quelle plage doit se verrouiller ? Y a-t-il des dates dans le bloc rose, qui semble être la trame du tableau ?

Bonjour,

je vais essayer d'être plus précis désolé.

M4:O11 + M12:N12 est à verrouillé le 09/08 a 21h sur tout les onglets nominatifs

M16:O23 + M24:N24 est à verrouillé le 15/08 a 21h sur tout les onglets nominatifs

M28:O35 + M36:N36 est à verrouillé le 30/08 a 21h sur tout les onglets nominatifs

M40:O47 + M48:N48 est à verrouillé le 02/09 a 21h sur tout les onglets nominatifs

en faite il n'y a pas de corrélation entre les dates, c'est vraiment 34 dates random.

Merci ☺️

D'accord, dans ce cas, plutôt que de rentrer manuellement chaque date dans le code, pour chaque plage, 2 solutions :

- noter la date dans chaque bloc, le code lit tous les jours et si la date = date du jour protège la plage.

- avoir un tableau paramétrage avec la date dans une colonne et les plages dans les autres colonnes.

Le plus simple est la seconde solution, voici le code adapté (non testé) : (dans cet exemple la date est en A, la première plage en B et la seconde plage en C d'une feuille 'Parametres')

const SS = SpreadsheetApp.getActiveSpreadsheet();
const PARAMETRES = SS.getSheetByName('Parametres');

function verrouillerPlageHeure(sheet) {
  var aujourdhui = Utilities.formatDate(new Date(), "GMT+2", "dd/MM/yyyy");
  var paramDate = PARAMETRES.getRange('A1:A50').getValues();
  for (i=0;i<paramDate.length;i++){
    if (paramDate[i]===aujourdhui){
      var plage1 = PARAMETRES.getRange(i,2).getValue();
      var plage2 = PARAMETRES.getRange(i,3).getValue();
      sheet.getRange(plage1).protect();
      sheet.getRange(plage2).protect();}}
}

function ongletsAProteger(){
  const ongletsExclus = ['Feuille 4']; // ajouter les onglets à exclure dans les crochets, entre guillements, séparés par des virgules
  var fichier = SS.getSheets();
  for (var i = 0; i < fichier.length; i++) {
    var onglet = fichier[i];
    var ongletNom = onglet.getName();
    // Vérifie si l'onglet actuel doit être exclu
    if (ongletsExclus.indexOf(ongletNom) === -1) {
      verrouillerPlageHeure(onglet)
    }}
}

merci j'ai créer un onglet paramètre.

mais j'ai quand même du mal a comprendre le script (désolé c'est la première fois que j'utilise ceci)

ce que je dois remplir ^^, je ne comprend pas non plus onglets à exclure car de base les personnes ne peuvent remplir que les zones de couleurs le reste est deja en lecture seul.

et est ce que avec ce script les 24 onglets sont impactés ? ou je dois le faire 24 fois.

désolé je suis vraiment débutant ^^ mais merci en tout cas très intéressant

ps: j'ai mis en éditeur si jamais

Voici le déroulé du script, lorsqu'il est lancé (il suffit de mettre un déclencheur horaire pour la fonction ongletsAProteger , quotidien à 21h) :

1- des données sont déclarées, afin d'être utilisé ultérieurement, le fichier sheet et la feuille nommée Parametres :

const SS = SpreadsheetApp.getActiveSpreadsheet();
const PARAMETRES = SS.getSheetByName('Parametres');

2- la fonction ongletsAProteger est lancée, une donnée (liste) contenant le nom des onglets a exclure est déclarée :

  const ongletsExclus = ['Feuille 4'];

3- on met dans une variable toutes les feuilles du fichier

  var fichier = SS.getSheets();

4- on créé une itération, qui en fonction du nombre de feuilles du fichier créé une variable temporaire contenant chaque nom de feuille.

for (var i = 0; i < fichier.length; i++) {
    var onglet = fichier[i];
    var ongletNom = onglet.getName();

5- un test est fait, si le nom de l'onglet n'est pas dans les onglets exclus, alors on lance la fonction verrouillerPlageHeure en utilisant l'onglet testé

if (ongletsExclus.indexOf(ongletNom) === -1) {
      verrouillerPlageHeure(onglet)

6- dans cette nouvelle fonction on délcare 2 variables, la date du jour, et la plage dans l'onglet paramètres des dates inscrites en colonne A

  var aujourdhui = Utilities.formatDate(new Date(), "GMT+2", "dd/MM/yyyy");
  var paramDate = PARAMETRES.getRange('A1:A50').getValues();

7 -on fait une itération sur le nombre de date et on teste si l'une de celle ci = aujourd'hui

for (i=0;i<paramDate.length;i++){
    if (paramDate[i]===aujourdhui){

8- Si oui, alors on protège les plages associées

var plage1 = PARAMETRES.getRange(i,2).getValue();
      var plage2 = PARAMETRES.getRange(i,3).getValue();
      sheet.getRange(plage1).protect();
      sheet.getRange(plage2).protect();}}
Rechercher des sujets similaires à "verrouillage heure"