Validation de données automatique

Bonjour!

j'ai un fichier de gestion des tâches, certaines colonne doivent contenir des listes déroulantes, j'aimerais faire en sorte qu'une liste déroulante apparaisse à chaque fois qu'on rajoute une tâche en dessous des précédentes.

J'ai beau tourner et retourner le problème, je ne vois que le script, mais je suis perdu.

https://docs.google.com/spreadsheets/d/1enl5Gn9qdby18JlUhLYzV8I-W3WTg2MncJzNZZFb3Uo/edit?usp=sharing

Pouvez vous m'aider?

Bonjour toutes et tous

une idée, avec l'enregistreur de macro de GoogleSheets

dans macro.gs 1/ copiez ci-dessous, puis 2/ enregistrer et 3/ tester dans macro ou en utilisant les touches de raccourcis suivantes CTRL+ALT+MAJ+1


note : la formule du Sparkline ne sera pas copier sur la nouvelle ligne, ce que je vois à l'instant mais les 3 listes déroulantes sont opérationnelles

function Ajoutligneok() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('3:3').activate();
  spreadsheet.getActiveSheet().insertRowsAfter(spreadsheet.getActiveRange().getLastRow(), 1);
  spreadsheet.getActiveRange().offset(spreadsheet.getActiveRange().getNumRows(), 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
};

crdlt,

André

Bonjour!

merci pour le point de départ, voici le code qui permet d'ajouter des listes de validation (et un selecteur de date) dans des cellules d'une ligne si une cellule de la ligne n'est pas vide (il faut ajouter un déclencheur si on veut que ça se fasse à chaque modification). Ici ça me sert pour un fichier de gestion des tâches, quand on ajoute une tâche le script vient positionner les listes déroulantes pour l'affectation de la tâche, sa priorité, son échéance et son état d'avancement.

/** @OnlyCurrentDoc */
function listes() {
  const SHEETS_NAMES = ['Feuille 1','Feuille 2'];
  const SS = SpreadsheetApp.getActive();
  const LISTS = [['Kurt','Jimi','Janis','Jim','Amy','Robert','Brian'],['Normale', 'Élevée', 'Faible'],['Pas commencée', 'En cours', 'Terminée']]
  const COLUMNS = [2,3,5];
  const DATE = 4

  function *zip( ...iterables ) {
    const inputs = iterables.map( iterator => Array.isArray( iterator ) ? iterator : Array.from( iterator ) );
    const size = Math.min( ...inputs.map( i => i.length ) );
    for (let i = 0; i < size; i++) {
      yield inputs.map( input => input[i] );
    }
  }

  for (n in SHEETS_NAMES) {
    let sheet = SS.getSheetByName(SHEETS_NAMES[n]);
    SpreadsheetApp.setActiveSheet(sheet);
    let range = sheet.getRange('A3:F');
    let values = sheet.getRange('A3:A').getValues();

    for (let i = 1; i < values.length-1; i++) {
      let task = range.getCell(i,1);
      let list = range.getCell(i,2);

      if (task.isBlank() == false && list.isBlank()) {
        for (const entry of zip(COLUMNS, LISTS)) {
          range.getCell(i,entry[0]).activate();
          range.getCell(i,entry[0]).setDataValidation(SpreadsheetApp.newDataValidation()
          .setAllowInvalid(true)
          .requireValueInList(entry[1], true)
          .build());

        range.getCell(i,DATE).activate();
        range.getCell(i,DATE).setDataValidation(SpreadsheetApp.newDataValidation()
        .setAllowInvalid(true)
        .requireDate()
        .build());
        }
      }
    }
  }
}

Je vais encore l'optimiser pour que le script récupère les feuilles automatiquement mais sinon ça marche niquel.

Bonne fin de week-end

Rechercher des sujets similaires à "validation donnees automatique"