XL 2019 Compter le nbr de cellule non vide, mais sans les doublons

Fabrice16ct

XLDnaute Nouveau
Bonjour à tous
La formule ci-dessous compte automatiquement le nombre de cellules non vides sauf 4 mots prédéfinis qui sont déduits dans cette formule.
Le problème pour moi c'est que cette formule compte les doublons en "N15:N21", est-ce que c'est possible d'ajouter un critère dans cette formule pour ne pas compter les doublons (Ne compte qu'une seul fois le même mot).
J'ai essayé plusieurs options trouver sur internet, mais à chaque fois ça casse ma formule existante
Merci pour votre aide

VB:
=NBVAL(N15:N21)-NB.SI(N15:N21;"*europcar*")-NB.SI(N15:N21;"*gare d*")-NB.SI(N15:N21;PlgeNom)-NB.SI(N15:N21;"*entreprise x*")
 

Fabrice16ct

XLDnaute Nouveau
Merci beaucoup cela fonctionne.
J'ai un petit problème sur un point, sur la chaîne interdite avec le mot “gare d”
Cela peut être
GARE DE POITIERS
GARE DE BORDEAUX
GARE DE PARIS-D'AUSTERLITZ
GARE DE PARIS-MONTPARNASSE
GARE D'ANGER
etc...
Si c'est la même gare il n'y a pas de problème, par contre s'il y a une deuxième gare cela me prend un point supplémentaire dans mon total mais les gare ne sont pas comptabilisés.
Est-ce qu'il faut que je personnalise toutes les gares dans ma formule?

VB:
=NBVAL(UNIQUE($N15:$N21))-SI(NB.SI($N15:$N21;"")>0;1;0)-SI(NB.SI($N15:$N21;"*europcar*")>0;1;0)-SI(NB.SI($N15:$N21;"*gare d*")>0;1;0)-SI(NB.SI($N15:$N21;PlgeNom)>0;1;0)-SI(NB.SI($N15:$N21;$W$2)>0;1;0)
 
Dernière édition:

xUpsilon

XLDnaute Accro
Ca se complique largement en effet je m'étais planté.
Voici une possibilité (adapter les plages de valeurs, moi je fais mes tests en colonne U) :
VB:
=SOMMEPROD(SI(($U$7:$U$15<>"")*(SIERREUR(SI(TROUVE("gare d";$U$7:$U$15;1)>0;FAUX;"");VRAI));1/NB.SI.ENS($U$7:$U$15;$U$7:$U$15;$U$7:$U$15;"<>gare d*")))

Le problème c'est que SOMMEPROD ne gère pas les caractères *, du coup il faut trouver une autre solution pour contourner. D'où le bloc avec le SIERREUR(SI(, qui n'est pas très joli mais qui fait le job.
En gros je pars d'une formule assez classique de comptage sans doublons et sans vide qui est celle-ci :
Code:
=SOMME(SI(A1:A5<>"";1/NB.SI(A1:A5;A1:A5)))
Et après on change le somme par un SOMMEPROD pour atteindre la multicondition, puis on rajoute encore une couche pour permettre à SOMMEPROD d'agir sur une similarité de texte et non une condition d'égalité.

Pour rajouter europcar comme chaine à éviter, il faudra adapter comme ceci :
Code:
=SOMMEPROD(SI(($U$7:$U$15<>"")*(SIERREUR(SI(TROUVE("gare d";$U$7:$U$15;1)>0;FAUX;"");VRAI))*(SIERREUR(SI(TROUVE("europcar";$U$7:$U$15;1)>0;FAUX;"");VRAI));1/NB.SI.ENS($U$7:$U$15;$U$7:$U$15;$U$7:$U$15;"<>gare d*";$U$7:$U$15;"<>*europcar*")))

Sur la même logique, il te suffira de copier/coller le bloc "SIERREUR" pour toute condition supplémentaire, et rajouter dans le NB.SI.ENS la même condition.

Bonne soirée,

PS : Sinon pour faire beaucoup beaucoup plus simple, il existe les Tableaux Croisés Dynamiques. Je suis parti du principe que tu n'en parles pas donc que tu n'en veux pas, mais ça pourrait amplement faciliter je pense.
 

Fabrice16ct

XLDnaute Nouveau
Oui comme tu dis cela se complique de plus en plus surtout pour moi !!!:eek:
Ci-dessous la formule que je viens de faire via les critères, mais je pense que je me suis trompé en quelque part
Cela cela me met l'erreur #DIV/0!

VB:
=SOMMEPROD(SI((N15:N21<>"")*(SIERREUR(SI(TROUVE("gare d";N15:N21;1)>0;FAUX;"");VRAI))*(SIERREUR(SI(TROUVE("europcar";N15:N21;1)>0;FAUX;"");VRAI))*(SIERREUR(SI(TROUVE(W2;N15:N21;1)>0;FAUX;"");VRAI))*(SIERREUR(SI(TROUVE(PlgeNom;N15:N21;1)>0;FAUX;"");VRAI));1/NB.SI.ENS(N15:N21;N15:N21;N15:N21;"<>gare de*";N15:N21;"<>*europcar*";N15:N21;""<>W2;N15:N21;""<>PlgeNom)))
 

xUpsilon

XLDnaute Accro
Bonjour,

Problème dans la deuxième partie de la formule.
Les <> doivent toujours être placés entre " ". Et pour faire la jointure entre ce string et une cellule (ici K2), il faut utiliser &.

Du coup ici ce n'est pas " "<> K2, c'est "<>"&K2.
Même chose pour PlgeNom. D'ailleurs, qu'est-ce qu'il y a dans PlgeNom ? Si c'est une adresse de cellule, il faudra utiliser la fonction INDIRECT pour y faire référence.

Bonne journée,
 

Discussions similaires

Statistiques des forums

Discussions
314 761
Messages
2 112 587
Membres
111 610
dernier inscrit
spryy