Liste entre 2 dates

Bonjour,

J'aimerai trouver un moyen si ce n'est pas trop compliqué via un bouton d'avoir une liste de tous les jours compris entre 2 dates. Et que cette liste se complète au fur et à mesure sans rien ecraser.

Je m'explique, si le choisis le 01/06 et le 05/06, je voudrais avoir une liste des jours du 01 au 05, mais que si je répète cette opération une seconde fois : du 05/07 au 08/07 par ex. Et au final avoir une liste des jour du 01/06 au 05/06 et du 05/07 au 08/07

Merci d'avance

Salut,

Voici une solution :

https://docs.google.com/spreadsheets/d/1PKn1GV8aYChRUWSb-ckyViFI4A1hw8jWUgwWtuCjixY/edit?gid=0#gid=0

Tu peux aller voir le script "brut" dans le fichier, voici ci-dessous le script documenté :

/**
 * Génère une liste déroulante contenants des dates (début en C5 / fin en F5)
 * Vérification si les dates sont bien valides et si elles ne sont pas déjà dans la liste
 */
function generateDD() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // feuille active.
  const dateStart = new Date(sheet.getRange('C5').getValue()); // date de début cellule C5.
  const dateEnd = new Date(sheet.getRange('F5').getValue()); // date de fin cellule F5.
  const dropdown = sheet.getRange('D12'); // cellule D12 liste déroulante.

  if (isNaN(dateStart) || isNaN(dateEnd)) {// Vérifie si les dates sont valides.
    console.error("Dates invalides : date début = " + dateStart + " / date fin = " + dateEnd); // erreur en cas de dates non valides.
    return;
  }

  let dates = []; // tableau pour stocker les dates qui seront mis dans la liste
  for (i = new Date(dateStart); i <= dateEnd; i.setDate(i.getDate() + 1)) { // boucle pour générer chaque date entre dateStart et dateEnd.
    dates.push(Utilities.formatDate(i, Session.getScriptTimeZone(), "dd/MM/yyyy")); // Ajoute chaque date formatée au tableau dates.
  }

  let precedentsValues = dropdown.getDataValidation()?.getCriteriaValues()?.[0] || [];// Récupère les dates de la liste déroulante actuelle (si existantes).
  let newValues = [...new Set([...precedentsValues, ...dates])];// Combine les valeurs existantes et les nouvelles dates tout en évitant les doublons (à l'aide de Set).

  dropdown.setDataValidation(// créé la liste déroulante
    SpreadsheetApp.newDataValidation()
      .requireValueInList(newValues, true) 
      .setAllowInvalid(false) 
      .build()
  );

  SpreadsheetApp.getUi().alert(`Dates ajoutées, il y a maintenant : ${newValues.length} dates dans la liste déroulante.`);
}

Merci beaucoup, mais je me suis peut-être mal exprimé.

En fait ce n'est pas d'un liste déroulante que j'ai besoin mais juste de les stocker sur une autre feuille ou colonne de la même feuille car j'aimerai pouvoir me servir de ces valeur pour d'autres utilisations.

Et maintenant que j'y pense, ce serait super qu'en plus des dates, si le script pouvais me permettre de récupérer le texte d'une liste déroulante et de stocker le texte de la liste déroulante sur une colonne et la date sur la seconde.

Sinon , tant pis je ferais plusieurs boutons.

Script à jour, tu peux aller tester sur le fichier, voici le script :

function generateDD() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dateStart = new Date(sheet.getRange('C3').getValue());
  const dateEnd = new Date(sheet.getRange('C5').getValue());
  const text = sheet.getRange('C7').getValue();
  const lastRow = sheet.getLastRow();

  if (isNaN(dateStart.getTime()) || isNaN(dateEnd.getTime())) {
    console.error("Dates invalides : date début = " + dateStart + " / date fin = " + dateEnd);
    return;
  }

  let data = [];
  for (let i = new Date(dateStart); i <= dateEnd; i.setDate(i.getDate() + 1)) {
    const formattedDate = Utilities.formatDate(i, Session.getScriptTimeZone(), "dd/MM/yyyy");
    data.push([formattedDate, text]);
  }
  sheet.getRange(lastRow+1,5,data.length,data[0].length).setValues(data)
}
Rechercher des sujets similaires à "liste entre dates"