Filtre une colonne contenant des dates

Bonjour,

je souhaiterai filtrer une colonne en fonction du choix d'une liste déroulante.

la liste déroulante est un choix de date en année.

Exemple : Si je choisis la date 2025, il faudrait que la macro affiche toutes les dates inférieurs ou égales à 2025 et masque le reste avec les cellules vides.

Quelqu'un pourrait m'aider.

j'ai essayé l'enregistreur de macro ça fonctionne mais ça ne filtre que les dates présentes dans la colonnes si j'ajoute une date il ne la filtre pas.

7filte-date.xlsx (11.66 Ko)

Bonjour Fel,

Merci de supprimer les liaisons quand vous envoyez un fichier

image image

Concernant votre demande, pourquoi vouloir utiliser une macro !?

Alors qu'Excel sait le faire nativement....

Bonjour,
Une proposition à adapter.
Cdlt.

3filtre-date.xlsm (16.71 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lo As ListObject, strDt As String

    If Target.Address = "$A$2" Then
        Set lo = Me.Range("t_dates").ListObject
        If IsEmpty(Target) Then
            If lo.ShowAutoFilter Then lo.AutoFilter.ShowAllData
        Else
            strDt = "01/01/" & Target.Value
            lo.Range.AutoFilter _
                    Field:=1, _
                    Operator:=xlFilterValues, _
                    Criteria2:=Array(0, strDt)
        End If
    End If

End Sub

bonjour Jean-Eric,

J'ai pas pu essayer ton code j'ai trouvé une autre solution.

Merci bcp pour ton aide.

Bonjour Fel,

Ne pensez pas qu'à vous,
Si vous avez trouvez une solution, il serait bien de la mettre dans ce post

Cela permet à quelqu'un comme vous de la trouver

A+

En fait je n ai pas mis ma solution parce j ai fait ça comme un bourrin et j avais la flemme de reprendre le code de Jean Eric qui me semble plus synthétique.

j ai simplement utilisé l enregistreur de macro pour chaque date que j ai repris dans ma macro. C est un peu lourd mais ça marche.

ActiveSheet.ListObject("Tableau3").range.Autofilter Field=13, criterial:=(0,"12/31/2023",0,"12/31/2022")

Donc vous voyez bien que je n apporte pas grand chose c est pour cela je me suis abstenu de partager ma solution.

A bientôt,

Et bon courage à tous

Re,

Toute solution est bonne à prendre, même celle-ci

Merci pour le retour

Bonjour,
Okay pour l'enregistrement auto, mais tes valeurs sont statiques.
Cdlt.

je te mets mon bout de prog. Qu'est tu en penses?

Private Sub CommandButton1_Click()
ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13
ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=10, Criteria1:= _
Array("A ENCLENCHER", "INSTRUCTION", "REDACTION"), Operator:=xlFilterValues ' masquer "Termine"
If Range("E1") = 2023 Then
Range("AQ1:GQ1").EntireColumn.Hidden = False
Range("J1:AP1").EntireColumn.Hidden = True
Range("CL1:GQ1").EntireColumn.Hidden = True
Range("AP1:BM1").EntireColumn.Hidden = True

ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, Criteria1:= _
Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, _
"12/31/2023", 0, "4/25/2022")

Else
If Range("E1") = 2024 Then
Range("AQ1:GQ1").EntireColumn.Hidden = False
Range("J1:AP1").EntireColumn.Hidden = True
Range("CX1:GQ1").EntireColumn.Hidden = True
Range("AP1:BM1").EntireColumn.Hidden = True

ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, Criteria1:= _
Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, _
"12/31/2023", 0, "4/25/2022", 0, "12/28/2024")

Else
If Range("E1") = 2025 Then
Range("AQ1:GQ1").EntireColumn.Hidden = False
Range("J1:AP1").EntireColumn.Hidden = True
Range("DJ1:GQ1").EntireColumn.Hidden = True
Range("AP1:BM1").EntireColumn.Hidden = True

ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, Criteria1:= _
Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, _
"10/26/2025", 0, "12/31/2023", 0, "4/25/2022", 0, "5/10/2024")

Else
If Range("E1") = 2026 Then
Range("AQ1:GQ1").EntireColumn.Hidden = False
Range("J1:AP1").EntireColumn.Hidden = True
Range("DV1:GQ1").EntireColumn.Hidden = True
Range("AP1:BM1").EntireColumn.Hidden = True

ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, Criteria1:= _
Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, _
"10/26/2025", 0, "12/31/2023", 0, "12/31/2024", 0, "12/31/2026", 0, "4/25/2022")

