Afficher ou masquer colonnes automatique Google Apps Script

Bonjour à tous,

Je voudrais savoir, si c'était possible soit par une formule (ce qui m'étonnerait) mais je pense plutôt que la solution serait de passer par App Script de masquer ou afficher des colonnes automatiquement selon les données d'une cellule.

Je m'explique, sur ma feuille, j'ai un tableau avec 20 lignes pour les fruits et un tableau avec 20 lignes pour les légumes.
Ce que je voudrais faire c'est lorsque je rentre en celulle B1 à Nombres de fruits 4 par exemple, que ça me masque automatiquement les 16 lignes suivantes (lignes 9 à 20). Pareil pour les légumes, lorsque je rentre 3, ça me masque les autres lignes (26 à 38).

Dans la feuille 2, j'ai fait aussi le problème mais dans l'autre sens, c'est à dire que les lignes sont masqués de base, et lorsqu'on rentre les chiffres, il faudrait que le nombre de ligne aparaisse ...

Les deux solutions me vont, soit l'une soit l'autre ... ce qui est le plus simple pour vous, vu que le résultat au final sera le même.

J'espère que j'ai bien expliqué.

Je vous laisse ma feuille google sheet et vous remercie :

https://docs.google.com/spreadsheets/d/16c_S2gjUc1ju74aZe3diZcOKlzb94GGM5MkVSSgkOLo/edit#gid=0

Bonjour,

j'ai un tableau avec 20 lignes pour les fruits et un tableau avec 20 lignes pour les légumes.

je n'en compte que 16

//             en B1     en B2
const lignes = [[5, 16], [23, 16]]
function onEdit(e) {
  const rng = e.source.getActiveRange()
  const row = rng.getRow()
  if (row != 1 && row != 2) return;
  if (rng.getColumn() != 2) return;
  const n = e.value
  const sh = e.source.getActiveSheet()
  sh.hideRows(lignes[row - 1][0], lignes[row - 1][1])
  sh.showRows(lignes[row - 1][0], n)
}

Merci beeaaaauuucccouuuppp

Bonjour,

Je pensais pouvoir adapter le script à mon espace de travail mais force est de constater que je suis complètement perdue et que je n'y connais rien à App Script.

Est-il possible d'adapter la même chose à ma feuille de travail ?

Le tableau Bleu Vert Jaune Orange en C3:D6 sont le nombre de ligne à afficher pour les tableau plus bas.

Bleu : ligne 12 à 52
Vert : ligne 56 à 96
Jaune : ligne 100 à 140
Orange : ligne 144 à 184

Merci beaucoup.

https://docs.google.com/spreadsheets/d/1URwj3hhoYj_0IIZ2bYVdj4J2B5P9r9vA-0-MWnEyHpk/edit?usp=sharing

Comme je n'arrive pas à éditer mon message précédent je rajouterai également une chose :

J'ai aussi des feuilles masquées "BLEU 1" "BLEU 2" BLEU 3" etc ... je ne les ai pas tous mis, mais dans mon sheet final il y aura 41 feuilles "BLEU" de BLEU 1 à feuille BLEU 41, 41 feuilles VERT "VERT 1" "VERT 2" etc ..., 41 JAUNE "JAUNE 1 "JAUNE 2" etc ... et 41 ORANGE avec ORANGE 1 ORANGE 2 etc ...

L'idée, serait la suivante : En même temps que de faire apparaitre les lignes correspondantes à chaque fois qu'on les rentre (voir message précédent) il faudrait également pouvoir afficher les feuilles également.

Je prends par exemple dans mon tableau en C4:D6 :

Bleu 2
Vert 3
Jaune 4
Orange 5

Il faudrait donc que

Pour le tableau bleu
les lignes 12-13 soit affichées et 14-52 masquées et que dans le même temps, les feuilles BLEU 1 et BLEU 2 apparaissent

Pour le tableau vert
les lignes 56-58 soit affichées et 59-96 masquées et que dans le même temps, les feuilles VERT 1 VERT 2 et VERT 3 apparaissent

