Compter un critère après avoir appliquer un filtre

maninwhite

XLDnaute Occasionnel
Bonjour à toutes et à tous

Je cherche à compter le nombre de fois que le mot "test" apparaît dans une colonne filtrée et à reporter ce nombre dans une cellule, mais la méthode countif ne marche pas avec des filtres car elle compte aussi dans les cellules cachées.
J'ai également essayer subtotal ou d'autres mais rien à faire et les sujets déjà présents sur le net ne m'ont pas aidés.

Je précise que je cherche à le faire en VBA et non pas en formule.

Code:
Worksheets("report").Range("A:A").AutoFilter Field:=11, Criteria1:= _
        "Logistique"
Worksheets("Statistiques FY 1314").Range("B6").Value = Application.WorksheetFunction.CountIf(Worksheets("report").Columns("E:E"), "Test")

Merci d'avance pour votre aide
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Compter un critère après avoir appliquer un filtre

Sur l'exemple, on obtient en O2,par VBA, le nombre de Dupont en colonne A sur une zone filtrée.

Code:
Sub essai()
  [O2] = NBSIVisibles(Range("A2:A25"), "Dupont")
End Sub

Function NBSIVisibles(champ As Range, valeur)
  Application.Volatile
  For Each c In champ
     If Not c.EntireRow.Hidden And Not c.EntireColumn.Hidden Then
          If c.Value = valeur Then t = t + 1
     End If
  Next c
  NBSIVisibles = t
End Function

JB
 

Pièces jointes

  • Copie de FiltreNbSi.xls
    41.5 KB · Affichages: 41

maninwhite

XLDnaute Occasionnel
Re : Compter un critère après avoir appliquer un filtre

Nickel JB, en adaptant le code à mon fichier, cela marche parfaitement bien. Merci

Par contre quand T = 0, la cellule reste vide.

J'ai donc ajouter dans la fonction
Code:
If T = 0 Then
  NBSIVisibles = 0
  End If

Sauf que j'utilise NBSIVisibles pour plusieurs calculs donc si un est égal à 0 tous le sont.

Une idée?
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Compter un critère après avoir appliquer un filtre

Bonjour,

????

Code:
Sub essai()
  [O2] = NBSIVisibles(Range("A2:A25"), [O1])
  [P2] = NBSIVisibles(Range("A2:A25"), [P1])
  [Q2] = NBSIVisibles(Range("A2:A25"), [Q1])
End Sub

Function NBSIVisibles(champ As Range, valeur)
  Application.Volatile
  t = 0
  For Each c In champ
     If Not c.EntireRow.Hidden And Not c.EntireColumn.Hidden Then
          If c.Value = valeur Then t = t + 1
     End If
  Next c
  NBSIVisibles = t
End Function

JB
 

Pièces jointes

  • Copie de Copie de FiltreNbSi.xls
    47.5 KB · Affichages: 36

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 836
Messages
2 092 652
Membres
105 479
dernier inscrit
chaussadas.renaud