Else
If Range("E1") = 2027 Then
Range("AQ1:GQ1").EntireColumn.Hidden = False
Range("J1:AP1").EntireColumn.Hidden = True
Range("EH1:GQ1").EntireColumn.Hidden = True
Range("AP1:BM1").EntireColumn.Hidden = True

ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, Criteria1:= _
Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, "6/28/2027", 0, _
"10/26/2025", 0, "12/31/2026", 0, "12/31/2024", 0, "12/31/2023", 0, "4/25/2022")

Else
If Range("E1") = 2028 Then
Range("AQ1:GQ1").EntireColumn.Hidden = False
Range("J1:AP1").EntireColumn.Hidden = True
Range("ET1:GQ1").EntireColumn.Hidden = True
Range("AP1:BM1").EntireColumn.Hidden = True

ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, Criteria1:= _
Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, "6/28/2028", 0, "6/28/2027", 0, _
"10/26/2025", 0, "12/31/2023", 0, "4/25/2022", 0, "5/1/2024")

Else
If Range("E1") = 2029 Then
Range("AQ1:GQ1").EntireColumn.Hidden = False
Range("J1:AP1").EntireColumn.Hidden = True
Range("FF1:GQ1").EntireColumn.Hidden = True
Range("AP1:BM1").EntireColumn.Hidden = True

End If
End If
End If
End If
End If
End If
End If

ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=38
ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=41

Unload Me

End Sub

Fel,

Mise à part le fait que je ne comprends pas ton principe de filtres fixes

Voici ton code optimisé

Private Sub CommandButton1_Click()
  ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13
  ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=10, _
    Criteria1:=Array("A ENCLENCHER", "INSTRUCTION", "REDACTION"), Operator:=xlFilterValues  ' masquer "Termine"  
  If Range("E1") >= 2023 And Range("E1") <= 2029 Then
    Range("AQ1:GQ1").EntireColumn.Hidden = False
    Range("J1:AP1").EntireColumn.Hidden = True
    Range("CL1:GQ1").EntireColumn.Hidden = True
    Range("AP1:BM1").EntireColumn.Hidden = True
  End If
  Select Case Range("E1")
    Case 2023
    ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, _
      Criteria1:=Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, "12/31/2023", 0, "4/25/2022")
    Case 2024
    ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, _
      Criteria1:=Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, "12/31/2023", 0, "4/25/2022", 0, "12/28/2024")
    Case 2025
     ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, _
      Criteria1:=Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, "10/26/2025", 0, "12/31/2023", 0, "4/25/2022", 0, "5/10/2024")
    Case 2026
    ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, _
      Criteria1:=Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, "10/26/2025", 0, "12/31/2023", 0, "12/31/2024", 0, "12/31/2026", 0, "4/25/2022")
    Case 2027
     ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, _
      Criteria1:=Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, "6/28/2027", 0, "10/26/2025", 0, "12/31/2026", 0, "12/31/2024", 0, "12/31/2023", 0, "4/25/2022")
    Case 2028
    ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, _
      Criteria1:=Array("="), Operator:=xlFilterValues, Criteria2:=Array(0, "6/28/2028", 0, "6/28/2027", 0, "10/26/2025", 0, "12/31/2023", 0, "4/25/2022", 0, "5/1/2024")
    Case Else
      ' Rien
  End Select
  ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=38
  ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=41
  Unload Me
End Sub

Ou sinon, par rapport à la 1ère demande, plutôt

Private Sub CommandButton1_Click()
  Dim ValAn
  With ActiveSheet
    ValAn = .Range("E1").Value
    On Error Resume Next
    .ShowAllData
    On Error GoTo 0
    With .ListObjects("Tableau3")
      .Range.AutoFilter Field:=10, _
        Criteria1:=Array("A ENCLENCHER", "INSTRUCTION", "REDACTION"), Operator:=xlFilterValues  ' masquer "Termine"
    End With
    If ValAn >= 2023 And ValAn <= 2029 Then
      .Range("AQ1:GQ1").EntireColumn.Hidden = False
      .Range("J1:AP1").EntireColumn.Hidden = True
      .Range("CL1:GQ1").EntireColumn.Hidden = True
      .Range("AP1:BM1").EntireColumn.Hidden = True
    End If
    .ListObjects("Tableau3").Range.AutoFilter Field:=13, Criteria1:= _
        "<=31/12/" & ValAn, Operator:=xlAnd
  End With
End Sub

A+

Message annulé pardon

pardon bruno j'avais pas vu ta 2ème proposition.

je l'ai essayé ça m'a masqué toutes les colonnes.

j'ai oublié de joindre le code.

Private Sub CommandButton1_Click()

Dim ValAn

With ActiveSheet

ValAn = .Range("E1").Value

On Error Resume Next

.ShowAllData

On Error GoTo 0

With .ListObjects("Tableau3")

.Range.AutoFilter Field:=10, _

