Modifier couleur et masquer onglet via un script

Bonjour,

J'aimerais pouvoir modifier la couleur des onglets, avec un script, selon ces contraintes.

(Mes onglets correspondent aux n° de semaines)

J'aimerais que pour les semaines passées les onglets soient en rouge, pour la semaine en cours en vert et pour les semaines à venir en jaune.

Et, si possible masquer automatiquement les semaines terminées....

Merci pour votre participation,

Cordialement,

Fil.

Bonjour

Essayez avec ce code

Sub colorise()
Dim i As Byte
Dim j As Long
For i = 1 To Sheets.Count
    Select Case Sheets(i).Name
        Case Is < WorksheetFunction.IsoWeekNum(Date): j = 255 'rouge
        Case Is = WorksheetFunction.IsoWeekNum(Date): j = 65535 'jaune
        Case Is > WorksheetFunction.IsoWeekNum(Date): j = 5296274 'vert
    End Select
    Sheets(i).Tab.Color = j
    If j = 255 Then Sheets(i).Visible = False Else Sheets(i).Visible = True
Next i
End Sub

Si ok -->

Cordialement

Edit : oups désolé je n'avais pas fait attention que votre demande concernait google sheets. Donc pas sûr que cela fonctionne

Merci Dan, mais effectivement ça ne marche pas sous GS...

Bonne soirée,

Fil.

Bonjour Dan,

je traduis ton charabia dans une langue plus poétique ...

function onOpen() {
  var d = new Date()
  var sem = d.getISOWeek()
  SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(sh => {
    try {
      if (sh.getName() == sem) { sh.setTabColor("green") }
      else if (sh.getName() < sem) {
        sh.setTabColor("red")
        sh.hideSheet()
      }
      else { sh.setTabColor("yellow") }
    } catch (e) { console.log(e) }
  })
}
Date.prototype.getISOWeek = function () {
  var date = new Date(this.getTime());
  date.setHours(0, 0, 0, 0);
  date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7); // jeudi
  var week1 = new Date(date.getFullYear(), 0, 4); // semaine 1 = celle du 4 janvier
  return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);
}

edit : avec le masquage demandé

Merci Steelson,

ça fonctionne à la perfection; c'est génial!

Sans vouloir abuser, est-il possible que les 2 onglets de gauche (répertoire et modèle) ne soient pas affectés par ces modifications de couleurs?

Avec quelque chose du genre for (var i=2;i<allSheets.length;i++)???

Merci encore pour tout!!!

Bonne soirée,

Fil.

2 solutions

  SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach((sh,i) => {
    if (i>1) {
    try {
      if (sh.getName() == sem) { sh.setTabColor("green") }
      else if (sh.getName() < sem) {
        sh.setTabColor("red")
        sh.hideSheet()
      }
      else { sh.setTabColor("yellow") }
    } catch (e) { console.log(e) }
    }
  })

ou bien tester si le nom de l'onglet est numérique

  SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(sh => {
    if (if (sh.getName() == /\d+/.exec(sh.getName()))) {
    try {
      if (sh.getName() == sem) { sh.setTabColor("green") }
      else if (sh.getName() < sem) {
        sh.setTabColor("red")
        sh.hideSheet()
      }
      else { sh.setTabColor("yellow") }
    } catch (e) { console.log(e) }
    }
  })

Bonjour Steelson,

Tout est nickel.

Par contre, j'aimerais comprendre cette formule: /\d+/.exec(sh.getName()

Il y a également un petit truc qui me travaille...

Est-il possible d'appeler une feuille masquée (par exemple: 'Modèle') avec une macro (CopieOnglet) tout en la laissant masquée ou en la remasquant après?

Merci pour toutes tes collaborations,

Cordialement,

Fil.

Est-il possible d'appeler une feuille masquée (par exemple: 'Modèle') avec une macro (CopieOnglet) tout en la laissant masquée ou en la remasquant après?

a priori je pense, fais le test et tu verras ...

Par contre, j'aimerais comprendre cette formule: /\d+/.exec(sh.getName()

/xxxxx/.exec(yyyyy) permet d'exécuter l'expression régulière xxxxx sur yyyyy

pour comprendre les expressions régulières : https://www.sheets-pratique.com/fr/fonctions/regexmatch

\d+ est équivalent à [0-9]+ c'est-à-dire recherche des valeurs numériques

Merci pour tout. c'est très instructif.

Pour les onglets masqués, j'ai trouvé une solution en les activant avec:

sheet.activate();

puis en les masquant, après le déroulement du script, avec:

sheet.hideSheet();
raquette humour
Rechercher des sujets similaires à "modifier couleur masquer onglet via script"