Macro et Filtre

Bonjour à tous !

Après qq recherches différents forum, je ne trouve pas mon bonheur.

Je reviens donc vers vous pour un petit coup de main.

Je voudrais filtrer une feuille que nous appelerons "IDOP" en fonction de plusieurs critères la majorité d'entres eux ne me pose pas de pb.

Mais le filtre sur les dates me bloque !

Je voudrais que ma macro filtre les dates de la manière suivante :

- Entre : une "date X" renseignée dans l'onglet que nous appelerons "DATE" et une date X+14 qui est tout simplement ma "date X" à laquelle on ajoute 14 jours.

J'ai tenté l'utilisation d'une variable qui en soi fonctionne mais à ma grande surprise au lieu d'avoir le format JJ/MM/AAAA, j'ai dans le filtre le format MM/J(ouJJ)/AAAA.

Donc ma question comment avoir la date dans le bon ordre ?

Dim i As Date
 i = Sheets("DATE").range("B1")

    Sheets("Identification OP").Activate

    ActiveSheet.ListObjects("Tableau47").range.AutoFilter Field:=8, Criteria1:=i, Operator:=xlAnd, Criteria2:=i + 14

Merci !

Bonjour,

Quelques propositions à tester :

Dim i As Date
 i = CDate(Sheets("DATE").range("B1"))
 Sheets("Identification OP").ListObjects("Tableau47").range.AutoFilter Field:=8, Criteria1:=i, Operator:=xlAnd, Criteria2:=i + 14
Dim i As Long
 i = Sheets("DATE").range("B1")
Sheets("Identification OP").ListObjects("Tableau47").range.AutoFilter Field:=8, Criteria1:=i, Operator:=xlAnd, Criteria2:=i + 14

Tu peux aussi "reconstruire" la date avec :

DateSerial(Année,Mois,Jour)

Bonjour,

Un exemple dans le fichier joint.

Cdlt.

10ben74.xlsm (27.05 Ko)
Public Sub Filter_data()
Dim lo As ListObject
Dim strStart As String, strEnd As String

    With ActiveSheet
        Set lo = .ListObjects("T_Données")
        strStart = Format(.Cells(4, 2).Value, "mm/dd/yyyy")
        strEnd = Format(.Cells(4, 2).Value + 14, "mm/dd/yyyy")
    End With
    With lo
        If .ShowAutoFilter Then .AutoFilter.ShowAllData
        .Range.AutoFilter _
                field:=1, _
                Criteria1:=">=" & strStart, _
                Operator:=xlAnd, _
                Criteria2:="<=" & strEnd
    End With
End Sub

Hello et Merci à tout les 2 pour vos réponses !

Pedro22,

Malheureusement, cela ne fonctionne pas.

Pour la première ligne proposée je me retrouve dans la même situation qu'expliquée initialement.

Tandis que pour la seconde ce sont je suppose les dates au format nombre que je retrouve dans le filtre.

Jean-Eric,

Je n'arrive pas à adapter la ligne de code ci-dessous

 Set lo = .ListObjects("T_Données")

J'ai bien vu qu'il s'agissait de la tables des dates, je l'ai recréée dans mon fichier mais la macro s'arrête toujours sur cette ligne de code je ne comprends pas pourquoi. Je joins le fichier pour que vous puissiez y jeter un oeil.

Merci !

7ben74.xlsm (97.71 Ko)

Re,

Il faut mettre tes données sous forme de tableau (Ruban Excel) et le renommer T_Données (initialement Tableau1).

Cdlt.

Hello !

merci pour ton retour et désolé pour le temps de réponse.

Plusieurs tentatives, malheureusement infructueuses.

La macro bloque toujours la-dessus

Set lo = .ListObjects("T_Données")

Est-ce que cela peut venir du fait que toutes mes données soit sous forme de tableau et non uniquement la colonne date ?

Je ne peux pas mettre que cette colonne sous forme de tableau...

Merci par avance

Ben

Bonjour,

As-tu la possibilité d'envoyer un fichier pour illustrer tes propos ?

Cdlt.

bonjour à tous

