Case à décocher automatiquement

Bonjour tout le monde;

Je n'ai aucune base en script ou autre code mais j'essaie toujours d'optimiser mes tableurs.

En cherchant à automatiser une action, sans succès, je suis tombé sur votre forum ma foi fort intéressant.

Je vous expose mon problème :

J'ai un tableur nouvellement créé qui prendre pour base un autre tableur (importrange des colonnes B, C, D). Jusque là, tout va bien.

J'ai ajouté des colonnes de cases à cocher (de E à L). Le but est de cocher la case si l'action a été réalisée.

Ce que je veux, c'est que les cases des colonnes E à L se décochent automatiquement sur la colonne D est vide. Ce qui sous entend qu'on a supprimé cette valeur du tableur d'origine.

J'ai demande à ChatGPT qui m'a proposé ceci :

function onEdit(e) {
  var sheet = e.source.getSheetByName('TEST Formations TEST'); // Remplacez 'Nom_de_votre_feuille' par le nom de votre feuille

  // Vérifiez si la modification a eu lieu dans la plage D3:D202
  var range = e.range;
  if (range.getRow() >= 3 && range.getRow() <= 202 && range.getColumn() == 4) {
    // Obtenez la valeur de la cellule modifiée
    var cellValue = range.getValue();

    // Si la cellule est vide, décochez les cases à cocher dans la ligne correspondante
    if (cellValue === "") {
      var rowNumber = range.getRow();
      sheet.getRange(rowNumber, 5, 1, 8).setValue(false);
    }
  }
}

Le code ne semble pas fonctionner et je ne sais pas où se trouve le problème. Pouvez-vous m'aider ?

Bien à vous;

Orphee

Bonjour,

Donc, si je comprends bien :

un premier tableau contient des données.

un second tableau (TEST Formations TEST) importe les colonnes B,C,D du 1er tableau.

colonnes E:L il y a des cases à cocher (initialement décochées).

Vous souhaitez que si l'importrange cesse d'importer par exemple la ligne 10 car la ligne a été supprimé du 1er fichier, les cases situées en E10:L10 soient automatiquement décochées ?

Oui. Le tableau initiale a les données de base. Donc si on met ce tableau à jour, le TEST Formations TEST doit également se mettre à jour.

D'accord, je pense qu'il faut faire autrement qu'importrange, on a des soucis avec le traitement des données importées et la synchronisation de celles-ci.

Ce que vous pouvez faire c'est un script qui ou bien à jour / heure fixe, ou bien à l'ouverture, importe les nouvelles données, supprime les obsolètes.

Pour ce faire, y a-t-il une clé, id, référence permettant d'identifier les lignes ?

Je ne sais pas du tout. Qu'est-ce-qu'une clé ID ?

Comment faire pour que la formule / ou script, sache quel ligne il faut supprimer ?

Je ne sais pas du tout.

Ceci étant, on a décidé de simplifier la chose en ne restant que sur un seul document.

Je vais tester comme ça et je reviendrais si je rencontre le même problème.

ce que vous pouvez faire, très simplement, c'est un colonne "terminé" avec des cases à cocher, puis vous faites un filtre sur lequel vous n'affichez pas les case cochées, comme cela vous avez que vos lignes ouvertes d'affichées.

Il est aussi possible d'avoir un script qui masque automatiquement une ligne dès qu'elle est cochée si besoin.

Ce n'est pas vraiment ce que je veux faire.

Je voulais qu'une ligne change de couleur si des conditions ne sont pas remplies.

Mais en travaillant sur unique document, j'ai réussi (merci ChatGPT).

Merci beaucoup de vos retours PierreLepinay.

Bonjour,

Peux-tu partager la solution trouvée et clôturer le sujet, stp ?

Il est possible que cela puisse aider un autre forumeur.

Merci,

Bonne journée,

Fil.



Oui, bien sûr :

Voici le script que ChatGPT m'a développé pour répondre à ma demande de mettre en évidence des lignes qui n'avaient pas les conditions requises en fonction de la valeur d'une cellule par rapport à des cases cochées ou non :

