Macro / codage simple (sauf pour moi) sous Google sheet

Bonjour à tous,

Après avoir passé 15 jours à faire un fichier excel avec macro en bva, et en partant d'un niveau de compétence proche de 0, je viens de m'apercevoir qu'il était impossible de partager ce fichier en conservant le code via onedrive / dropbox / google ... sauf à passer par une version excel sur l'ordi.

Donc je repasse par mon premier amour, googlesheet ... mais mon niveau de compétence est identique (proche de 0 donc).

Donc voici mon fichier : https://docs.google.com/spreadsheets/d/1nO4ed0UEc8LrspDGltqQ8wffpCWLisHHUGx2ZIMQiW4/edit?usp=sharing

Ce que j'aimerais :
1- Quand je décoche B2, D2:F2 sont automatiquement décochés
2- Quand je coche B2, D2:F2 sont automatiquement cochés MAIS je dois pouvoir les décocher individuellement
3- Quand B2 est coché, B1 apparaît en vert et C1 en rouge et inversement quand B2 est décochée

J'ai essayé une macro, mais je ne sais pas coder. Et j'aimerais que la macro s'applique dès que B2 est décoché

Merci pour votre aide

Une petite âme charitable pour m'aider ?

Bonjour,

Je n'ai malheureusement pas le temps de me pencher sur ton problème mais voici tout de même un début de piste en passant :
https://forum.excel-pratique.com/sheets/cases-a-cocher-successives-136832

Et pour mettre en forme en fonction des cases à cocher, utilise une mise en forme conditionnelle.

Cordialement,

Déjà merci d'avoir pris le temps de me donner ce lien. N'étant pas développeur, j'essaye de bidouiller mais ça me sort un code assez dégueu ...

Concernant les mises à jour conditionnelles, pas de soucis à ce niveau là.

Concernant le script, j'ai tenté ça :

function onEdit(e) {
var f = SpreadsheetApp.getActiveSheet();
var a2 = f.getRange("$A2");
var d2 = f.getRange("$D2");
var e2 = f.getRange("$E2");
var f2 = f.getRange("$F2");
var b2 = f.getRange("$B2");
// Si B2 est coché et si B1 n'est pas coché
if (!b2.getValue() && d2.getValue()) {
d2.setValue('FALSE') && a2.setValue('REMPLIR');
}
if (!b2.getValue() && e2.getValue()) {
e2.setValue('FALSE');
}
if (!b2.getValue() && f2.getValue()) {
f2.setValue('FALSE');
}
if (d2.getValue() && !b2.getValue()) {
b2.setValue('TRUE');
}
}

Désormais quand je désactive B2 ====> D2:F2 se désactivent.
Quand n'importe quelle case en D2:F2 est activée ====> B2 est activée.

MAIS

Comme j'ai 45 lignes et 8 colonnes (ex : de D2 à K2), il me faudrait une boucle pour éviter d'avoir des centaines de lignes dans mon code
J'essaye de rajouter une condition : ajouter REMPLIR en case A2 si la case B2 est désactivée. J'y arrive, sauf si en A2 il y a une validation de données ...

Je pense que j'ai réussi ...

function onEdit(e) {

var feuille = SpreadsheetApp.getActiveSheet();
var colonneB
var colonneD
var colonneA

for (var i=1;i<5;i++) {
colonneB = feuille.getRange(i+1,2);
colonneA = feuille.getRange(i+1,1);
for (var j=3;j<6;j++) {
colonneD = feuille.getRange(i+1,j+1);

if (!colonneB.getValue()) {
colonneA.setValue('REMPLIR');
}

if (!colonneB.getValue() && colonneD.getValue()) {
colonneD.setValue('FALSE');
colonneA.setValue('REMPLIR');
}
}
}
}

Bon ... certes le code fonctionne mais je vois au moment de son déploiement quelles en sont les limites ...

1- il est vraiment très, très lent (plusieurs secondes pour décocher une croix ...)

2- parfois, il ne se déclenche pas du tout !

Je pense que le mieux serait de passer par un "select case" pour remplacer les boucles FOR (car dans mon exemple il n'y en aura que 2, mais en réalité j'en aurai plus de 10 par feuille) ... je l'avais fait dans mon fichier excel en VBA, mais là sur googlesheet je ne sais pas si ça existe ...

J'ai aussi essayer de passer par un var ligne = range.getRow (); pour éviter que la boucle ratisse toutes les lignes à chaque fois, mais je n'ai pas vu de gain de temps.

Donc, j'ai toujours besoin d'aide ...

Je copie le fichier modifié : https://docs.google.com/spreadsheets/d/1nO4ed0UEc8LrspDGltqQ8wffpCWLisHHUGx2ZIMQiW4/edit#gid=0

J'espère trouver de l'aide

function myFunction() {

};

function onEdit(e) {
var feuille = SpreadsheetApp.getActiveSheet();
var cours, joueurs, coach, motifannul
//var range = SpreadsheetApp.getActiveSheet().getActiveRange();
//var ligne = range.getRow();

for (var i=3;i<43;i++) {

for (var j=4;j<12;j++) {
cours = feuille.getRange(i,3);
coach = feuille.getRange(i,2);
motifannul = feuille.getRange(i,4);
joueurs = feuille.getRange(i,j+1);

if (!cours.getValue()) {
coach.setValue('REMPLIR');
}

if (cours.getValue()) {
motifannul.setValue('REMPLIR');
}

if (!cours.getValue() && joueurs.getValue()) {
joueurs.setValue('FALSE');
}
}

for (var j=16;j<24;j++) {
cours = feuille.getRange(i,15);
coach = feuille.getRange(i,14);
motifannul = feuille.getRange(i,16);
joueurs = feuille.getRange(i,j+1);

if (!cours.getValue()) {
coach.setValue('REMPLIR');
}

if (cours.getValue()) {
motifannul.setValue('REMPLIR');
}

if (!cours.getValue() && joueurs.getValue()) {
joueurs.setValue('FALSE');
}
}
}

}
Rechercher des sujets similaires à "macro codage simple sauf moi google sheet"