Page 1 sur 1

script chronophage

Publié : 12 déc. 2022 20:54
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?

Re: script chronophage

Publié : 13 déc. 2022 11:01
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 !
 

Re: script chronophage

Publié : 18 déc. 2022 21:25
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 😁
 

Re: script chronophage

Publié : 05 janv. 2023 18:51
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