Formule pour compter le nombre d'occurrence (cas particulier)

Re-Bonjour :)

J'ai un nouveau problème je souhaiterais comme indiqué dans le titre compter le nombre d'occurrence, je sais que ce sujet à déjà été traité mais j'ai un cas particulier qui fait que les solutions basique que j'ai pu essayer ne fonctionne pas (COUNT/COUNTIF etc...)

Voici le tableau

image

L'idée est que j'aimerais pouvoir récupérer le nombre de ticket traité chaque jour en M:M, mais comme on peut voir en A:A je suis en format date heure alors que en L:L je suis en date, donc forcement mon COUNTIF (mon ARRAYFORMULA ne s'applique pas non plus à toute la colonne mais c'est un autre sujet ^^) me dit qu'il n'y a pas d'occurrence

Je n'ai pas l'impression qu'il y est de formule qui puisses faire ça, peut-être devrais-je attaquer le problème autrement mais je commence à tourner en rond

Merci par avance d'avoir pris le temps et peut-être pour votre aide :)

Bonjour,

as-tu un fichier simplifié ? partage le cela permet de voir quels sont tes paramètres régionaux et effectuer les tests plus facilement

sinon essaie de prendre la partie entière de A pour ne conserver que la date

en M2, à tirer vers le bas

=count(filter(INT(A:A);INT(A:A)=L2))

nota : cette formule ne se propagera pas sur la colonne puisque tu ne mets que L2 dans ton cas de figure

={"claims";arrayformula(count(filter(INT(A:A);INT(A:A)=L2)))}

et si tu mets L2:L cela ne fonctionnera pas non plus car cela comptera le tout en même temps

={"claims";arrayformula(count(filter(INT(A:A);INT(A:A)=L2:L)))}

c'est en fait une formule plus complexe que cela ! ou une utilisation de query avec sum et group by

=query({arrayformula(INT(A2:A))\B2:B};"select Col1, count(Col2) where Col1<>0 group by Col1 label count(Col2) 'claims' ")
image

mais dans ton cas, un tableau croisé dynamique est le plus simple, avec un groupage des dates par jour

Bonjour,

as-tu un fichier simplifié ? partage le cela permet de voir quels sont tes paramètres régionaux et effectuer les tests plus facilement

France GMT+1 le problème est que ce tableau viens de cette formule

=FILTER(DB!A:F;DB!D:D="Darwiin")

donc je peux pas juste copié coller le tableau pour le mettre dans un fichier plus simple

=count(filter(INT(A:A);INT(A:A)=L2))

Cette fonction fonctionne très bien, merci :) (je dois tirer à la main et ça m'affiche les zero mais ça fais ce dont j'ai besoin)

et si tu mets L2:L cela ne fonctionnera pas non plus car cela comptera le tout en même temps

effectivement c'est le pb que j'ai rencontré

=query({arrayformula(INT(A2:A))\B2:B};"select Col1, count(Col2) where Col1<>0 group by Col1 label count(Col2) 'claims' ")

dans mes recherches je suis tombé sur cette formule cependant je ne l'a comprends pas et donc je n'arrivais pas à l'utiliser, grâce à ton screen ça fonctionne très bien mais je ne l'as comprends toujours pas

INT(A2:A))\B2:B}

surtout cette partie

mais dans ton cas, un tableau croisé dynamique est le plus simple, avec un groupage des dates par jour

les tableau croisé dynamique sont encore une science obscure pour moi je vais étudier le sujet

Dernière petite question, imaginons que je veuille maintenant rajouter une condition pour compter le nombre de ticket close par jour en N:N voir tableau ci-dessous

image

en réutilisant la formule cela me donne ça (voir ci-dessous), je trouve pas ça très beau de devoir afficher deux fois la date et d'avoir deux dates différentes mais bon au pire cela fonctionne

image

La meilleur solution serait probablement un tableau croisé dynamique? (je vais définitivement me former à leur fonctionnement)

Merci infiniment pour ton temps et ton aide précieuse

=query({arrayformula(INT(A2:A))\B2:B};"select Col1, count(Col2) where Col1<>0 group by Col1 label count(Col2) 'claims' ")

je ne l'a comprends pas et donc je n'arrivais pas à l'utiliser, grâce à ton screen ça fonctionne très bien mais je ne l'as comprends toujours pas

INT(A2:A))\B2:B}

en notation FR, pour juxtaposer 2 colonnes on utile {______\_______} ce qui permet comme ici d'effectuer une transformation sur la colonne A (en l'occurrence ne retenir que la partie entière de l'horodatage = la date) et la juxtaposer à B

{  arrayformula(INT(A2:A))  \  B2:B  }

Dernière petite question, imaginons que je veuille maintenant rajouter une condition pour compter le nombre de ticket close par jour en N:N voir tableau ci-dessous

en réutilisant la formule cela me donne ça (voir ci-dessous), je trouve pas ça très beau de devoir afficher deux fois la date et d'avoir deux dates différentes mais bon au pire cela fonctionne

La meilleur solution serait probablement un tableau croisé dynamique? (je vais définitivement me former à leur fonctionnement)

oui, le TCD reste le moyen le plus simple

sinon, en poursuivant la même logique que précédemment

