Compter le nombre de cellules sans les doublons

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Moonshine33

XLDnaute Nouveau
Bonjour,
Dans une base de données, je souhaite compter le nombre de cellules d'une colonne sans compter les doublons, sous condition d'une date située dans une autre colonne. Ci-joint un fichier exemple pour mieux comprendre ma demande.
Ma demande est de calculer par exemple pour le mois de janvier 2017 situé en colonne A, le nombre de cellules différentes situées en colonne B, mais sans compter les récurrences.
En gros, je souhaite pouvoir compléter le tableau que j'ai mis sur la page (où ma valeur sera toujours 4 pour cet exemple, car je n'ai que 4 produits A-B-C-D), mais avec une formule excel ou une macro.
J'ai vu la formule : {=SOMME(SI(PLAGE<>"";1/NB.SI(PLAGE;PLAGE))), mais ça ne fonctionne pas comme je souhaite...
Merci d'avance à ceux qui prendront le temps de m'aider !
Moonshine.
 

Pièces jointes

Bonjour Moonshine33, Pierre,

Formule matricielle en F15 :
Code:
=NB(EQUIV({"A"."B"."C"."D"};REPT($B2:$B33;(MOIS($A2:$A33)=--GAUCHE(F14;2))*(ANNEE($A2:$A33)=--DROITE(F14;4)));0))
A valider par Ctrl+Maj+Entrée et tirer vers la droite.

Fichier joint.

A+
 

Pièces jointes

Bonjour le fil, job75, Moonshine33,
Bonjour pierrejean,
@pierrejean,
Ta fonction m'a intéressé, j'ai modifié la 1è colonne en texte et supprimé le test du format dans la fonctionne.
Est-il possible de rajouter un 2è critère dans ta fonction pour le calcul du nombre sans doublons car mes données sont sur 3 col et non sur 2 ? voir onglet type.
Merci d'avance
KIM
 

Pièces jointes

Re, salut hbenalia,

Par curiosité j'ai testé les diverses solutions (en ajoutant 08/2017 chez pierrejean et hbenalia) :

- pierrejean (post #2) recalcul en 1,22 millième de seconde

- job75 (posts #3 ou 4) recalcul en 0,29 millième de seconde

- hbenalia (post #6) recalcul en 0,38 millième de seconde - mais l'année n'est pas précisée...

A+
 
Re, salut hbenalia,
- job75 (posts #3 ou 4) recalcul en 0,29 millième de seconde

Code:
=NB(EQUIV({"A"."B"."C"."D"};REPT($B2:$B33;(MOIS($A2:$A33)=MOIS(F14))*(ANNEE($A2:$A33)=ANNEE(F14)));0))

Bonsoir JOB75 , hbnelia, Pierre-Jean, Kim, Moonshine et bonsoir à tous.

@job75
Ta formule est très bien et la plus rapide mais peut-on rendre l'array "A,B,C,D" non limité stp ?

@ Pierre-Jean :
Bonsoir,
superfonction (!), comme souligné par Kim, mais j'ai pas compris , en cas de non "occurence", pourquoi la fonction retourne -1 et non 0 ?

Merci par avance messieurs pour vos réponses et pour les formules / fonctions que vous avez proposées.

bonne soirée
zebanx
 
Dernière édition:
Re,

Je reviens pour le problème de l'ami KIM, que je salue.

Si vous avez compris mes formules des posts #3 et 4 il n'est guère difficile d'adapter, en G4 :
Code:
=NB(EQUIV({"A"."B"."C"."D"};REPT($C$8:$C$39;$A$8:$A$39&$B$8:$B$39=$F4&G$3);0))
C'est bien sûr ici aussi une formule matricielle à valider par Ctrl+Maj+Entrée.

Fichier joint.

A+
 

Pièces jointes

Re,

Si l'on tient au VBA une solution consiste à entrer la formule précédente dans G4:J6 :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With [A7].CurrentRegion
  .Columns(1).Name = "DP"
  .Columns(2).Name = "Type"
  .Columns(3).Name = "NOM"
End With
With [G4:J6]
  .Cells(1).FormulaArray = "=COUNT(MATCH({""A"",""B"",""C"",""D""},REPT(NOM,DP&Type=$F4&G$3),0))"
  .Cells(1).AutoFill .Rows(1)
  .Rows(1).AutoFill .Rows
  .Value = .Value
End With
Application.EnableEvents = True
End Sub
Fichier .xlsm joint.

A+
 

Pièces jointes

Re,

Des solutions plus élaborées avec une feuille "Produits" et des tableaux Excel :
Code:
=NB(EQUIV(Tableau1[Produit];REPT(Tableau2[NOM];Tableau2[DP]&Tableau2[Type]=$F4&G$3);0))
Code:
Private Sub Worksheet_Activate()
Worksheet_Change [A1]
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With [G4:J6]
  .Cells(1).FormulaArray = "=COUNT(MATCH(Tableau1[Produit],REPT(Tableau2[NOM],Tableau2[DP]&Tableau2[Type]=$F4&G$3),0))"
  .Cells(1).AutoFill .Rows(1)
  .Rows(1).AutoFill .Rows
  .Value = .Value
End With
Application.EnableEvents = True
End Sub
Fichiers (2).

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
22
Affichages
1 K
Réponses
1
Affichages
249
Réponses
4
Affichages
402
Réponses
2
Affichages
311
Retour