Filtre dynamique

Bonjour à tous,

Je rencontre quelques problèmes avec un morceau de code VBA et j'aurais besoin de l'aide de la communauté.

J'ai un tableau dans lequel chaque début de mois des lignes viennent s'ajouter.

Un fois les données importées, j'ai besoin d'appliquer un filtre dans la colonne B (Mois) afin qu'Excel m'affiche uniquement les lignes du dernier mois importé.

Voici le code:

Sub Macro5()
A = Range("C1").Value2 'Renvoie à une cellule (formule) qui affiche la dernière ligne non vide de la colonne B

ActiveSheet.Range("Tableau1").AutoFilter Field:=1, Criteria1:=Array(A), Operator:=xlFilterValues

End Sub

Le problème viens du fait que VBA applique un filtre qui renvoie à des lignes vides. J'ai essayé différents types de format pour les dates mais rien à faire.

Le format actuel (personnalisé) est le suivant: mmmm aaaa.

Merci bien,

Stan

Bonjour,

sans fichier de travail et sans code difficile de voir ce que donne ton 'VBA applique un filtre qui renvoie à des lignes vides'

Sinon pourquoi n'utilises-tu pas le filtre chronologique placé sur 'Ce mois' ?

Soit manuellement par le filtre auto, soit transcrit en vba ce qui donne :

ActiveSheet.Range("$A$1:$C$6").AutoFilter Field:=2, Criteria1:=xlFilterThisMonth, Operator:=xlFilterDynamic

eric

Bonjour,

D'après ce que je comprends, les données B:B sont affichées au format mmmm aaaa (dans le tab mais aussi dans le menu du filtre) et le contenu de la cellule C1 passe du format mmmm aaaa au format jj/mm/aaaa lors de l’exécution du programme. Ce qui explique pourquoi VBA affiche des lignes vides.

Reste à trouver comment conserver un format identique entre B:B et C1 ou un code mieux approprié.

57filtre-dynamique.xlsm (143.13 Ko)

Merci par avance.

Stan

Bonjour à tous,

Je verrai ainsi.

Public Sub Macro5()
    With ActiveSheet.ListObjects("Tableau1")
        If .ShowAutoFilter Then .AutoFilter.ShowAllData
        .Range.AutoFilter _
                field:=1, _
                Criteria1:=xlFilterLastMonth, _
                Operator:=xlFilterDynamic
    End With
End Sub

Bonjour Jean-Eric,

Votre macro ne peux fonctionner. Dans le cadre où pour X raison nous voudrions faire tourner la macro disons en Juillet les résultats obtenus seraient valables uniquement pour le reporting du mois de juin car, la formule à pour référence la date d'aujourd'hui.

Ce que je cherche à faire, s'est dire au programme de lire la dernière ligne de la colonne des mois (B:B) et en fonction de cette cellule, filtre la colonne B:B.

Ex: Si les dernières données importées sont celles du mois de mars 2017, alors VBA devra filtrer la colonne B:B en sélectionnant uniquement mars 2017.

Le problème qu'il y a dans mon code ci-dessous, s'est que VBA convertis la date et ne la retrouve plus dans le menu du filtre.

Sub Macro5() 'Version 2 - Filtre classic
A = Range("C1").Value2 'Renvoie à une cellule (formule) qui affiche la dernière ligne non vide de la colonne B

ActiveSheet.Range("Tableau1").AutoFilter Field:=1, Criteria1:=Array(A), Operator:=xlFilterValues

End Sub

Infos complémentaires:

  • Il y a un fichier par mois (Suivi des effectifs mars 2017, Suivi des effectifs mai 2017)
  • Nous cumulons les données de chaque mois

Merci par avance.

Stan

Re,

Essaie ainsi :

Public Sub DEMO()
Dim ws As Worksheet
Dim lo As ListObject
Dim rCell As Range
Dim strFirst As String, strEnd As String

    Set lo = ActiveSheet.ListObjects(1)
    If Not lo.InsertRowRange Is Nothing Then
        MsgBox "Le tableau est vide !...", vbInformation
        Exit Sub
    End If

    With lo
        If .ShowAutoFilter Then .AutoFilter.ShowAllData
        .Sort.SortFields.Add .ListColumns(2).DataBodyRange, xlSortOnValues, xlAscending
        .Sort.Apply
        .Sort.SortFields.Clear
    End With

    Set rCell = lo.HeaderRowRange.Cells(2).Offset(lo.ListRows.Count)
    strFirst = Format(DateSerial(Year(rCell.Value2), Month(rCell.Value2), 1), "mm/dd/yyyy")
    strEnd = Format(rCell.Value2, "mm/dd/yyyy")

    lo.Range.AutoFilter field:=2, Criteria1:=">=" & strFirst, Operator:=xlAnd, Criteria2:="<=" & strEnd

End Sub

Bonjour,

J'ai essayé votre code Jean-Eric mais ça ne fonctionne pas, je tombe encore et toujours sur des lignes vides et lorsque je regarde dans les filtres pour voir ce que VBA à mis en place, j'observe qu'il y a un filtre chronologique entre... avec pour date le 12/01/1899.

Je n'y comprends plus rien.

Bien cordialement,

Stan

Bonjour,

A tester.

Quand on travaille avec des tableaux, il est exigé un peu de rigueur.

Cdlt.

148filtre-dynamique.xlsm (311.50 Ko)

Ça fonctionne parfaitement.

Merci à vous.

Bien cordialement,

Stan

Rechercher des sujets similaires à "filtre dynamique"