=query({arrayformula(INT(A2:A))\B2:B\G2:G};
"select Col1, count(Col2), count(Col3) where Col1<>0 group by Col1 label count(Col2) 'claims', count(Col3) 'close' ")

cette fois ci on juxtapose en plus la colonne G à la matrice virtuelle (pour bien comprendre, mets cette formule dans une cellule de la ligne 1 ou 2, -les dates seront en notation numérique-)

={arrayformula(INT(A2:A))\B2:B\G2:G}

et on applique query

image

A noter que lorsque query s'applique à une matrice virtuelle, on utilise Colx et non A, B, C etc.

sinon, en poursuivant la même logique que précédemment

=query({arrayformula(INT(A2:A))\B2:B\G2:G};
"select Col1, count(Col2), count(Col3) where Col1<>0 group by Col1 label count(Col2) 'claims', count(Col3) 'close' ")

J'avais essayé ça (ma fonction ne marchais pas ^^) mais comme j'imaginais le compteur se fait sur la creation date et pas la close date, l'information dont j'ai besoin est "combien de ticket ont été close à x date"

image

comme sur mon précédent screen

image

je n'avais pas fait attention en effet à la date de clôture

la formule va être alambiquée, mais rassure-toi, avec un TCD ce n'est pas non plus simple dans ce cas !

ok au pire ça marche très bien comme ça

image

ce tableau n'est la que pour être une base de donnée donc c'est tout bon comme ça

Cela devient compliqué en effet

On peut faire 2 query comme ceci

pour claims ... en M1
=query(
{arrayformula(INT(A2:A))\B2:B};
"select Col1, count(Col2), 0 where Col1<>0 group by Col1 label count(Col2) '', 0 '' ")

pour close ... en Q1
=query(
{arrayformula(INT(F2:F))\G2:G};
"select Col1, 0, count(Col2) where Col1<>0 group by Col1 label 0 '', count(Col2) '' ")

et ensuite empiler (on utilise alors ; et non plus \ ) le résultat et refaire un query, ce qui donne, juste pour la beauté de la formule

=query({query({arrayformula(INT(A2:A))\B2:B};
"select Col1, count(Col2), 0 where Col1<>0 group by Col1  label 0 '', count(Col2) '' ");
query({arrayformula(INT(F2:F))\G2:G};
"select Col1, 0, count(Col2) where Col1<>0 group by Col1  label 0 '', count(Col2) '' ")};
"select Col1, sum(Col2), sum(Col3) where Col1 is not null group by Col1 label sum(Col2) 'claims', sum(Col3) 'close' ")

j'ai laissé les matrices intermédiaires en colonnes MNO et QRS mais elles ne sont pas utilisées du tout en U1

image

et avec cela, comme les dates sont bien alignées, tu peux même connaître ton en-cours de claims, mais là c'est une autre histoire !!

et avec cela, comme les dates sont bien alignées, tu peux même connaître ton en-cours de claims, mais là c'est une autre histoire !!

exactement

Problème réglé encore une fois merci beaucoup pour ton aide

Bonjour,

et avec cela, comme les dates sont bien alignées, tu peux même connaître ton en-cours de claims, mais là c'est une autre histoire !!

je m'étais promis de le faire ...

en X1 avec claim en V et close en W

={"in process";arrayformula(SUMIF(ROW(A2:A);"<="&ROW(A2:A);V2:V)-SUMIF(ROW(A2:A);"<="&ROW(A2:A);W2:W))}

Tu es incroyable merci encore :)

={"in process";arrayformula(SUMIF(ROW(A2:A);"<="&ROW(A2:A);V2:V)-SUMIF(ROW(A2:A);"<="&ROW(A2:A);W2:W))}

cette formule fonctionne parfaitement

Malheureusement je ne peux pas m'en servir car j'ai 13 feuilles dans mon fichier et ça fait planter mon google sheet, car il fait le calcul sur 50000lignes*13 xD

J'ai trouvé un moyen de récupérer le nombres de ticket en cours mais contrairement à ta formule je ne peux pas récupérer l'historique et donc ne peut pas faire de graph mais ce n'est pas très important

je ne suis pas sûr que tu aies besoin des 50.000 lignes.

Elles ont dû apparaître lors d'une formule.

Supprime au maximum les lignes quitte à n'en conserver qu'une centaine par feuille.

Tu peux épurer ton fichier comme ceci

function reduireLignes(){
  var ss=SpreadsheetApp.getActiveSpreadsheet()
  ss.getSheets().forEach(function(sh){
    if (sh.getMaxRows()>sh.getLastRow()+100) sh.deleteRows(sh.getLastRow()+100,sh.getMaxRows()-sh.getLastRow()-100);
  })
}

Effectivement c'était la meilleure solution ^^

J'ai fais une toute petite modification pour éviter que ça affiche en boucle la même valeur

={"In Process History";arrayformula(IF($J$2:$J;(SUMIF(ROW($A$2:$A);"<="&ROW($A$2:$A);$K$2:$K)-SUMIF(ROW($A$2:$A);"<="&ROW($A$2:$A);$L$2:$L));""))}
Rechercher des sujets similaires à "formule compter nombre occurrence cas particulier"