Visualiser automatiquement la semaine en cours sous spreadsheet

Si vous faites vos planning sous spreadsheet façon MS Project, il peut être intéressant de visualiser la semaine en cours. Pour ce faire on va avoir recours à Google Script.
Une fois terminé, cela devrait ressembler à ça :

Trouver le numéro de semaine

Plutôt que de calculer le numéro de semaine en utilisant l’objet Date de javascript, on va utiliser les scripts properties pour stocker le numéro de semaine actuel. Cela présente deux avantages :

  1. C’est plus simple que de passer par l’objet Date
  2. C’est aussi plus souple. De l’expérience que j’en ai , il y a mille et une façon de numéroter les semaines du calendrier. En stockant celui-ci vous pouvez l’adapter à votre utilisation.
Pour changer ce numéro j’utiliserai la fonction très simple suivante :
function changeActualWeek(weekNumber){
 ScriptProperties.setProperty("actualweek", weekNumber);
 }

Pour l’initialisation, vous pouvez procéder de deux façons :

  • Soit aller modifier les script properties via le menu File > Properties
  • Soit ajouter une fonction pour l’initialisation
Je préfère la deuxième solution, qui est plus rapide et plus simple lorsque vous installez le script la première fois et que vous ne connaissez rien au script.
On pourrait même créer une entrée de menu pour mettre à jour le numéro de semaine. Mais pour faire rapide une simple fonction suffira :
function changeActualWeek(weekNumber){
  ScriptProperties.setProperty("actualweek", weekNumber);
}

function initWeekNumber(){
  changeActualWeekColor(40);
}
Colorier la colonne
Dans mon cas les numéros de semaines sont situés sur la première ligne et le planning est sur 3 feuilles. Je vais donc devoir parcourir les 3 feuilles et leurs colonnes.
Attention tout de même, je ne veux colorier que les cellules « blanches », pour continuer à voir mon planning.
cela donne :
function replaceColorWeekInAllSheets(oldColor,newColor){
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  for(var i in sheets){
    replaceColorWeekColumn(sheets[i],oldColor,newColor);
  }
}

function replaceColorWeekColumn(sheet,oldColor,newColor) {
  var row = 1;
  var lastRow  = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();

  for(var i = 1; i <= lastColumn; i++){
    var range = sheet.getRange(row,i,1,1);
    var value = range.getValue();
    if(value == ScriptProperties.getProperty("actualweek")){
      var rangeToColor = sheet.getRange(row,i,lastRow,1);
      replaceCellsColor(rangeToColor,lastRow,oldColor,newColor);
      break;
    }
  }
}

function replaceCellsColor(range,endRow,oldColor,newColor){
  for(var i = 1; i <= endRow; i++){
    var cell = range.getCell(i, 1);
    if(cell.getBackgroundColor() == oldColor){
      cell.setBackgroundColor(newColor);
    }
  }

}
Pour que la première semaine se colore à l’initialisation je modifie la fonction initWeekNumber :
function initWeekNumber(){
  changeActualWeek(40);
  replaceColorWeekInAllSheets("white","#bbffbb");
  replaceColorWeekInAllSheets("#ffffff","#bbffbb");
}
Comme vous le voyiez, je suis obligé de tenir compte de 2 cas, celui où le Background color de la cellule est white et celui ou il est #ffffff, ce qui n’est malheureusement pas la même chose.
Par défaut, la couleur des cellules est « white ». Mais si vous utilisez le bouton pour changer de fond, elle devient « #ffffff ».
Ajouter une tâche planifiée
Pour terminer il ne me reste plus qu’à planifier le changement de semaine. Pour ce faire je commence par créer la fonction qui sera appelée.
Elle doit
  • supprimer le formatage de la semaine précédente
  • incrémenter le numéro de semaine
  • lancer la coloration
function weekChangeTrigger(){
  replaceColorWeekInAllSheets("#bbffbb","#ffffff");
  var actualWeek = parseInt(ScriptProperties.getProperty("actualweek"));
  actualWeek++;
  changeActualWeek(actualWeek);
  replaceColorWeekInAllSheets("white","#bbffbb");
  replaceColorWeekInAllSheets("#ffffff","#bbffbb");
}
Puis, j’ajoute le trigger suivant via le menu Triggers :

Il n’y a plus qu’à attendre lundi prochain, pour que la semaine change automatiquement.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *