Script Effacer ligne si checkbox cochée par bouton

Bonjour,

J'ai fait un script (non fonctionnel) et je ne vois pas où est mon erreur...

L'idée est de cocher des checkbox et ensuite on appuie sur un bouton pour effacer les lignes correspondante et la valeur de la case à cocher passe à false.

function deleteRowContents(){

  const fich = SpreadsheetApp.getActiveSpreadsheet();
  const fich_BDD = fich.getSheetByName("Base de données");

  const colAdata = fich_BDD.getRange("A:A").getValue();

  for(let i = colAdata.length-1;i >= 0;i--){
    if(colAdata[i][0] === true){
      fich_BDD.getRange(i,2,i,13).clearContent;
      fich_BDD.getRange(i,1).setvalue(false);
    }
  }
}

Qu'est que j'ai mal fait ?

les checkbox sont en colonne A2:A, ligne à effacer en B2:M

Quand j'exécute le script, rien ne se passe...

Bonjour,

  • sans avoir testé, ceci doit être au pluriel
const colAdata = fich_BDD.getRange("A:A").getValues();
  • i ne peut pas être égal à 0 dans getRange
  • et le 3ème paramètre ne doit pas être i mais 1
  • .clearContent() s'écrit avec des parenthèses (c'est une fonction, pas un attribut)

Je viens d'effectuer la correction mais, ça ne change rien.

Je pense que c'est un problème dans ma boucle, mais je ne vois pas lequel.

oui il y a d'autres erreurs :

  • clearContent() s'écrit avec des parenthèses (c'est une fonction, pas un attribut)
  • setValue() et non setvalue(), V en majuscule

ceci fonctionne

function deleteRowContents(){

  const fich = SpreadsheetApp.getActiveSpreadsheet();
  const fich_BDD = fich.getSheetByName("Base de données");

  const colAdata = fich_BDD.getRange("A:A").getValues();

  for(let i = colAdata.length-1;i >= 0;i--){
    if(colAdata[i][0] === true){
      console.log(i)
      fich_BDD.getRange(i+1,2,1,13).clearContent();
      fich_BDD.getRange(i+1,1).setValue(!fich_BDD.getRange(i+1,1).getValue());
    }
  }
}

la boucle n'est pas en cause, mais comme tu ne supprimes pas de ligne, tu pouvais la faire à l'endroit !

ceci fonctionne aussi

fich_BDD.getRange(i+1,1).setValue(false);

j'avais changé croyant que ta feuille était configurée en oui/non, mais c'est setvalue sans V majuscule qui plantait aussi

Merci, ok, je comprends mes erreurs.

Cependant je ne comprends pas le setValue...

Je l'ai refaite à l'endroit du coup. Il y a une règle à respecter pour le sens de la boucle ?

function deleteRowContents(){

  const fich = SpreadsheetApp.getActiveSpreadsheet();
  const fich_BDD = fich.getSheetByName("Base de données");

  const colAdata = fich_BDD.getRange("A:A").getValues();

  for(let i = 0;i <= colAdata.length-1;i++){
    if(colAdata[i][0] === true){
      console.log(i)
      fich_BDD.getRange(i+1,2,1,12).clearContent();
      fich_BDD.getRange(i+1,1).setValue(false);
    }
  }
}

Merci, ok, je comprends mes erreurs.

Cependant je ne comprends pas le setValue...

V avec majuscule setValue et non setvalue !!

Je l'ai refaite à l'endroit du coup. Il y a une règle à respecter pour le sens de la boucle ?

pas dans ce cas,

mais si tu supprimes la ligne, alors l'indice suivant i risque de supprimer la mauvaise ligne car toutes les lignes auront été remontées suite à la suppression de l'une d'elles, c'est pour cela qu'en cas de suppression, il faut d'abord supprimer les dernières

Ok, merci pour l'info :)

Rechercher des sujets similaires à "script effacer ligne checkbox cochee bouton"