Décocher une case en en cochant une autre

Bonjour,

Tout est dit :)

Je cherche simplement comment décocher une case en en cochant une autre dans un tableur Google Sheets.

Si vous avez une astuce/solution je suis preneur.

Cordialement,

Bonjour,

Mets ça en A2 (par exemple), le fait de cocher ou décocher la cellule en B2 modifiera A2 :

=SI(B2=VRAI;FAUX;VRAI)

Cordialement,

Fil.

coche

Bonsoir ,

et merci pour ce retour rapide.

En fait je souhaite pouvoir décocher les cases noires en cliquant sur la case verte.

Sauf qu'ensuite si je décoche la verte les noires se recochent.

Le but recherché étant :

1er temps : cocher les cases noires

2eme temps : cocher la case verte pour decocher les noires.

3eme temps : je decoche la case verte et les cases noires restent décochées.

Et ensuite je repasse à l'étape 1 et ainsi de suite.

Est-ce faisable?

En fait, tu veux un bouton pour réinitialiser les cases à cocher ?

je pense que ça doit être possible avec un script.

C'est tout a fait ça :)

Bonjour,

Voici ce script :

function onEdit(e) {
  const ss = SpreadsheetApp.getActiveSpreadsheet(); 
  const sheet = ss.getSheetByName("Feuille 1"); // nom de la feuille, à modifier

  var range = e.range;
  var caseMaitresse = sheet.getRange("A1"); // case maitresse à modifier
  var casesEsclaves = sheet.getRange("A10:A15").getValues(); // cases esclaves à modifier
  if (range.getA1Notation() === caseMaitresse.getA1Notation() && range.getValue() === true){
    for (i=0;i<casesEsclaves.length;i++){
      sheet.getRange(10+i,1).setValue(false) // plage des cases esclaves à modifier
    }
  } 
}
image image

Bonjour et merci bien pour ce retour :)

J'ai une erreur à l'exécution, j'ai un doute sur ma saisie en ligne 10.

Tout le reste est OK normalement.

Cordialement,

Le script a besoin d'une modification sur la page pour fonctionner, il n'est pas prévu pour fonctionner dans la console.

Tentez de cocher la case en B3 et voyez si ça fonctionne.

image image

Du coup là avec le script en l'état en cliquant en B3 ça ne décoche plus celles du dessous.

De même si je clique en B13 par exemple ça ne décoche pas B3.

Vous avez mal modifié cette ligne :

      sheet.getRange(10+i,1).setValue(false) // plage des cases esclaves à modifier

Il faut mettre dans votre cas :

      sheet.getRange(13+i,2).setValue(false) // plage des cases esclaves à modifier

c'est la location de la plage à passer en "faux", dans votre cas elle débute à B13, soit la 13ème ligne, 2 ème colonne.

Au top les explications je comprend mieux, Merci beaucoup!

Du coup désormais ça fonctionne, cependant B3 reste coché.

Est-ce possible qu'une fois qu'on l'ai coché et que du coup les autres se soient décochés B3 se décochent également ?

Oui bien sûr, une fois la boucle terminée il faut ajouter une ligne afin de rendre la variable caseMaitresse FAUX :

caseMaitresse.setValue(false);

Il faut bien positionner cette ligne dans la condition if et après l'itération for.

Si je reprends le script inital :

function onEdit(e) {
  const ss = SpreadsheetApp.getActiveSpreadsheet(); 
  const sheet = ss.getSheetByName("Feuille 1"); // nom de la feuille, à modifier

  var range = e.range;
  var caseMaitresse = sheet.getRange("A1"); // case maitresse à modifier
  var casesEsclaves = sheet.getRange("A10:A15").getValues(); // cases esclaves à modifier
  if (range.getA1Notation() === caseMaitresse.getA1Notation() && range.getValue() === true){
    for (i=0;i<casesEsclaves.length;i++){
      sheet.getRange(10+i,1).setValue(false) // plage des cases esclaves à modifier
    }
caseMaitresse.setValue(false);
  } 
}

Au top ça fonctionne parfaitement merci !

Une dernière petite chose,

Dans la plage de données sélectionnées, les cellules ou il n'y a pas de case à cocher affiche FAUX.

Est-ce possible qu'elles restent vides ?

image

En ajoutant une vérification si la plage est vide, c'est faisable.

Dans la boucle for, il ne faut plus modifier la valeur de la case :

        sheet.getRange(10+i,1).setValue(false)

Il faut vérifier si elle est vide avant :

if(sheet.getRange(10+i,1).isBlank() !== true){
        sheet.getRange(10+i,1).setValue(false)

(dans votre version, remplacez 10+i,1 par 13+i,2)

J'ai trouvé l'exécution de ce script un peu lent, il fait chez moi 1,83 sec.

Voici une alternative faisant 1,12 sec :

function onEdit(e) {
  const ss = e.source;
  const sheet = ss.getSheetByName("Feuille 1");
  const range = e.range;

  if (range.getA1Notation() === "A1" && range.isChecked()) {
    // La case A1 a été cochée (isChecked)
    const esclaves = sheet.getRange("A10:A15").getValues();

    for (var i = 0; i < esclaves.length; i++) {
      if (esclaves[i][0] !== "") {
        sheet.getRange(10 + i, 1).uncheck();
      }
    }
    range.uncheck();
  }
}
image image

Du coup j'ai complété, le script fonctionne toujours mais les FAUX persistent à s'afficher.

Il faut les supprimer et ils ne s'y mettront plus normalement, mais vous devriez utiliser le 2nd script, plus efficace et au lieu d'insérer false il dé-checkles cases, donc si pas case, pas de souci.

Ah oui je n'avais pas vu votre seconde réponse !

Du coup je l'ai remplacé cependant les FAUX persistent.

image

Si vous les supprimez et que vous cliquer sur la case en B3 les FAUX se remettent ?

Rechercher des sujets similaires à "decocher case cochant"