function onEdit(e) {
  var sheet = e.source.getSheetByName('Référencement');
  var range = e.range;
  var rowNumber = range.getRow();

  if (
    sheet.getName() === 'Référencement' &&
    range.getColumn() === 4 &&
    rowNumber >= 3 &&
    rowNumber <= 202
  ) {
    var valueD = range.getValue();

    if (valueD === "") {
      sheet.getRange(rowNumber, 22, 1, 10).setValue(false);
    }
  }

  if (
    sheet.getName() === 'Référencement' &&
    range.getColumn() === 3 &&
    rowNumber >= 3 &&
    rowNumber <= 202
  ) {
    var valueC = range.getValue();

    var valueV = sheet.getRange(rowNumber, 22).getValue();
    var valueW = sheet.getRange(rowNumber, 23).getValue();
    var valueX = sheet.getRange(rowNumber, 24).getValue();
    var valueAB = sheet.getRange(rowNumber, 28).getValue();
    var valueAC = sheet.getRange(rowNumber, 29).getValue();
    var valueY = sheet.getRange(rowNumber, 25).getValue();
    var valueZ = sheet.getRange(rowNumber, 26).getValue();

    if (
      (valueC.includes("OFF-I") ||
        valueC.includes("OFF-II") ||
        valueC.includes("OFF-III") ||
        valueC.includes("OFF-S") ||
        valueC.includes("SGT-I") ||
        valueC.includes("SGT-II") ||
        valueC.includes("LTN-I") ||
        valueC.includes("LTN-II") ||
        valueC.includes("LTN-III") ||
        valueC.includes("CPT-I") ||
        valueC.includes("CPT-II") ||
        valueC.includes("CPT-III") ||
        valueC.includes("CMDR") ||
        valueC.includes("CHIEF-ADJ") ||
        valueC.includes("CHIEF") ||
        valueC.includes("CD")) &&
      !(valueV && valueW && valueX)
    ) {
      sheet.getRange(rowNumber, 2, 1, 17).setBackground('#800080'); // Changement jusqu'à la colonne Q
    } else if (
      (valueC.includes("OFF-II") ||
        valueC.includes("OFF-III") ||
        valueC.includes("OFF-S") ||
        valueC.includes("SGT-I") ||
        valueC.includes("SGT-II") ||
        valueC.includes("LTN-I") ||
        valueC.includes("LTN-II") ||
        valueC.includes("LTN-III") ||
        valueC.includes("CPT-I") ||
        valueC.includes("CPT-II") ||
        valueC.includes("CPT-III") ||
        valueC.includes("CMDR") ||
        valueC.includes("CHIEF-ADJ") ||
        valueC.includes("CHIEF") ||
        valueC.includes("CD")) &&
      !valueY
    ) {
      sheet.getRange(rowNumber, 2, 1, 17).setBackground('#800080'); // Changement jusqu'à la colonne Q
    } else if (
      (valueC.includes("OFF-S") ||
        valueC.includes("SGT-I") ||
        valueC.includes("SGT-II") ||
        valueC.includes("LTN-I") ||
        valueC.includes("LTN-II") ||
        valueC.includes("LTN-III") ||
        valueC.includes("CPT-I") ||
        valueC.includes("CPT-II") ||
        valueC.includes("CPT-III") ||
        valueC.includes("CMDR") ||
        valueC.includes("CHIEF-ADJ") ||
        valueC.includes("CHIEF") ||
        valueC.includes("CD")) &&
      !(valueAB && valueAC)
    ) {
      sheet.getRange(rowNumber, 2, 1, 17).setBackground('#800080'); // Changement jusqu'à la colonne Q
    } else if (
      (valueC.includes("LTN-I") ||
        valueC.includes("LTN-II") ||
        valueC.includes("LTN-III") ||
        valueC.includes("CPT-I") ||
        valueC.includes("CPT-II") ||
        valueC.includes("CPT-III") ||
        valueC.includes("CMDR") ||
        valueC.includes("CHIEF-ADJ") ||
        valueC.includes("CHIEF") ||
        valueC.includes("CD")) &&
      !valueZ
    ) {
      sheet.getRange(rowNumber, 2, 1, 17).setBackground('#800080'); // Changement jusqu'à la colonne Q
    } else {
      sheet.getRange(rowNumber, 2, 1, 17).setBackground(null); // Réinitialise la couleur de fond de la colonne B à Q
    }
  }
}

Je précise que c'est pour un serveur RP (j'ai le rôle d'un policier).

Je pense qu'il sera peaufiner avec le temps mais pour le moment il répond à ma demande.

Bien à vous.

Merci !

Rechercher des sujets similaires à "case decocher automatiquement"