Planning hebdomadaire aléatoire

Bonjour,

Je cherche une aide pour un planning hebdomadaire généré aléatoirement par un bouton.
Avec pour contrainte un employé affecté à un poste différent chaque jour de la semaine.

https://docs.google.com/spreadsheets/d/1B0Wglqr3A5yTZitZqTYUeqlNtgQo2tKEp1X07do9KnQ/edit?usp=sharing

Par avance merci de l'aide.

Salut !

Va voir dans l'onglet "test auto remplissage" j'ai fait une démo.

À partir de la liste des personnes en K7:K12 les lignes 7,8,9,10,11,13 (rien en 12) se remplissent de manière aléatoire.
Si jamais tu as une personne à ajouter, simple, dans le script (ci-dessous) tu modifie K7:K12 par K7:K13, puis, il faut créer une place suppélemaire dans chaque jour (il faut pour chaque jour, avoir le même nombre d'emplacements que d'employés).

Si tu as besoin de plus d'explication, je reste à l'écoute.

function randomizePlanning() {
  const feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var employees = feuille.getRange("K7:K12").getValues().flat(); // Liste des employés
  const jours = [
    ["D7", "D8", "D9", "D10", "D11", "D13"], // Jour 1
    ["E7", "E8", "E9", "E10", "E11", "E13"], // Jour 2
    ["F7", "F8", "F9", "F10", "F11", "F13"], // Jour 3
    ["G7", "G8", "G9", "G10", "G11", "G13"], // Jour 4
    ["H7", "H8", "H9", "H10", "H11", "H13"]  // Jour 5
  ];

  jours.forEach(jour => {
    let shuffledEmployees = [...employees];    // Mélanger les employés
    for (let i = shuffledEmployees.length - 1; i > 0; i--) {
      let j = Math.floor(Math.random() * (i + 1));
      [shuffledEmployees[i], shuffledEmployees[j]] = [shuffledEmployees[j], shuffledEmployees[i]];
    }
    jour.forEach((cell, index) => {    feuille.getRange(cell).setValue(shuffledEmployees[index])});// Insérer les employés mélangés dans la plage définie
  });
}

EDIT ! Je n'avais pas vu que tu voulais qu'une personne ne soit pas 2 jours au même poste, voici une proposition de résolution : J1 = aléatoire, puis, rotation circulaire les jours suivants, j'ai mis à jour le script :

function randomizePlanning() {
  const feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const employees = feuille.getRange("K7:K12").getValues().flat(); // Liste des employés
  const jours = [
    ["D7", "D8", "D9", "D10", "D11", "D13"], // Jour 1
    ["E7", "E8", "E9", "E10", "E11", "E13"], // Jour 2
    ["F7", "F8", "F9", "F10", "F11", "F13"], // Jour 3
    ["G7", "G8", "G9", "G10", "G11", "G13"], // Jour 4
    ["H7", "H8", "H9", "H10", "H11", "H13"]  // Jour 5
  ];

  for (let i = employees.length - 1; i > 0; i--) {  // Mélanger aléatoirement pour le premier jour
    let j = Math.floor(Math.random() * (i + 1));
    [employees[i], employees[j]] = [employees[j], employees[i]];
  }
  jours.forEach((jour, dayIndex) => {  // Remplir les jours avec une rotation des postes
    let shiftedEmployees = employees.map((_, i) => employees[(i + dayIndex) % employees.length]);
    jour.forEach((cell, index) => {feuille.getRange(cell).setValue(shiftedEmployees[index]);});
  });
}
Rechercher des sujets similaires à "planning hebdomadaire aleatoire"