Dernière ligne d'une feuille après filtre

Bonjour à tous,

j'utilise la formule

a = sheet1.getlastrow

pour déterminer la dernière ligne non vide de ma feuille sheet1 (pour le cas a = 81).

J'applique par la suite un filtre dans ma feuille sheet1 sur la colonne "C". Après le filtre, les données sont regroupées sur 22 lignes.

Dans la suite de mon code j'essaye de trouver à nouveau la dernière ligne de ma feuille sheet1 après que le filtre soit appliqué. pour cela j'ai réessayé la formule

a = sheet1.getlastrow

mais la syntaxe me renvoie toujours a = 81 au lieu de a = 22 comme cela est le cas après avoir appliqué le filtre.

quelqu'un aurait-il une idée pour avoir la valeur de la dernière ligne non vide ma feuille après avoir a appliqué le filtre svp ?

En vous remerciant par avance.

Bonjour,

Tu as toujours le même nombre de données, juste, certaines sont masquées, par ton filtre.

Si tu veux le bon nombre, il faudrait filtrer dans ton script directement, ou bien compter le nombre de ligne masquées et retirer ce nombre de ta variable a :

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet?hl=fr#isRowHiddenByFilte...(Integer)

PierreLepinay,

Effectivement le filtre est fait dans mon script

var a = sheet1.getLastRow();
var b = sheet1.getLastColumn();
const monTableau = sheet1.getRange(1, 1, 1, b).getValues()[0];
const c = monTableau.indexOf('Evênement')+1;
var range =sheet1.getRange(1,1,a,b)
var z = sheet1.getRange(2,c).getA1Notation()
var critere1 = SpreadsheetApp.newFilterCriteria()
                             .whenFormulaSatisfied('=OR('+z+'="Achat";'+z+' ="Sevrage")')
                             .build();
var filter = range.createFilter();
filter.setColumnFilterCriteria(c,critere1);
var Q = sheet1.getlastrow();

Je voudrais que Q renvoie 22.

Est-ce qu'il y'aurait un code pour compter les lignes visibles après filtre ?

Merci,

Bonjour,

Il te suffit, une fois le filtre appliqué, d'ajouter ces lignes :

  Logger.log("précédent nombre de lignes (a) = "+a)
  var countHiddenRows = 0;
  for (i=2;i<=lastRow;i++) {
    if (sheet1.isRowHiddenByFilter(i)) {
      countHiddenRows++;
    }
  }
 Logger.log("nombre de lignes masquées (countHiddenRows) = "+countHiddenRows)

 var q = a - ;

 Logger.log("nombre de lignes total - masquées (q) = "+q)

Quand je te parlais de filtrer dans un script, là tu utilises un script pour insérer un filtre, dans ta feuille, il est possible de filtrer directement dans le script et d'insérer ensuite dans la feuille tes données filtrées, tout dépend de l'usage souhaité.

Bonjour à tous,

PierreLepinay, ton script marche super bien, merci beaucoup.

Mais le fait de passer par une boucle for rend le débogage super long.

Je serais preneur s'il y'a une autre script qui ne fait pas appel à la boucle for.

Merci encore,

c'est surtout gourmand en ressource et lent, honnêtement je ne me sers que très peu de isRowHiddenByFilter() en gros, tu passes ton numéro de ligne et ça te renvoi un bool true/false, donc, on est obligé d'itérer dessus, que ce soit avec une boucle for, while ou un forEach.

Pour rendre plus rapide, le plus simple est de juste filtrer dans le script, et pas se servir du script pour insérer une formule de filtre.

Mais si tu veux continuer avec la logique actuelle, tu peux aussi tester les éléments dans ta colonne C et déduire ce nombre de lastrow :

  var dataColEnvement = sheet1.getRange(2,c,lastRow,1).getValues();
  var countRow = 0;
  dataColEnvement.forEach(function(item) {
    if (item[0] === 'Achat' || item[0] === 'Sevrage') {
      nbLcountRowigne++;
    }
  });
  var countHiddenRows = a - countRow

Je viens d'essayer ton dernier code

  var dataColEnvement = sheet1.getRange(2,c,lastRow,c).getValues();
  var countRow = 0;
  dataColEnvement.forEach(function(item) {
    if (item[0] === 'Achat' || item[0] === 'Sevrage') {
      countRow;
    }
  });
  var countHiddenRows = countRow+1

Effectivement il est bien plus rapide que le précédent.

Du coup je l'ai choisi comme solution.

Merci beaucoup,

Rechercher des sujets similaires à "derniere ligne feuille filtre"