Pour le tableau jaune
les lignes 100-103 soit affichées et 104-140 masquées et que dans le même temps, les feuilles JAUNE 1, JAUNE 2 JAUNE 3 et JAUNE 4 apparaissent

Et la même chose pour le tableau orange
les lignes 144-148 soit affichées et 149-184 masquées et que dans le même temps, les feuilles ORANGE 1 et ORANGE 2 ORANGE 3 ORANGE 4 ORANGE 5 apparaissent

Je n'ai créé que 10 feuilles BLEU pour l'instant pour l'exemple, mais je créerait les autres feuilles dans le document final, meme si ils y sont pas, il faudrait quand même les intégrer au script.

Je vous remercie.

https://docs.google.com/spreadsheets/d/1URwj3hhoYj_0IIZ2bYVdj4J2B5P9r9vA-0-MWnEyHpk/edit#gid=0

Pour le masquage, j'ai mis ceci en paramètres dans la feuille

image
function onEdit(e) {
  const sh = e.source.getActiveSheet()
  if (sh.getName() != 'Cotation le S') return;
  const rng = e.source.getActiveRange()
  const row = rng.getRow()
  if (row < 3 || row >6) return;
  if (rng.getColumn() != 4) return;
  const lignes = sh.getRange('E3:F6').getValues()
  const n = e.value
  sh.hideRows(lignes[row - 3][0], lignes[row - 3][1])
  sh.showRows(lignes[row - 3][0], n)
}

Pour les feuilles, je verrai plus tard (nouvelle demande)

avec le masquage des feuilles

function onEdit(e) {
  const sh = e.source.getActiveSheet()
  if (sh.getName() != 'Cotation le S') return;
  const rng = e.source.getActiveRange()
  const row = rng.getRow()
  if (row < 3 || row > 6) return;
  if (rng.getColumn() != 4) return;
  const lignes = sh.getRange('E3:F6').getValues()
  sh.hideRows(lignes[row - 3][0], lignes[row - 3][1])
  sh.showRows(lignes[row - 3][0], e.value)
  afficher(rng.offset(0, -1).getValue(), e.value, lignes[row - 3][1])
}
function afficher(nom, n, m) {
  var doc = SpreadsheetApp.getActiveSpreadsheet()
  for (var i = 1; i <= n; i++) {
    try {
      var fx = doc.getSheetByName(nom.toUpperCase() + ' ' + i)
      if (fx.isSheetHidden()) { fx.showSheet() }
    }
    catch (e) {
      SpreadsheetApp.getActive().toast(e)
    }
  }
  for (var i = +n + 1; i <= m; i++) {
    try {
      var fx = doc.getSheetByName(nom.toUpperCase() + ' ' + i)
      if (!fx.isSheetHidden()) { fx.hideSheet() }
    }
    catch (e) {
      SpreadsheetApp.getActive().toast(e)
    }
  }
}

il y aura des clignotements de messages en bas à droite tant que les feuilles ne seront pas crées

Super merci beaucoup ! L'affichage fonctionne parfaitement !

Cependant est-ce que c'est possible de faire le masquage automatique des feuilles également ?

Le script permet de les afficher lorsqu'on augmente la valeur, mais lorsqu'on la diminue où quand on remet à zéro j'aimerai que ça les remasque également.

Et ça serait parfait !

Le script permet de les afficher lorsqu'on augmente la valeur, mais lorsqu'on la diminue ................... j'aimerai que ça les remasque également.

Et ça serait parfait !

c'est déjà le cas quand on diminue

Pour le 0 ...

