script chronophage Le sujet est résolu

Avatar de l’utilisateur
Snake259
Messages : 10
Inscription : 26 nov. 2022 20:46
A remercié : 1 fois

script chronophage

Message par Snake259 »

Bonjour à tous,
J'ai un script qui est utilisés par plusieurs collaborateurs.
Je leurs ai donnés accès à certaines cellules.
Cependant, je constate que certains modifient les bordures de tableau, les couleurs,...
Bref, j'ai imaginé un script qui chaque jour remet en forme mes tableaux.
A savoir que j'ai un document avec une quarantaine de feuille qui doivent donc être remises en forme chaque jour.
Voici mon script qui est chronophage (entre 40 et 60sec.).

function tableauClear() {
  // INFO : Ce script se déclenche automatiquement chaque jour entre 21h et 22h (via trigger)
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var spreadsheet = SpreadsheetApp.getActive();
      ss.getSheets().forEach(sh => {
      if (sh.getRange('E1').getValue() == 'Bientôt clôturé' || sh.getRange('E1').getValue() == 'Modifiable' || sh.getRange('E1').getValue() == 'Template'){
      sh.activate()
      spreadsheet.getRange('F5:K45').activate();
      spreadsheet.getActiveRangeList()
      .setBorder(true, null, true, true, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID_THICK)
      // info :  haut, gauc, bas , droi, vert, hori,  couleur , 
      .setBorder(null, true, null, null, null, null, '#000000', SpreadsheetApp.BorderStyle.DOUBLE)
      .setBorder(null, null, null, null, true, true, '#000000', SpreadsheetApp.BorderStyle.DOTTED)
      .setHorizontalAlignment('center')
      .setVerticalAlignment('middle')
      .setFontFamily('Calibri')
      .setFontSize(12)
      .setFontWeight('bold')
      .setFontStyle(null)
      .setFontColor('#000000');
      alternateColor();
      spreadsheet.getRange('F2').activate();
      };
    });
  masquerTemplate();
  };

function alternateColor() {
  var totalRows = SpreadsheetApp.getActiveRange().getNumRows();
  var totalColumns = SpreadsheetApp.getActiveRange().getNumColumns();
  var startRow = SpreadsheetApp.getActiveRange().getRow();
  var startColumn = SpreadsheetApp.getActiveRange().getColumn();
  var sheet = SpreadsheetApp.getActiveSheet();
  var row = startRow;
  while (row < totalRows+startRow) {
    var column = startColumn
    while (column < totalColumns+startColumn) {
      if(row%2 == 0){
           sheet.getRange(row, column).setBackgroundColor('#cfe2f3'); //light blue 3 (source : https://kierandixon.com/google-sheets-colors/)
      } 
      else {
        sheet.getRange(row, column).setBackgroundColor('#fce5cd'); //light orange 3 (source : https://kierandixon.com/google-sheets-colors/)
        }
      column++;
      }
    row++;
    }
  }

Quelqu'un a une idée pour accélérer mon script?
Avatar de l’utilisateur
RémiD

Coach Numericoach
Invétéré
Messages : 20
Inscription : 12 avr. 2022 16:38
A remercié : 3 fois
Remercié : 3 fois

Re: script chronophage

Message par RémiD »

Hello Snake259, !
Pour éviter de refaire le style de toutes les cellules, qui sont peut-être déjà faites, tu pourrais utiliser la class DeveloperMetaData, je m'explique :
- Ton script passe sur toutes les cellules et vérifie si la metadata "styled" est présente ou pas,
- Si elle n'est pas présente : tu appliques le style (bordures etc ...) et tu ajoutes la metadata "styled". Sinon, elle passe directement à la suivante sans traiter le style !

Pour en savoir plus sur les metadata sur Sheets pour les développeurs : https://developers.google.com/apps-scri ... ta(String)

Ce fonctionnement te permettrait d'économiser du temps et des perfs sur l’exécution de ton script !
N'hésite pas à revenir vers moi si tu as besoin de précisions, en attendant je te souhaite une bonne matinée et te dis à très vite !
 
Avatar de l’utilisateur
Snake259
Messages : 10
Inscription : 26 nov. 2022 20:46
A remercié : 1 fois

Re: script chronophage

Message par Snake259 »

Salut RémiD,

Je ne suis pas un pro pour script, je suis en train de me familiariser.
J'ai consulté la page dont tu me parles et je pige rien de rien. J'ai l'impression d'être un débille et de lire du chinois 😁
 
Avatar de l’utilisateur
NC-Ahmet

Coach Numericoach
Invétéré
Messages : 87
Inscription : 19 sept. 2022 14:09
A remercié : 16 fois
Remercié : 19 fois

Re: script chronophage

Message par NC-Ahmet »

Coucou Snake259,

Bonne année 2023 ! 😉

En effet, c'est technique. Si tu as du mal avec la documentation et les notions qui y sont abordées, c'est que tu dois certainement revoir plus en profondeur les notions de scripting de base.

C'est pas pour rien que c'est tout un métier d'être développeur. Tes meilleurs amis sont Google, nos sites Web, StackOverflow ou encore ChatGPT qui peut t'aider à vulgariser du code.

Rémi t'a clairement apporté la réponse la plus adaptée, je clôture donc le sujet mais n'hésite pas à revenir vers nous si t'es vraiment bloqué que ce soit sur ce sujet ou bien d'autres !

A+,
Ahmet
Répondre

Rejoignez la discussion 💬

Vous devez être enregistré pour participer à la discussion et échanger avec les différents membres

Inscrivez-vous dès aujourd'hui

Vous n'êtes pas encore membre ? Rejoignez-nous gratuitement dès aujourd'hui et contribuer en postant votre réponse ou question sur tous les forums disponibles

Inscription

Connectez-vous