simplification :

ajouter une colonne de pointage dans la table de données :

= SI(tescritèresdedate ; 1 ; 0 )

les critères seront sans doute OU(date>datederéférencemini ; date>datederéférencemaxi)

ensuite un TCD

et tu le filtres d'un clic sur la valeur 1 de la colonne de pointage

pas de VBA

dans 20 ans ça fonctionnera encore et tout le monde pourra faire évoluer ton fichier

amitiés

Re,

Je n'avais pas vu ton fichier.

A joute la feuille manquante avec les dates.

A te relire.

7ben74-1.xlsm (110.51 Ko)
Sub testfiltre()
Dim lo As ListObject
Dim strStart As String, strEnd As String

    With ActiveSheet
        'Si un seul tableau dans la feuille
        Set lo = .ListObjects(1)
        'sinon le nom du tableau (dans ton exemple Tableau47 ; voir gestionnaire de noms)
        'Set lo = .ListObjects("Tableau47")
        strStart = Format(.Sheets("Feuil1").Range("B1").Value, "mm/dd/yyyy")
        strEnd = Format(.Sheets("Feuil1").Range("B1").Value + 14, "mm/dd/yyyy")
    End With
    With lo
        If .ShowAutoFilter Then .AutoFilter.ShowAllData
        'Field = numéro de colonne comportant la date
        .Range.AutoFilter _
                field:=8, _
                Criteria1:=">=" & strStart, _
                Operator:=xlAnd, _
                Criteria2:="<=" & strEnd
    End With

End Sub

Hello Jean-Eric

Voici !

6testfiltredate.xlsm (147.22 Ko)

Re,

J'ai répondu !...

Hello ! yes j'ai vu ! merci

J'ai essayé d'adapter !

On est sur la bonne voie les bonnes dates rentrent au bon endroit dans les filtres mais parce qu'il y a un mais, j'ai l'impression que la macro ne valide pas le filtre. j'essaye de comprendre pourquoi mais je bloque, je te joins le fichier.

6testfiltredate.xlsm (151.20 Ko)

Re,

Pourquoi avoir modifié la procédure ?

Cdlt.

Re,

Parce que la macro bloque direct sur tes lignes de modif de format.

J'ai testé en enlevant juste la partie format, ça a fonctionné donc j'ai laissé comme ça.

J'ai checké le filtre et j'avais la date au bon format JJ/MM/AAAA

Sub ()
Dim lo As ListObject
Dim strStart As String, strEnd As String

    With ActiveSheet
        Set lo = .ListObjects("Tableau47")
        'strStart = Format(.Sheets("Feuil1").Range("B1").Value, "mm/dd/yyyy")
        'strEnd = Format(.Sheets("Feuil1").Range("B1").Value + 14, "mm/dd/yyyy")
        strStart = Sheets("Feuil1").Range("B1").Value
        strEnd = Sheets("Feuil1").Range("B1").Value + 14

    End With
    With lo
        If .ShowAutoFilter Then .AutoFilter.ShowAllData
        .Range.AutoFilter _
                field:=8, _
                Criteria1:=">=" & strStart, _
                Operator:=xlAnd, _
                Criteria2:="<=" & strEnd
    End With

End Sub

Re,

Essaie ainsi :

Sub filtrer()
Dim ws As Worksheet, ws2 As Worksheet
Dim lo As ListObject
Dim strStart As String, strEnd As String

    Set ws = Worksheets("Identification OP")
    Set ws2 = Worksheets("Feuil1")

    Set lo = ws.ListObjects("Tableau47")

    With ws2
        strStart = Format(.Range("B1").Value, "mm/dd/yyyy")
        strEnd = Format(.Range("B1").Value + 14, "mm/dd/yyyy")
    End With

    With lo
        If .ShowAutoFilter Then .AutoFilter.ShowAllData
        .Range.AutoFilter _
                field:=8, _
                Criteria1:=">=" & strStart, _
                Operator:=xlAnd, _
                Criteria2:="<=" & strEnd
    End With

End Sub
Rechercher des sujets similaires à "macro filtre"