function onEdit(e) {
  const sh = e.source.getActiveSheet()
  if (sh.getName() != 'Cotation le S') return;
  const rng = e.source.getActiveRange()
  const row = rng.getRow()
  if (row < 3 || row > 6) return;
  if (rng.getColumn() != 4) return;
  const lignes = sh.getRange('E3:F6').getValues()
  sh.hideRows(lignes[row - 3][0], lignes[row - 3][1])
  try {sh.showRows(lignes[row - 3][0], e.value)} catch(e){}
  afficher(rng.offset(0, -1).getValue(), e.value, lignes[row - 3][1])
}
function afficher(nom, n, m) {
  var doc = SpreadsheetApp.getActiveSpreadsheet()
  for (var i = +n + 1; i <= m; i++) {
    try {
      var fx = doc.getSheetByName(nom.toUpperCase() + ' ' + i)
      if (!fx.isSheetHidden()) { fx.hideSheet() }
    }
    catch (e) {}
  }
  for (var i = 1; i <= n; i++) {
    try {
      var fx = doc.getSheetByName(nom.toUpperCase() + ' ' + i)
      if (fx.isSheetHidden()) { fx.showSheet() }
    }
    catch (e) {}
  }
}

Bonjour,

Merci pour ton script, c'était bien ce que je cherchais ! Seulement, après un premier test en condition de travail réel, je m'aperçois que dans la pratique il y a des choses auquel on n'avait pas envisagé. En aucun cas à cause du script, mais plutôt de mon côté dans l'organisation de mon tableau lol, du coup je me permets de réouvrir ce fil et de voir si c'était possible de le modifier pour apporter les changements suivants :

- Les colonnes à prendre en compte ne sont plus E3:F6 mais J3:K6 (j'ai mis en gris où je les ai déplacé ...) les colonnes E à I serviront à d'autres contenus, donc si il y a besoin de rajouter des colonnes pour adapter le script ça sera à partir de J.

- Il faudrait également que lorsqu'on met 0, cela ne masque pas seulement les cellules en bleu en vert jaune et orange, mais il faudrait que ça masque le tableau entièrement avec les titres (exemple pour le Bleu masquer depuis la ligne 10, vert depuis la ligne 54, jaune 98, Orange 142) tout en gardant le principe du 0 masquer toutes les feuilles, 1 faire apparaitre 1 feuille, 2 faire apparaitre 2 feuilles etc ...

Voilà, je ne sais pas si j'ai été claire

Je te remercie si tu pouvais apporter ces modifications.

avec 2 lignes d'en-tête pour chaque groupe

function onEdit(e) {
  const sh = e.source.getActiveSheet()
  if (sh.getName() != 'Cotation le S') return;
  const rng = e.source.getActiveRange()
  const row = rng.getRow()
  if (row < 3 || row > 6) return;
  if (rng.getColumn() != 9) return; // colonne I
  const lignes = sh.getRange('J3:K6').getValues()
  sh.hideRows(+lignes[row - 3][0] - 2, +lignes[row - 3][1] + 2)
  if (e.value > 0) {
    try { sh.showRows(+lignes[row - 3][0] - 2, +e.value + 2) } catch (e) { }
  }
  afficher(rng.offset(0, -1).getValue(), e.value, lignes[row - 3][1])
}
function afficher(nom, n, m) {
  var doc = SpreadsheetApp.getActiveSpreadsheet()
  for (var i = +n + 1; i <= m; i++) {
    try {
      var fx = doc.getSheetByName(nom.toUpperCase() + ' ' + i)
      if (!fx.isSheetHidden()) { fx.hideSheet() }
    }
    catch (e) { }
  }
  for (var i = 1; i <= n; i++) {
    try {
      var fx = doc.getSheetByName(nom.toUpperCase() + ' ' + i)
      if (fx.isSheetHidden()) { fx.showSheet() }
    }
    catch (e) { }
  }
}

C'est exactement ça, par contre j'ai oublié de préciser que les colonnes H et I reste en C et D j'ai fait la modif sur le tableau, il faudrait le faire sur le script.

https://docs.google.com/spreadsheets/d/1URwj3hhoYj_0IIZ2bYVdj4J2B5P9r9vA-0-MWnEyHpk/edit#gid=0

Merci beaucoup

il suffit de changer cette ligne et mettre 4 pour D

if (rng.getColumn() != 4) return; // colonne D
Rechercher des sujets similaires à "afficher masquer colonnes automatique google apps script"