Comptabiliser le nombre de cellule sur la ligne actuelle correspondant à une séquence

apps-script sheets

a marqué ce sujet comme résolu.

dans ce cas, oui il faut utiliser getRow()

  for(var C1=30;C1>=1;C1--) { // boucle de 30 à 1
    if(ss.getRange(ss.getCurrentCell().getRow(),C1).getValue() == "ST"){
         // on a trouvé la cellule qui contient ST
         Browser.msgBox("col: " + C1); 
    }    
  }

Cela m’affiche toujours la valeur 30, c’est à dire la valeur défini pour C1=30 et non le numéro de la colonne du dernier ST

Edit: code modifier pour avoir le numéro de la dernière colonne utilisée; Ajout de la variable n

function sousterre(){
// définir les variables
var ss = SpreadsheetApp.getActiveSpreadsheet()
var n= ss.getLastColumn();
  for(var C1=n;C1>=1;C1--) { // boucle de n à 1
    if(ss.getRange(ss.getCurrentCell().getRow(),C1).getValue() == "ST"){
         // on a trouvé la cellule qui contient ST
         Browser.msgBox("col: " + C1); 
    }    
  }
}

j’ai néanmoins une erreur :

+0 -0

pour ton erreur, il faut utiliser getActiveSheet() et non getActiveSpreadsheet
EDIT:
pas besoin de faire une fonction pour colonne; le code sera le même hormis la valeur à tester
Suffit de mettre cette valeur en paramètre de ta fonction et ainsi tu n’auras qu’une fonction qui fait tout

+0 -0

C’est bon je n’ai plus l’erreur. Par contre cette ligne de code n’indique pas le bon résultat:

    if(ss.getRange(ss.getCurrentCell().getRow(),C1).getValue() == "ST"){
         // on a trouvé la cellule qui contient ST

Pour la ligne :

6 cela devrait être 0

7 cela devrait être 20

8 cela devrait être 20

9 cela devrait être 19

10 cela devrait être 18

11 cela devrait être 0

12 cela devrait être 15

13 cela devrait être 20

Edit: Pas compris cela

pas besoin de faire une fonction pour colonne; le code sera le même hormis la valeur à tester Suffit de mettre cette valeur en paramètre de ta fonction et ainsi tu n’auras qu’une fonction qui fait tout

+0 -0

Je n’ai pas compris mais je l’ai fais de mon côté et cette instruction est correcte :) La prochaine étape est de compter le nombre d’occurrence et d’arrêter si on croise un autre terme

Lorsque tu auras ce nombre, tu pourras le retourner (via return) sans quoi tu n’auras rien dans tes cases

+0 -0

Un très grand merci DonKnacki pour ton aide et surtout ta patience pour les explications :bounce:

Voici le code final :

function sousterre(){
// définir les variables
var ss = SpreadsheetApp.getActiveSheet()
var n= ss.getLastColumn();
  for(var C1=n;C1>=1;C1--) { // boucle de n à 1
    if(ss.getRange(ss.getCurrentCell().getRow(),C1).getValue() == "ST"){
         // on a trouvé la cellule qui contient ST
  for(var C2=C1;C2>=1;C2--){
    if(ss.getRange(ss.getCurrentCell().getRow(),C2).getValue() !="ST"){
  return  C1-C2;
        }
      }       
    }    
  }
}

Je l’ai déjà adapté pour les autres cas.

Je vais encore lui apporter une petite modification avec un ajout "or" car dans certains cas comme pour le ST il faut que je lui ajoute le BR.

En tout cas un grand MERCI :D

Edit: juste une dernière question, comment faire pour cela s’actualise automatiquement lors d’ajout de données ?

+1 -0

Edit: Pas compris cela

pas besoin de faire une fonction pour colonne; le code sera le même hormis la valeur à tester Suffit de mettre cette valeur en paramètre de ta fonction et ainsi tu n’auras qu’une fonction qui fait tout

Piga25

Tu peux très bien mettre dans la cellule =sousterre("ST") pour les ST
=sousterre("Di") pour les Di

À condition d’avoir un paramètre dans la fonction et de changer le if

function sousterre(val){
   //.... 
   if(ss.getRange(ss.getCurrentCell().getRow(),C1).getValue() == val) {
      //...
   }
   //...
}

Il faut peut être changer le nom de la fonction du coup :lol:

Édit : nos messages se sont croisé, je laisse tout de même l’explication. Elle peut être utile

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte