Macro utilisant le filtreavancée pour filtrer donnée dans un tableau

Bonjour,

Je fais un topic sur ce forum, suite à une macro que j'essaie de créer et qui me pose problème. Je vous pose mon problème, alors je dois créer un fichier excel permettant d'ajouter des dossiers dans un tableau pour cela, je fais une extraction des dossiers et je les ajoute dans une feuille exprès, depuis celle ci, j'ai mis une fonction avec la date du jour me permettant de pouvoir filtrer mes données grâce à cette date, le but étant que les dossiers ayant la date du jour soit transféré mais que les autres non et qu'ils soient ensuite envoyé dans un fichier de traitement à la suite des dossiers déjà présent.

Pour cela j'utilise la fonction Advanced Filter dans VBA, or je suis toujours en erreur lorsque je veux mettre comme destination la derniere ligne de mon fichier de traitement,

Voici un exemple de mon tableau fais sur un fichier excel a part pour des test:

screen1

Voici l'arrivée des dossiers suite a l'extraction je les colle a la suite sur cette feuille

screen2

Ici ma seconde feuille ou les dossiers sont envoyé suite au filtre de ma date du jour, la dessus il n'y pas de soucis or que les demandes etant déjà présent sur cette feuille sont supprimés, ce qui me pose problème.

J'aimerais pouvoir juste filtré mes dossiers en fonction de ma date du jour pour pouvoir envoyer les dossiers ayant ma date a la suite de ceux déjà présent dans cette feuille.

Pour cela j'ai crée cette macro en enregistrement d'écran, très simple a première vue mais lorsque je la modifie ne serait-ce qu'un minimum j'ai une compilation d'erreur

 Sheets("Feuil2").Select
    Sheets("Feuil1").Range("Tableau5[[#Headers],[#Data]]").AdvancedFilter Action _
        :=xlFilterCopy, CriteriaRange:=Sheets("Feuil1").Range("N1:N2"), CopyToRange _
        :=Range("A1:K1"), Unique:=False

Maintenant je vais vous montrer mon exemple le plus concret utilisant derniereLigne sans erreur mais supprimant automatiquement mes autres demandes quand même:

screen3

Ma feuille ou mes dossiers arrivent

scrteen4

et ma feuille de réception, je l'ai screen suite a un test on voit qu'il ne reste plus que les dossiers ayant la date du jour les anciens dossier ont tous été supprimé

Sub testsuite()
Dim dligne As Long

dligne = Range("A" & Rows.Count).End(xlUp).Row

    Sheets("FichierTraitement").Select
    Sheets("New").Range("Tableau5[[#Headers],[#Data]]").AdvancedFilter Action:= _
        xlFilterCopy, CriteriaRange:=Range("New!Criteria"), CopyToRange:=Sheets("FichierTraitement").Range("A1:k1" & dligne), Unique:=False
    Range("J11").Select
end sub

Pour les 2 macros elles ont étaient faite a partir d'une base en enregistrement de macro, mais celle-ci étant modifié j'espérais quelle puisse fonctionner mais non, pas d'erreur mais les demandes ne sont pas copié a la dernière ligne comme je le souhaiterais.

Mon message est un peu long je m'en excuse mais j'ai essayé de donner un maximum d'informations, en esperant que quelqu'un puisse m'aider sur mon problème je vous en remercie par avance.

Bonne journée à tous.

Bonsoir,
Une première proposition avec la méthode Range.Autofilter.
Cdlt.

59valroma.xlsm (20.21 Ko)
Public Sub CopyData()
Dim ws As Worksheet
Dim lo As ListObject, lo2 As ListObject
Dim n
Dim r As Range, rng As Range

    Application.ScreenUpdating = False

    Set lo = Worksheets("Sheet1").ListObjects(1)
    Set lo2 = Worksheets("Sheet2").ListObjects(1)

    With lo2
        If .InsertRowRange Is Nothing Then
            Set r = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
        Else
            Set r = .InsertRowRange.Cells(1)
        End If
    End With

    With lo
        If .ShowAutoFilter Then .AutoFilter.ShowAllData
        n = Application.Match(CLng(Date), .ListColumns(5).DataBodyRange, 0)
        If IsError(n) Then
            MsgBox "Il n'y a pas de données à la date du jour !", 64, "Information"
        Else
            .Range.AutoFilter field:=5, Criteria1:=Format(Date, "dd/mm/yyyy")
            Set rng = .AutoFilter.Range
            rng.Offset(1).Resize(rng.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy
            r.PasteSpecial xlPasteValuesAndNumberFormats
            Application.CutCopyMode = False
        End If
        .Range.AutoFilter field:=5
    End With

End Sub

Bonjour à tous

Pour compléter la réponse de Jean-Eric : un filtre avancé utilise les en-tête de la zone cible ou bien une plage vide ou seront recopiées les en-têtes de la source.

Dans le cas où les en-têtes existent, les données situées dessous sont effacées et remplacées par le résultat du filtre.

C'est le fonctionnement normal de ce filtre et cela ne peut être fait autrement.

D'où le filtre auto proposé

Je vous remercie pour vos réponses, je comprend mieux mon problème désormais, j'ai testé la macro de Jean-Eric, par contre lorsque je l'applique, le filtre de la date du jour ne s'applique pas, et il m'indique qu'aucune cellules est disponibles, pourtant les dossiers daté d'aujourd'hui sont bien présent, j'ai fais le test en les supprimant et il m'indique bien le message qu'il n'y a pas de données a la date du jour.

screen1 screen23

le tableau est comme cela pourtant il y a bien des dossiers a la date du jour, est ce due au format de la date qui serait a changé ?

Cordialement

C'est bon après quelque test, il s'agissait bien du format de cellule le problème est corrigé et mes dossiers sont bien envoyé dans ma seconde feuille a la suite, je vous remercie beaucoup pour votre aide.

Bonne journée à vous

Cordialement :)

Bonjour,
Je préfère
Cdlt.

Rechercher des sujets similaires à "macro utilisant filtreavancee filtrer donnee tableau"