Nombre de cellules sans doublons suite à un filtre

KIM

XLDnaute Accro
Bonjour le forum,
Je reviens vers vous suite à une recherche infructueuse pour trouver une formule ou une fonction qui me calcule le nombre de données sans doublons dans une colonne suite à un filtre sur une autre colonne et vous en remercie par avance.
Dans le fichier ci-joint, je filtre la col C pour A1. .
Je souhaite retrouver en B6 le nombre de données sans doublons suite au filtre de la colonne C (=4) ,
et en B4 le nombre de données sans doublons et non vides suite au filtre de la col C (=3).

Merci de votre aide
KIM
 

Pièces jointes

  • FiltreCompterSansDoublons.xlsm
    11.2 KB · Affichages: 41

Paf

XLDnaute Barbatruc
Bonjour KIM,

un essai macro à copier dans la feuille de code de la feuille Feuil1

Code:
Private Sub Worksheet_Calculate()
Dim Plage As Range, Dico1, Dico2, Clé As String
Set Dico1 = CreateObject("Scripting.Dictionary")
Set Dico2 = CreateObject("Scripting.Dictionary")
With Worksheets("Feuil1") ' à adapter
Set Plage = .Range("A10:D" & .Range("A" & Rows.Count).End(xlUp).Row)
For Each ligne In Plage.SpecialCells(xlCellTypeVisible).Rows
    Clé = ligne.Cells(1) & ligne.Cells(2)
    Dico1(Clé) = ""
    If ligne.Cells(2) <> "" Then
        Dico2(Clé) = ""
    End If
Next
.Range("B4") = Dico2.Count
.Range("B6") = Dico1.Count
End With
End Sub

A+
 

KIM

XLDnaute Accro
Bonjour Paf et le forum,
Merci pour la macro, je viens de la tester.
1/ Je filtre sur la colonne C et je sélectionne A1 : le résultat n'est pas correct, en B4 =4 au lieu de 3 et en B6=5 au lieu de 4.
2/ Je filtre sur la colonne C et je sélectionne A2 : résultat correct
3/ je filtre sur plusieurs colonnes C et D : résultat correct.
Avez-vous une idée pourquoi l'erreur du cas n°1 ?

Merci d'avance pour votre aide.
KIM
 

Pièces jointes

  • FiltreCompterSansDoublons.xlsm
    17.7 KB · Affichages: 32

Paf

XLDnaute Barbatruc
re,

il faudrait définir précisément votre notion de doublon.

Dans le classeur joint, en filtrant la colonne C sur la valeur A1, on obtient:

Doublons.jpg


A+

Edit : remplacement de l'agglomérat illisible par image .
 
Dernière édition:

KIM

XLDnaute Accro
Bonjour Paf, et le forum,
En effet, il a fallu mieux définir le Doublon. Si j'ai compris ton message, le Doublon concerne les 2 col A et B. ABC124 de DP01 est différente de ABC124 de DP02. Dans ce cas, le résultat est correcte. C'est une variante qui m'est utile aussi.

1/ Par contre ce que je cherche actuellement, c'est ;
Après avoir filtré sur n'importe quelle colonne, je souhaite compter le nombre de données filtrées sans doublons de la col C. Dans cette hypothèse ABC124 se compte une fois indifféremment des autres colonnes.

2/ Ta 1è variante m'intéresse aussi. Est-il possible de rajouter un paramètre ou la transformer en fonction pour calculer le nombre de données filtrées sans doublons pour un DP. Exemple :
Dans B2 = DP01
Dans C2 : le nombre sans doublons et sans blancs de la col B des données filtrées par A1 (col C) = 3
Si je filtre aussi par 502 (col D), C2= 1

Merci d'avance Paf.
KIM
 

Pièces jointes

  • FiltreCompterSansDoublons.xlsm
    17.9 KB · Affichages: 23

Paf

XLDnaute Barbatruc
re,

a priori:
Code:
Private Sub Worksheet_Calculate()
Dim Plage As Range, Dico1, Dico2, Dico3, Dico4, Clé As String, Clé2 As String
Set Dico1 = CreateObject("Scripting.Dictionary")
Set Dico2 = CreateObject("Scripting.Dictionary")
Set Dico3 = CreateObject("Scripting.Dictionary")
Set Dico4 = CreateObject("Scripting.Dictionary")
With Worksheets("Feuil1") ' à adapter
Set Plage = .Range("A10:D" & .Range("A" & Rows.Count).End(xlUp).Row)
For Each ligne In Plage.SpecialCells(xlCellTypeVisible).Rows
     Clé = ligne.Cells(1) & ligne.Cells(2)
     Clé2 = ligne.Cells(2)
     Dico1(Clé) = ""
     Dico3(Clé2) = ""
     If ligne.Cells(2) <> "" Then
         Dico2(Clé) = ""
         Dico4(Clé2) = ""
     End If
Next
.Range("B3") = Dico3.Count: .Range("C3") = "sans doublon DIR"
.Range("B2") = Dico4.Count: .Range("C2") = "sans doublon DIR ni vide"
.Range("B4") = Dico2.Count: .Range("C4") = "sans doublon DP & DIR ni vide"
.Range("B6") = Dico1.Count: .Range("C6") = "sans doublon DP & DIR"
End With
End Sub

A+
 

KIM

XLDnaute Accro
Merci Paf, la macro me règle le problème du filtre des données.

Il me reste le cas 2. Faire le même calcul pour un DP saisi dans une cellule. As-tu le temps d'adapter la macro ?
2/ Est-il possible de rajouter un paramètre ou la transformer en fonction pour calculer le nombre de données filtrées sans doublons pour un DP saisi dans la cellule B2 par ex.
Dans B2 = DP01
Dans C2 : Pour DP01, insérer le nombre sans doublons et sans blancs de la col B des données filtrées par A1 (col C) = 3
Si je filtre aussi par 502 (col D), C2= 1

Merci encore.
KIM
 

Paf

XLDnaute Barbatruc
re,

dernière mouture (?) :

VB:
Private Sub Worksheet_Calculate()
Dim Plage As Range, Dico1, Dico2, Dico3, Dico4, Clé As String, Clé2 As String
Set Dico1 = CreateObject("Scripting.Dictionary")
Set Dico2 = CreateObject("Scripting.Dictionary")
Set Dico3 = CreateObject("Scripting.Dictionary")
Set Dico4 = CreateObject("Scripting.Dictionary")
With Worksheets("Feuil1") ' à adapter
Set Plage = .Range("A10:D" & .Range("A" & Rows.Count).End(xlUp).Row)
For Each ligne In Plage.SpecialCells(xlCellTypeVisible).Rows
     Clé = ligne.Cells(1) & ligne.Cells(2)
     Clé2 = ligne.Cells(2)
     'Dico1(Clé) = ""
     Dico3(Clé2) = ""
     If ligne.Cells(2) <> "" Then
         If ligne.Cells(1) = .Range("B2") Then Dico2(Clé) = ""
         Dico4(Clé2) = ""
     End If
Next
.Range("A6") = Dico3.Count: .Range("B6") = "sans doublon DIR"
.Range("A4") = Dico4.Count: .Range("B4") = "sans doublon DIR ni vide"
.Range("C2") = Dico2.Count: .Range("D2") = "sans doublon DP & DIR ni vide"
'.Range("B6") = Dico1.Count: .Range("C6") = "sans doublon DP & DIR"
End With
End Sub

A+
 

Discussions similaires

Réponses
10
Affichages
453

Statistiques des forums

Discussions
312 380
Messages
2 087 821
Membres
103 665
dernier inscrit
gjoanou