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]);});
});
}