La date en dehors de l'intervalle doit être refusé

Bonjour les membres! je cherche encore la solution pour ma casse tête

J'aimerais que la date entrée sera refusé si elle est en dehors de l'année et le mois sélectionné.

Par exemple: si je choisi l'année 2025 et mois de janvier, c'est la date entre 1er janvier 2025 à 31 janvier 2025 doit être accepté!

https://docs.google.com/spreadsheets/d/1YgYi39onkfAHkrzWII3cldyLjCQDNwgig6dRpc3vkTA/edit?gid=6743391...

Merci d'avance à vous!

Salut,

2 solutions :

- simple avec une MFC, qui met en rouge quand la date n'est pas valide

- complexe, avec un script qui bloque si la date n'est pas valide

pouvez vous m'aidé sur la deuxième solution s'il vous plaît?? je suis débutante en google sheet

Merci d'avance

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
  }
}

je vous remercie! je vais tester et je vous ferais un retour!

Merci beaucoup, ça marche, ça me fait progresser sur le projet!

Rechercher des sujets similaires à "date dehors intervalle doit etre refuse"