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

apps-script sheets

a marqué ce sujet comme résolu.

Bonjour, En m’inspirant du poste : [Apps-Script sheets] Première cellule et dernière cellule non-vide dans la ligne actuelle dans le forum Programmation le 14/07/2022

j’aimerai pouvoir comptabiliser le nombre de cellule correspondant à un critère sur la ligne actuelle mais uniquement celles composant la dernière séquence. J’ai mis un petit fichier pour explications: https://docs.google.com/spreadsheets/d/1SXCvGI7u3w9xFXABpI4BCsoFF6oiI13x_BiGLU1KEg0/edit#gid=0

Merci

Bonjour, possible de nous mettre le lien du sujet dont tu parles ? (difficile de le retrouver :( )

si tu mets un lien google doc, rends le public au moins

EDIT: ton tableau montre des choses mais sans explication ou très peu

  1. les données s’arrêtent toujours à la colonne S ?
  2. un tableau croisé ne te permet pas d’obtenir le résultat désiré ?
+0 -0

Bonjour, Le lien du sujet que je me suis inspiré : https://zestedesavoir.com/forums/sujet/16370/apps-script-sheets-premiere-cellule-et-derniere-cellule-non-vide-dans-la-ligne-actuelle/

J’ai cette application sous excel mais j’aimerai la passer sous google sheets. Sous excel, j’ai quatre fonction personnalisée pour le faire. J’aimerai reproduire cela sous sheets. Cette feuille de calcul me permet de comptabiliser les heures effectuées par la personne en temps réel. C’est un peu comme un planning ou une cellule correspond à 15 minutes. Je ne peux pas me servir d’un tableau croisé dynamique pour cela. Merci

+0 -0

Encore plus simple, tu pars de la colonne S et tu comptes le nombre de fois que tu rencontres un critère. Dès que le critère change, tu arrêtes le compteur pour ce critère et tu commences le compteur pour le nouveau critère. Tu stoques le tout dans un dictionnaire que tu utilises pour remplir le tableau récap

+0 -0

Entièrement d’accord pour le principe, mais c’est la programmation de cela qui me pose problème, je ne sais pas comment le faire, d’où ma demande d’aide. En ayant un exemple pour un, je pourrai l’adapter pour les autres cas.

Sous sheets, il existe bien une façon de créer des formules personnalisées?

Sous excel une de mes fonctions personnalisées pour cela est :

Function SousTerre(L As Integer) As Single
    Application.Volatile
    x = Cells(3, 3).Value
    Dim c1%, c2 As Integer
    For c1 = x To 20 Step -1
        If Cells(L, c1) = "BR" Or Cells(L, c1) = "ST" Then Exit For
    Next
    For c2 = c1 To 20 Step -1
        If Cells(L, c2) <> "BR" And Cells(L, c2) <> "ST" Then Exit For
    Next
    SousTerre = IIf(c2 = c1, 0, (c1 - c2) / 4)
    
End Function
+0 -0

Bonjour, J’ai essayé de faire le script pour apps script en prenant la logique du VBA, mais cela ne fonctionne pas. Surement mal codé.

function sousterre(){
// définir les variables
var ss = SpreadsheetApp.getActiveSpreadsheet()
var C1;
var C2;
// trouver le premier "ST" en partant de la fin de la ligne - comptage de droite à gauche
// je ne sais pas si c'est comme cela qu'il faut faire pour démarrer à la fin de la ligne 
//pour revenir au début de celle-ci
  for(var C1=1;C1<=30;C1--){
    ss.getRange(row,C1)="ST";  

   // trouver la première occurence différente en partant de C1 - comptage de droite à gauche
  for(var C2=1;C2<C1;C2--){
    ss.getRange(row,C2)<""> "ST";

// pour afficher le résultat 
sousterre = If(C2=C1,0,(C1-C2)) 
  }
}
}

Pour trouver une une valeur, il faut faire un test. De plus, getRange renvoie un range, pas une chaine. Pour avoir la valeur, tu peux utiliser getValue

donc

if (ss.getRange(row,C1).getValue()=="ST")
{
// code
}

Pour le différent, c’est !=. Considère que le langage est du javascript en terme de syntaxe

+0 -0

Bonjour, Je dois mal m’expliquer ou je ne comprends rien à rien. Je vais donc procéder par étape. en premier je dois trouver la dernière valeur sur la ligne une occurrence, ici "ST".

  for(var C1=1;C1<=30;C1--){
    ss.getRange(row,C1)="ST"; 

Est-ce que ma recherche : for est bonne ou pas. je souhaite que C1 est :

  • un pas de 1
  • commence la recherche à partir de la dernière cellule vide de la ligne
  • fait la recherche en partant de la fin de la ligne pour revenir au début.
  • affiche le numéro de la colonne ou le garde en mémoire.

déjà résoudre ce problème m’aiderait Merci

plusieurs problèmes dans ton code
1) pour aller de droite à gauche, il faut aller de la colonne 30 à la colonne 1.
La boucle for doit ressembler à ça :

for(var C1=30;C1>=1;C1--) { // boucle de 30 à 1
    Browser.msgBox(C1); // on affiche C1
}

ss.getRange(row,C1)="ST";

2) le signe = est une affectation pas une comparaison. La comparaison se fait via ==
3) De plus, comme je l’ai dis, getRange retourne un Range , il faut utiliser getValue() pour avoir la valeur de la cellule

for(var C1=30;C1>=1;C1--) { // boucle de 30 à 1
    if(ss.getRange(row,C1).getValue() == "ST"{
      // on a trouvé une cellule qui contient ST
    }
}
+0 -0

Re, Merci. 1ere proposition: j’ai bien la boucle qui s’affiche en décomptant de 30 à 1 2eme proposition: J’ai une erreur avec l’accolade qui est située après =="ST"{

Edit: si je mets une parenthèse fermante avant l’accolade je n’ai plus d’erreur.

+0 -0

Lorsque je fais débogage, C1 m’indique toujours la colonne 30 et non la colonne du dernier ST.

lien vers le fichier exemple : https://docs.google.com/spreadsheets/d/1RP3o3OSjHJhkV9eGZbUGrFo-XPXQFFLlHOoRhZzsKK8/edit#gid=0

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

Comment récupérer n° de la cellule qui contient ST ?

+0 -0

Je ne vois pas l’intérêt de cette boucle pour la ligne.

La fonction est mise dans la cellule comme une formule : =sousterre().

Ce qui pour moi Row() doit correspondre à la ligne où est la formule, c’est à dire dans la colonne H (H6:H14) tout en sachant que le nombre de ligne peut augmenter.

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