Comment décocher automatiquement si on coche une autre case ?

Bonjour,

Je travaille sur une matrice de diagramme de Gantt pour une association d'évènementiel. J'aimerais y intégrer une fonctionnalité "A faire/En cours/Fait" pour chaque tâche avec des cases à cocher.

capture

Voici le résultat que j'aimerai obtenir :

- Aucune case cochée par défaut,

- Toutes les cases pouvant être cochées et décochées manuellement (fonctionnalité que je n'arrive pas à conserver en entrant des formules que j'ai pu essayer),

- Si une case est cochée et qu'on en coche une autre sur la même ligne, l'autre se décoche automatiquement (exemple : A1 est cochée, je coche B1 manuellement et A1 se décoche automatiquement).

Ainsi les configurations des lignes 5, 6 et 7 ne seraient pas possible car une seule case maximum pourrait être cochée simultanément.

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

Merci d'avance si vous avez une solution !

Bonne journée.

Bonjour,

Voici un script :

function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  const row = range.getRow();
  const col = range.getColumn();
  if(range.getDataValidation().getCriteriaType()==SpreadsheetApp.DataValidationCriteria.CHECKBOX){
    const values = sheet.getRange(row, 1, 1, 3).getValues()[0];
    for (let i = 0; i < values.length; i++) {
      if (i + 1 != col && values[i] === true) {
        sheet.getRange(row, i + 1).uncheck();
      }
    }
  }
}

Bonjour,

Merci pour la réponse, cependant je n'ai aucune idée de comment fonctionne Apps Script... Quelles manipulation dois-je effectuer pour intégrer ce script à ma feuille de calcul ?

Bonjour,

Il faut aller dans Extensions > Apps Script, copier/coller le script, enregistrer.

Voici au besoin un tutoriel : https://www.sheets-pratique.com/fr/apps-script/introduction

Bonjour,

En effet ça fonctionne sur le fichier d'exemple que j'avais créé pour la demande, mais lorsque je l'intègre dans mon fichier de travail ça ne fonctionne plus... J'imagine que le script cible une plage ou une zone en particulier ? Que dois-je changer dedans pour cibler ma zone concernée ?

Vos cases à cocher sont-elles en A,B,C ?

Non, en F,G,H

Il faut modifier ainsi :

function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  const row = range.getRow();
  const col = range.getColumn();
  if(range.getDataValidation().getCriteriaType()==SpreadsheetApp.DataValidationCriteria.CHECKBOX){
    const values = sheet.getRange(row, 6, 1, 3).getValues()[0];
    for (let i = 0; i < values.length; i++) {
      if (i + 1 != col && values[i] === true) {
        sheet.getRange(row, i + 1).uncheck();
      }
    }
  }
}

ça ne fonctionne pas... Pour information la première case à cocher se trouve en F4 de ma troisième feuille de calcul, je ne sais pas si ça change quelque chose ? Ou peut-être qu'il faut intégrer le nom de ma feuille de calcul quelque part dans le script ?

Bonjour,

J'ai décalé les colonnes dans la prise d'information, mais pas dans le décochage, voici version corrigée :

function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  const row = range.getRow();
  const col = range.getColumn();
  if(range.getDataValidation().getCriteriaType()==SpreadsheetApp.DataValidationCriteria.CHECKBOX){
    const values = sheet.getRange(row, 6, 1, 3).getValues()[0];
    for (let i = 0; i < values.length; i++) {
      if (i + 1 != col && values[i] === true) {
        sheet.getRange(row, i+6).uncheck();
      }
    }
  }
}
Rechercher des sujets similaires à "comment decocher automatiquement coche case"