Compter nbr occurrence sur plusieurs feuilles avec critère
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
- Occurrences de miss france
- Prefixe france - Guide
- France 2 uhd - Accueil - TV & Vidéo
- Application france connect - Guide
- Autoroute la plus chère de france - Guide
- Générique miss france mp3 - Forum Musique / Radio / Clip
9 réponses
5 mai 2024 à 22:28
Bonjour,
Un petit fichier exemple serait plus profitable, le mettre sur Accueil de Cjoint.com et poster le lien.
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"))
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question6 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 :
Je vais expliquer les formules dans le prochain message.
Daniel
6 mai 2024 à 13:48
Merci c'est parfait je vais y faire un tour. J'ai assez d'informations pour la suite.
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
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")))))
6 mai 2024 à 14:37
Merci à vous deux, c'est super.
Bonne journée