Filtre chronologique tableau et nb occurences

Bonjour à tous,

Je fais appel à vous car je suis bloqué dans la création d'une macro.

Le contexte : j'importe avec une macro les données de prévisions d'ouverture de points de vente à partir d'un fichier source A dans la feuille "Import-PO" d'un fichier destination B.

Je souhaite travailler uniquement dans ce fichier B (que j'ai nommé Filtre_PO) afin d'extraire certaines données dans une feuille nommée "PO_DASHBOARD".

Dans cet Import-PO, je souhaite réaliser un filtre sur le type de prévision pour ne sélectionner que les Ouvertures, Transfert et Démolition Reconstruction. Je souhaite également réaliser un filtre sur la date d'ouverture prévisionnelle à savoir antérieure ou égale à la date d'aujourd'hui + 3 mois.

Une fois ces deux filtres appliqués, je souhaite compter le nombre d'occurences de "AAA" et de "BBB" dans la colonne INFO et afficher ces valeurs sur la feuille PO_DASHBOARD à l'endroit indiqué.

Dans ma macro, j'ai :

Sub import_PO()

    'Filtre sur les ouvertures hors modernisation
    ActiveSheet.ListObjects("Tablo_PO").Range.AutoFilter Field:=2, Criteria1:=Array("Démolition Reconstruction", "Ouverture", "Transfert"), Operator:=xlFilterValues

    'Filtre sur les ouvertures dans les 3 prochains mois à partir de la date du jour
    ActiveSheet.ListObjects("Tablo_PO").Range.AutoFilter Field:=3, Criteria1:="<=" & CLng(DateAdd("m", 3, Date)), Operator:=xlAnd

End Sub

Jusque là, l'affichage se fait bien selon les filtres, par contre je me suis rendu compte que le comptage comme un "countif" ne fonctionne pas car le tableau affiché n'est stocké nullepart dans le code. Un countif sur le tableau sur AAA ou BBB prend en compte toutes les occurences du tableau et pas seulement ce qui est affiché à l'écran (je suppose que c'est normal).

J'ai essayé quelque chose de ce style pour mettre le tableau filtré sur la date dans un autre tableau mais je pense être loin du compte (et d'ailleurs ça ne fonctionne pas) :

Sub import_PO()

Dim tabloPO, tabloPO3M, fp As Worksheet
Dim iA&, iB&, countA&, countB&

    Set fp = Sheets("Import-PO")
    tabloPO = fp.Range("A8:C" & fp.Range("A" & Rows.Count).End(xlUp).Row)
    tabloPO3M = tabloPO.Range("A8").AutoFilter(Field:=3, Criteria1:="<=" & CLng(DateAdd("m", 3, Date)))

    For iA = 2 To UBound(tabloPO3M, 1)
        countA = 0
        If tabloPO3M(iA, 1) = "AAA" Then
            countA = countA + 1
        End If
        Next iA

    Sheets("PO_DASHBOARD").Range("F4").Value = iA

End Sub

Je vous remercie pour votre aide.

21filtre-po.xlsm (53.07 Ko)

Bonjour

Une autre solution serait d'utiliser PowerQuery intégré à excel plutôt que VBA

Il pourrait d'ailleurs travailler directement à partir du fichier source si nécessaire

Actualiser par Données, Actualiser Tout

11filtre-po-pq.xlsx (57.34 Ko)

Bonjour,

Une autre solution pour 365 !?

Cdlt.

Nota : j'ai revu aussi la procédure de filtre VBA.

15filtre-po.xlsm (30.60 Ko)
iso4219

Bonjour 78chris et Jean-Eric,

Je ne pense jamais à PowerQuery, je ne l'ai jamais utilisé auparavant.

Merci de me l'avoir proposé, je vais retenir cette solution pour ma problématique.

Dans tous les cas, merci à tous les deux pour vos propositions, aussi intéressantes l'une que l'autre.

Bonne continuation.

Rechercher des sujets similaires à "filtre chronologique tableau occurences"