Salut,
C'est bon, tu peux tester, le script est accessible en brut et voici une version documentée :
/**
* Fonction qui se lance à chaque modification.
* @param {Object} e - l'objet de la modification
*/
function onEdit(e) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // feuille où a eu lieu la modif.
const col = e.range.getColumn(); // numéro de la colonne modifiée
const row = e.range.getRow(); // numéro de la ligne modifiée
const year = sheet.getRange(row, 1).getValue(); // année début
var month = sheet.getRange(row, 2).getValue(); // année fin
const dateToTest = new Date(e.range.getValue()); // on créé un objet avec la date saisie par l'user
const range = e.range; // on stocke l'endroit où cette date est saisie
if (col === 3 && year && month) { // on vérifie si la modificaiton a eu lieu col3 et si l'année et le mois sont saisis
checkDate(dateToTest, year, month, range); si oui, on lance checkDate
}
}
/**
* Vérifie si la date saisie est dans le mois et l'année.
* Si la date est invalide, la cellule est vidée et un message d'erreur est affiché.
*
* @param {Date} dateToTest - La date saisie par l'utilisateur à tester.
* @param {number} year - L'année dans la colonne A.
* @param {string} month - Le mois dans la colonne B (en texte).
* @param {Object} range - La range de la date saisie.
*/
function checkDate(dateToTest, year, month, range) {
const months = { // dictionnaire pour lier les mois sous format texte à des mois format nombre
"janvier": 1,
"février": 2,
"mars": 3,
"avril": 4,
"mai": 5,
"juin": 6,
"juillet": 7,
"août": 8,
"septembre": 9,
"octobre": 10,
"novembre": 11,
"décembre": 12
};
month = months[month]; // Convertit le mois en texte en un numéro de mois
const startDate = new Date(year, month - 1, 1);// Crée une date pour le premier jour du mois + année
const endDate = new Date(year, month, 0); // Crée une date pour le dernier jour du mois + année
if (dateToTest >= startDate && dateToTest <= endDate) { on vérifie si la date saisie est entre la date début et date fin
return; // Si la date est valide, on ne fait rien
} else {
Browser.msgBox("Date invalide ! La date doit être dans l'année et le mois choisi.");// Si la date est hors de la plage, on affiche un message d'erreur
range.clearContent(); // Efface le contenu de la date
}
}