Cellule remplie avec "0" considérée comme vide

Bonjour,

J'ai fait un script sur google sheets me permettant de déterminer la dernière case non vide d'une plage de données (colonne a : colonne b) pour par la suite faire des copier coller sur des feuilles différentes sans qu'il y ait trop de cellules vides entre les collages (peut-être pas le plus élégant ni le plus efficace, mais c'est compatible avec mon niveau de connaissances en programmation, et ça suffit à mes besoins, les plages de données faisant 25 cases maximum).

Cette fonction est appelée plusieurs fois par une autre programme que j'ai testé de plusieurs manières et tout fonctionne à une exception près. J'ai l'impression qu'il considère une case où il est entré "0" comme une cellule vide, faussant mon compteur dans ce cas. Y a-t-il moyen d'écrire différemment les conditions dans les if (val == "" ou val != "") pour que le 0 devienne une cellule remplie ?

function longueur (colonne, a, b, sh){
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName(sh), true);
  var compt = a;
  cellule = spreadsheet.getRange(colonne + compt);
  val = cellule.getValue();
  if (val == ""){
    return a;
  }
  while (compt < (b+1)){
    cellule = spreadsheet.getRange(colonne + compt);
    val = cellule.getValue();
    if (val != ""){
      compt++;
    }
    else return (compt-1);
  } 
}

Merci

Bonjour,

0 n'est pas égal à ""

Faites des logs voir si les cellules concernées sont bien testées, par exemple, après cette ligne :

cellule = spreadsheet.getRange(colonne + compt);

mettez : console.log(cellule.getA1Notation())

Ensuite dans les logs, vous devriez voir apparaitre toutes les cellules testées par votre script, les cellules contenant 0 sont elles bien testées ?

Si non, voyez pourquoi, si oui, mettez un nouveau log après le test, voir s'il est validé ou non.

Bonjour à tous,

0 n'est pas égal à ""

En fait, si

Dans ce cas, si val vaut 0 la condition est validée :

const val = 0;
console.log(val == ""); // Renvoie : true

Pour que la condition soit validée seulement si val vaut "" (et pas 0, false, null ou undefined), il faut utiliser === :

const val = 0;
console.log(val === ""); // Renvoie : false

Pour plus de détails à ce sujet :

https://www.sheets-pratique.com/fr/apps-script/conditions

Ah bon ? J'utilise === ou !== pour éviter ce genre de déconvenue, mais j'ai fais le test, en colonne A, des 0 et des 1

le script suivant :

function myFunction() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let data = sheet.getRange(1,1,sheet.getLastRow(),1).getValues();
  for(i=0;i<data.length;i++){
    console.log(data[i][0])
    if(data[i][0]!=""){
      sheet.getRange(i+1,2).setValue('différent de rien')
    }
  }
}

Avec l'opérateur de test != j'ai le résultat suivant :

image

Avec l'opérateur de test !== j'ai le résultat suivant :

image

Donc en effet, il faut systématiquement, sauf cas exceptionnel bien choisir son opérateur , @alnilman dans ton cas à tester :

function longueur (colonne, a, b, sh){
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName(sh), true);
  var compt = a;
  cellule = spreadsheet.getRange(colonne + compt);
  val = cellule.getValue();
  if (val === ""){
    return a;
  }
  while (compt < (b+1)){
    cellule = spreadsheet.getRange(colonne + compt);
    val = cellule.getValue();
    if (val !== ""){
      compt++;
    }
    else return (compt-1);
  } 
}

@alnilman : voici une version plus simple et plus rapide (et qui gère en plus le cas où aucune cellule vide n'existe dans la plage)

function longueur(colonne, a, b, sh){
  const ss = SpreadsheetApp.getActive().getSheetByName(sh); // Feuille
  const valeurs = ss.getRange(colonne + a + ':' + colonne + b).getValues().flat(); // Liste des valeurs de la plage
  const position = valeurs.indexOf(''); // Position du premier ''

  // Renvoie b si aucun '' / renvoie a si la première cellule est vide / sinon renvoie le numéro de ligne
  return position == -1 ? b : (position ? position + a - 1 : a);
}

Merci beaucoup à tous les deux pour vos réponses.

Merci aussi pour la version simplifiée du script, je vais essayer de la comprendre avant de l'utiliser. Il y a des mots clés que je n'ai encore jamais employé.

Rechercher des sujets similaires à "remplie consideree comme vide"