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.
Bonjour,
Une proposition à adapter.
Cdlt.
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+
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.
je suis novice dans les forums mais je vais m'habituer.
Voilà ma macros qui a un souci
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