Listes interdépendantes via script sur google Sheet

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je suis relativement novice en script quand bien même je suis capable de comprendre un code. J’ai essayé d’adapté un code que j’ai trouvé sur le net , mais ça ne fonctionne pas et je ne trouve pas mon erreur, si vous pouviez me décoincer.

Voici mon code :

function onEdit(e) {
  // récupération des valeurs
  const range = e.range;
  const col = range.getColumn();
  const row = range.getRow();
  const value = range.getValue();
  // récupération de la feuille modifiée
  const source = e.source;
  const sourceId = source.getSheetId();
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetChoixId = ss.getSheetByName("Edition bon de commande").getSheetId();
// Si c'est bien la feuille choix qui héberge la modification
  if (sourceId == sheetChoixId) {
    if (row > 1) {
      // si c'est la col fournisseur (5) qui est sélectionnée, lancer la validation de données des produits dans la colonne 8
      if (col == 5) {
        dataValidation(row,8,"BDD Stock produits",value);
      }
    }
  }
}
function dataValidation(row, col, table, cle) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Edition bon de commande");
  const cellule = sheet.getRange(row, col);
  // initialisation de la liste
  let liste = [];
  if (cle != "") {
    liste = filtre(table, cle);
    const validation = SpreadsheetApp.newDataValidation().requireValueInList(liste).build();
    cellule.setDataValidation(validation);
  }
  else {
    cellule.clearDataValidations();
  }
}
function filtre(type, cle) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(type);
  const values = sheet.getDataRange().getValues();
  let filtre = [];
  values.map(function (row)
     {
     if (row[2] == cle && row[3] != null)
          {
             filtre.push(row[3]);
          }
      })
  return filtre;
}

Voici quelques captures d’écran des pages concernées Page Edition bon de commande

image.png
image.png

Page BDD Stock produits

image.png
image.png

Merci d’avance pour les échanges

Laura

+1 -0
function onEdit(e) {
/* .... */
  if (sourceId == sheetChoixId) {
    if (row > 1) {
      // si c'est la col fournisseur (5) qui est sélectionnée, lancer la validation de données des produits dans la colonne 8
      if (col == 5) {
        dataValidation(row,8,"BDD Stock produits",value);
      }
    }
  }
}

Dans la feuille "Edition bon de commande", la colonne Fournisseur est la colonne C donc col == 3
Lors de mes tests, j’avais construis la feuille de données sans trop faire attention à tes images

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte