Masquer / Afficher ligne en fonction d'une valeur (MACRO ?)

Bonjour,

Je n'arrive pas à créer une macro automatique qui permet de masquer ou afficher une ou plusieurs lignes en fonction d'une valeur.

En effet, sur le document ci joint, je souhaiterai que :

- si J2 = 0 alors afficher que la ligne 3

- si J2 = 4 alors afficher que les lignes 4 et 5.

Pareil pour J6 et J11.

J'ai essayé celle ci mais cela ne fonctionne pas ... :

image

Voici le lien du document test : https://docs.google.com/spreadsheets/d/13OzQ6TDMSPyaQx2uZGmEbQS0kxjw0Bz8hm2wnVjELdo/edit?usp=sharing

En vous remerciant :)

Bonjour,

Il y avait quelques erreurs, voici un code fonctionnel :

function onEdit(e) {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let nbRows = sheet.getMaxRows();
  if (e.range.getA1Notation()!= "J2") {return;}
  if (e.value == "0"){
    sheet.hideRows(1,2);
    sheet.hideRows(4,nbRows-3);

  }else if (e.value == "4") {
    sheet.hideRows(1,3);
    sheet.hideRows(6,nbRows-5);}
  }

Bonjour,

Merci pour votre retour,

Malheureusement, un message d'erreur apparait : "TypeError: Cannot read properties of undefined (reading 'range')onEdit@ Code.gs:4"

Merci pour votre aide

Bonjour Thomas,

Ce script fonctionne avec le déclencheur onEdit, donc tu ne peux pas le lancer depuis Apps Script en faisant Exécuter.

Essaie de faire une modification en J2 directement dans ta feuille et là ça devrait le faire...

Bon week-end,

Fil.

Bonjour Fil,

Je viens d'essayer ton code.

Quand je mets 0, toutes les lignes sont masquées (même les autres équipes) sauf "Non activée" alors que je souhaiterai que les lignes où se situe l'équipage de l'équipe soit masquées et laisser afficher la ligne "Non activée".

Quand je modifie ce nombre à 4, inversement, je souhaite que l'équipage de l'équipe soit affichée et que la ligne "Non activée" disparait.

Sur ton code, tout se masque ...

Je souhaite faire ça pour chaque équipe.

En te remerciant,

C'est le code de Pierre... 😂

J'ai adapté le script, dis-moi si c'est ce que tu veux...


function onEdit(e) {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let nbRows = sheet.getMaxRows();
  if (e.range.getA1Notation()!= "J2") {return;}
  if (e.value === "0"){   
    sheet.showRows(3) 
      sheet.hideRows(4);
      sheet.hideRows(5);
           }else if (e.value === "4"){
  sheet.hideRows(3)
  sheet.showRows(4);
     sheet.showRows(5)}
}

Bonjour,

Le code initialement transmis semblait vouloir masquer des lignes en fonctions des valeurs de J2, si J2 = 0 ou si J2 = 4.

- si J2 = 0 alors afficher que la ligne 3

- si J2 = 4 alors afficher que les lignes 4 et 5.

Le code proposé permet cela, si J2 = 0 alors toutes les lignes sont masquées hormis la 3, si J2 = 4 alors toutes les lignes sont maquées hormis les lignes 4 et 5.

Quand je mets 0, toutes les lignes sont masquées (même les autres équipes) sauf "Non activée" alors que je souhaiterai que les lignes où se situe l'équipage de l'équipe soit masquées et laisser afficher la ligne "Non activée".

Quand je modifie ce nombre à 4, inversement, je souhaite que l'équipage de l'équipe soit affichée et que la ligne "Non activée" disparait.

Sur ton code, tout se masque ...

Google Sheet ne permet pas (encore) la télépathie (s'il y arrive un jour, ce sera avec Query ) donc je ne peux pas connaitre des contraintes que vous n'annoncez pas.

Afin de vous proposer un script adapté, il faudrait que vous énonciez vos besoins au complet.

Bonjour Fil et Pierre,

C'est exactement ce code que je souhaitais. Merci beaucoup Fil !

Est-il possible de rajouter une ligne de code afin d'effacer les valeurs lorsque les lignes sont masquées ?

Est-il possible de prendre une valeur d'un autre onglet pour masquer ou afficher les lignes ?

function onEdit(e) {

let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

let nbRows = sheet.getMaxRows();

if (e.range.getA1Notation()!= VALEUR D'UN AUTRE ONGLET) {return;}

if (e.value === "TEXTE OU NOMBRE"){

sheet.showRows(3)

sheet.hideRows(4);

EFFACER B3 par exemple

sheet.hideRows(5);

}else if (e.value === "TEXTE OU NOMBRE"){

sheet.hideRows(3)

sheet.showRows(4);

sheet.showRows(5)}

}

En vous remerciant,

Thomas

Bonjour Thomas,

Est-il possible de rajouter une ligne de code afin d'effacer les valeurs lorsque les lignes sont masquées ?

Tu souhaites effacer les valeurs de toutes les lignes ou uniquement les valeurs des lignes masquées ?

Uniquement les valeurs des lignes masquées

Un truc comme ça ?


function onEdit(e) {

  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let nbRows = sheet.getMaxRows();
var plage = sheet.getRange("C4:D5");
var cellules = ['C4', 'C5','D4', 'D5', 'G4', 'G5'];

  if (e.range.getA1Notation()!= "J2") {return;}
  if (e.value === "0"){     
    plage.clearContent(); 
    sheet.showRows(3); 
    sheet.getRangeList(cellules).clearContent();
      sheet.hideRows(4);
      sheet.hideRows(5);
           }else if (e.value === "4"){
            sheet.hideRows(3);
  sheet.showRows(4);
     sheet.showRows(5)}
}

Oui c'est parfait ! Merci beaucoup,

Par contre je n'arrive pas à aller chercher une valeur dans un autre onglet.

Par exemple : je souhaite masquer des lignes en fonction d'une valeur sur un autre onglet malgré les 'NOM DE L'ONGLET'(CELLULE)

y a t'il autre chose a faire ?

C'est le contraire, il faut déclarer l'onglet qui sera modifié, car la fonction onEdit travaille sur la feuille active...

Il suffit de remplacer A1 par les coordonnées de la cellule qui contient la valeur pour modifier ton tableau !

function onEdit(e) {

  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let nbRows = sheet.getMaxRows();
  const feuille = SpreadsheetApp.getActive().getSheetByName('AFFECTATIONS');
var plage = feuille.getRange("C4:D5");
var cellules = ['C4', 'C5','D4', 'D5', 'G4', 'G5'];

  if (e.range.getA1Notation()!= "A1") {return;}
  if (e.value === "0"){     
    plage.clearContent(); 
    feuille.showRows(3); 
    feuille.getRangeList(cellules).clearContent();
      feuille.hideRows(4);
      feuille.hideRows(5);
           }else if (e.value === "4"){
           feuille.hideRows(3);
  feuille.showRows(4);
     feuille.showRows(5)}
}
Rechercher des sujets similaires à "masquer afficher ligne fonction valeur macro"