Criteria1:=Array("A ENCLENCHER", "INSTRUCTION", "REDACTION"), Operator:=xlFilterValues ' masquer "Termine"

End With

If ValAn >= 2023 And ValAn <= 2029 Then

.Range("AQ1:GQ1").EntireColumn.Hidden = False

.Range("J1:AP1").EntireColumn.Hidden = True

.Range("CL1:GQ1").EntireColumn.Hidden = True

.Range("AP1:BM1").EntireColumn.Hidden = True

End If

.ListObjects("Tableau3").Range.AutoFilter Field:=13, Criteria1:= _

"<=31/12/" & ValAn, Operator:=xlAnd

End With

ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=38

ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=41

Unload Me

End Sub

Donc comme je disais tout à l'heure dès que je sélectionne une année cela me masque toutes les colonnes.

Re,

@Fel, merci de mettre le code entre balises SVP avec le bouton

image

Sinon merci de joindre le fichier réel mais anonymisé

A+

je suis novice dans les forums mais je vais m'habituer.

Voilà ma macros qui a un souci

5planning.zip (409.54 Ko)

PS : Désolé après avoir joint un fichier je n'arrive pas à écrire c'est pour cela que j'écris dans les balises

Bonsoir Fel,

Une leçon également à tirer de ce fil, c'est qu'avec un fichier on peut plus facilement comprendre et trouver la solution

Voici le code à mettre dans votre bouton "Planning de Gantt"

Private Sub CommandButton1_Click()
  Dim Lo As ListObject, Sht As Worksheet
  Dim ValAn As Integer, FirstAn As Integer
  Dim FirstCol As Long, DebCol As Long, FinCol As Long
  Dim ColFiltre As Long, ValFiltre As Long

  ' Définir la feuille
  Set Sht = ActiveSheet
  ' 1ère colonne du planning
  FirstCol = Sht.Range("AP3").Column
  FirstAn = Year(Sht.Range("AP3"))
  ' Dernière colonne de planning
  FinCol = Sht.Cells(3, Columns.Count).End(xlToLeft).Column
  ' Quelle année
  ValAn = Sht.Range("E1").Value
  ValFiltre = DateSerial(ValAn, 12, 31)
  ' Définir le tableau
  Set Lo = Sht.ListObjects("Tableau3")
  ' enlever le filtre si existe
  If Lo.ShowAutoFilter Then Lo.AutoFilter.ShowAllData
  Lo.Range.AutoFilter Field:=10, Criteria1:="<>TERMINE"
  ' Filtrer les lignes sur échéances règlementaires
  ColFiltre = Range("I1").Column
  Lo.Range.AutoFilter Field:=ColFiltre, Criteria1:="<=" & ValFiltre, Operator:=xlAnd
  ' Masquer certaines colonnes
  Sht.Range("J1:AO1").EntireColumn.Hidden = True
  ' Caluler la colonne de début à masquer
  DebCol = FirstCol + ((ValAn - FirstAn + 1) * 12)
  ' Masquer les colonnes supérieures à l'année choisi
  Sht.Range(Sht.Cells(1, DebCol), Sht.Cells(1, FinCol)).EntireColumn.Hidden = True
  ' Fermer l'USF
  Unload Me
End Sub

A+

J'ai testé le code c'est pas tout à fait ça..

Le filtre se fait sur la colonne "réunion de cadrage" et ceux sont les lignes qui sont masquées (A à Z) et les colonnes masquées dans le Gant en fonction de l'année saisie.

En aperçu de l'exemple avec l'année 2024. Dans le Gant on les année de 2022 à 2024

Et dans le filtre sur la colonne "M" "Réunion de cadrage" on filtre pour afficher juste les lignes 2022 à 2024.

Bonjour pour commencer,

Je pense que mon code est assez expliqué pour pouvoir l'adapter

Comme pour la colonne à filtrer

ColFiltre = Range("I1").Column

Bonjour,

j'ai essayé mais cela ne filtre pas du tout ni les lignes sur la réunion de cadrage ni les colonnes de GANT.Le GANT reste figer à 2020 à 2024.

Enfin de compte j'ai utilisé cette formule pour le filtre des mes dates.

Au début j'appliqué des filtres que sur des dates fixes ( pb si une date est rajouté) maintenant j'applique mon filtre sur une plage de dates au moins cela prends en compte si un utilisateur renseigne une nouvelle date.

ActiveSheet.ListObjects("Tableau3").Range.AutoFilter Field:=13, Criteria1:= _
        ">=01/01/2022", Operator:=xlAnd, Criteria2:="<01/01/2027"

c'est ce que je rechercher.

Merci beaucoup pour votre aide

Rechercher des sujets similaires à "filtre colonne contenant dates"