Compter nbr occurrence sur plusieurs feuilles avec critère

Chinch - 5 mai 2024 à 22:11
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 - 6 mai 2024 à 14:37

Bonjour,

Je sèche actuellement sur une formule et j'espère pouvoir trouver une réponse ici.

J'ai un fichier comportant de nombreuses feuilles au sein desquelles j'ai plusieurs listes de données, toujours sur le même schéma (le nom de l'item en colonne B et en colonne H si l'item est acquis avec la mention "Ok").

J'ai déjà un onglet me permettant de référencer le nombre d'occurrence d'un même item par feuille et donc de connaître le total d'occurrences existantes.

Maintenant, sur un autre onglet, j'aimerai créer un ratio par item entre le nombre d'occurrences existantes et le nombre acquis.

Et c'est sur la formule pour référencer le nombre d'acquis que je bloque. J'avais trouvé une formule avec SOMMEPROD et INDIRECT qui fonctionnait bien pour compter le nombre d'occurrences totales, mais je n'ai pas réussi à incorporer une fonction de critère pour ne seulement compter ceux qui ont la mention "Ok".

J'ai pensé aussi à utiliser SOMME.SI.ENS, mais je ne parviens à aucun résultat.

Je vous joins la formule avec SOMMEPROD que j'ai. L'idée étant de rajouter un critère avec la mention "Ok" en colonne H de toutes mes feuilles.

=SOMMEPROD(NB.SI.ENS(INDIRECT("'"&F1:F116&"'!B7:B400");A2))

F1:F116 étant la liste de toutes mes feuilles sur lesquelles chercher (la liste est présente sur le même onglet que celui sur lequel je veux faire mes calculs) ; B7:B400 étant la plage de recherche de l'item sur toutes mes feuilles ; A2 étant l'item recherché.

Je pense bien que mon critère doit venir se placer en amont dans la formule, mais je ne parviens pas à l'écrire. La plage de recherche du critère est H7:H400.

Merci par avance pour vos retours.


Windows / Chrome 124.0.0.0

A voir également:

9 réponses

Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
5 mai 2024 à 22:28

Bonjour,

Un petit fichier exemple serait plus profitable, le mettre sur  Accueil de Cjoint.com et poster le lien.


0
bigoudiii Messages postés 237 Date d'inscription lundi 19 décembre 2022 Statut Membre Dernière intervention 25 octobre 2024 80
6 mai 2024 à 08:55

Hello,

Comme dit Le Pingou, salutations ami, un fichier serait plus explicite.

Néanmoins je tente, en aveugle, de compléter ta formule NB.SI.ENS :

=SOMMEPROD(NB.SI.ENS(INDIRECT("'"&F1:F116&"'!B7:B400");A2;INDIRECT("'"&F1:F116&"'!H7:H400");"OK"))
0

Hello, 

Merci beaucoup pour vos retours !
Le temps de créer un fichier exemple et vous avez répondu à ma demande ! Ca marche parfaitement, merci :)

Je penserai à mettre un fichier exemple la prochaine fois !

Bonne continuation ;)

0
danielc0 Messages postés 1263 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 16 novembre 2024 142
Modifié le 6 mai 2024 à 10:55

Bonjour,

Une solution avec Excel 365 :

https://www.cjoint.com/c/NEgiYCISDXb

Cette solution traite toutes les feuilles entre Feuil1 et Feuil3.

Daniel


0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
6 mai 2024 à 12:52

Bonjour danielc0,

Très intéressant les nouvelles fonctions que vous avez utilisées, reste à comprendre le fonctionnement.

Bonne journée


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
danielc0 Messages postés 1263 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 16 novembre 2024 142
6 mai 2024 à 13:01

Bonjour Le Pingou,

Elles sont en effet très puissantes. Malheureusement, elles ne sont pas très lisiblesJe vais essayer de les expliquer. D'abord, vous voudrez peut-être installer le complément "Excel Labs" qui offre cette présentation :

https://pages.store.office.com/addinsinstallpage.aspx?assetid=WA200003696&correlationId=b53a7961-cb06-8845-86eb-e32d4d93deec&rs=en-US&utm_source=pocket_reader

Je vais expliquer les formules dans le prochain message.

Daniel


0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
6 mai 2024 à 13:48

Merci c'est parfait je vais y faire un tour. J'ai assez d'informations pour la suite.


0
danielc0 Messages postés 1263 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 16 novembre 2024 142
Modifié le 6 mai 2024 à 14:46

Explications des formules de la réponse 3 :

1. Formule en A2 :

Le but est d'obtenir une liste unique des items

=LET(tbl;ASSEMB.V(Feuil1:Feuil3!B1:B100);UNIQUE(FILTRE(tbl;tbl<>0)))

La fonction ASSEMB.V empile des plages les unes en dessous les autres comme si elles étaient sur le même feuille.

ASSEMB.V(Feuil1:Feuil3!B1:B100)

empile la plage B1:B100 de chaque feuille entre Feuil1 et Feuil3. Les cellules vides sont remplacées par des zéros qu'il faut éliminer.

La fonction LET permet d'attribuer à des variables des formules. Ce qui évite de faire plusieurs fois le même calcul dans une formule. Ici, la variable "tbl" représente cet empilage de plages :

=LET(tbl;ASSEMB.V(Feuil1:Feuil3!B1:B100);...

On filtre ensuite les 0 superflus avec la fonction FILTRE :

FILTRE(tbl;tbl<>0)

La fonction UNIQUE permet de récupérer les valeurs uniques :

UNIQUE(FILTRE(tbl;tbl<>0))

On obtient la formule voulue.

2. Calcul du nombre d'items existants (B2) :

=LET(tbl;ASSEMB.V(Feuil1:Feuil3!B1:B100);BYROW(A2#;LAMBDA(x;SOMME(SI(x=FILTRE(tbl;tbl<>0);1;0)))))

La variable "tbl" est la même que pour la formule précédente. Le "#" après une adresse de cellule représente les données calculées par la formule de cette cellule. Ici, A2# représente donc A2:A21.

BYROW effectue un calcul pour chacune des cellules de la plage indiquée. Ici, BYROW(A2# effectue le calcul pour chacune des cellules A2:A21. Pour ce calcul (fonction LAMBDA), "x" représente chaque cellule de cette plage. (La fonction NB.SI ne fonctionne que sur des plages de cellules contiguës, on ne peut donc pas l'utiliser ici). A la place, on utilise :

SOMME(SI(x=FILTRE(tbl;tbl<>0);1;0)

(J'aurai pu mettre seulement : SOMME(SI(x=tbl;1;0)

(suite dans le prochain message.)

Daniel


0
bigoudiii Messages postés 237 Date d'inscription lundi 19 décembre 2022 Statut Membre Dernière intervention 25 octobre 2024 80
6 mai 2024 à 14:32

Hello,

Dans le cas présent comme tu PRENDS la première et dernière colonne de la plage, le ASSEMB.H n'est pas absolument nécessaire :

=LET(tbl;ASSEMB.V(Feuil1:Feuil3!B1:H100);tbla;FILTRE(tbl;PRENDRE(tbl;;1)<>0);BYROW(A2#;LAMBDA(x;SOMME((PRENDRE(tbla;;1)=x)*(PRENDRE(tbla;;-1)="ok")))))
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
6 mai 2024 à 14:37

Merci à vous deux, c'est super.

Bonne journée


0