XL 2016 Filtrer années

  • Initiateur de la discussion Initiateur de la discussion KTM
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

KTM

XLDnaute Impliqué
Bonjour Cher Forum
Je voudrais un code pour filtrer sur ma colonne B les dates qui correspondent a l’année indiquée en D1
Merci
 

Pièces jointes

Bonjour
VB:
Sub filtreannée()
 With ActiveSheet.Range("$B$3", Cells(Rows.Count, "B").End(xlUp))
   .AutoFilter Field:=1, Criteria2:=Array(0, "12/1/" & [d1].Value), Operator:=xlFilterValues
End With
End Sub
Affecte la macro "filtreannée" a ta ton bouton
et met ta D1 en format nombre
 
Bonjour aussi à toi patricktoulon...

J'avais fait dans le basique
(comme c'est fait je poste)
NB: Comme précédemment indiqué, code adapté du code fourni par l'enregistreur de macros.
VB:
Sub Filtre_ANNEE()
D_AN = CLng(CDate("1/1/" & [D1]))
F_AN = CLng(CDate("31/12/" & [D1]))
ActiveSheet.Range("$B$1:$B$678").AutoFilter Field:=1, Criteria1:=">=" & D_AN, Operator:=xlAnd, Criteria2:="<=" & F_AN
End Sub
PS: Adapter la plage des cellules selon le classeur avant de tester.
 
Bonjour aussi à toi patricktoulon...

J'avais fait dans le basique
(comme c'est fait je poste)
NB: Comme précédemment indiqué, code adapté du code fourni par l'enregistreur de macros.
VB:
Sub Filtre_ANNEE()
D_AN = CLng(CDate("1/1/" & [D1]))
F_AN = CLng(CDate("31/12/" & [D1]))
ActiveSheet.Range("$B$1:$B$678").AutoFilter Field:=1, Criteria1:=">=" & D_AN, Operator:=xlAnd, Criteria2:="<=" & F_AN
End Sub
PS: Adapter la plage des cellules selon le classeur avant de tester.
Merci beaucoup
 
Re

•>patricktoulon
Oui.
Mais j'aime bien commencer ma journée sur XLD dans de bonnes conditions.
(C'est à dire courtoisement 😉, d'où les première lignes des messages#4 et #6)

•>KTM
Merci pour le feedback
Mais toujours pas de réponse à ma question...
Parce que suite à la lecture du post de patricktoulon
(j'ai refait un test avec l'enregistreur de macros)
Ce qui donne
Enrichi (BBcode):
Sub Macro1()
Range("B3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.AutoFilter
ActiveSheet.Range("$B$3:$B$680").AutoFilter Field:=1, Operator:= _
xlFilterValues, Criteria2:=Array(0, "12/31/2018")
End Sub
Et on reconnait alors la presque même syntaxe (en rouge) que celle de patrick.
Ensuite à partir de ce code VBA obtenu par l'enregistreur, il ne restait plus qu'à adapter comme dans le code de patrick.
Tu comprends désormais mieux le pourquoi de la question du message#2 😉
 
Re

On peut mettre directement le code dans la feuille concernée
(Comme cela, dès que la valeur change en D1, le filtre s'applique)
VB:
Private Sub Worksheet_Change(ByVal T As Range)
If T.Address = "$D$1" Then
Intersect(UsedRange.EntireRow, [B:B]).Offset(2).AutoFilter Field:=1, Operator:=7, Criteria2:=Array(0, "12/31/" & T)
Else
AutoFilterMode = False
End If
End Sub
NB: Reste à ajouter quelques contrôles
( D1 vide ou D1 avec du texte etc..)

EDITION: Bonjour job75
 
Dernière édition:
Bonjour KTM, JM, patricktoulon,

Pour tester j'ai recopié le tableau sur 39 000 lignes.

La macro du post #10 s'effectue en 0,02 seconde chez moi, c'est immédiat.

Par curiosité j'ai testé :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [D1]) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next 'si aucune SpecialCell
With [A2].CurrentRegion.Columns(2)
    .Rows.Hidden = False 'affiche tout
    If [D1] = "" Then Exit Sub
    .Replace [D1], "µ", xlPart
    .Rows.Hidden = True 'masque tout
    .SpecialCells(xlCellTypeConstants, 2).Rows.Hidden = False 'affiche les textes
    .Replace "µ", [D1]
End With
End Sub
Filtrage 2018 => 0,56 seconde, 2019 => 1,9 seconde, 2020 => 3,6 seconde.

A+
 

Pièces jointes

Une solution plus acceptable avec ce fichier (2) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [D1]) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next 'si aucune SpecialCell
With [A2].CurrentRegion.Columns(4)
    .Rows.Hidden = False 'affiche tout
    If [D1] = "" Then Exit Sub
    .Formula = "=IF(ISNUMBER(B2),IF(YEAR(B2)<>D$1,1))"
    .SpecialCells(xlCellTypeFormulas, 1).Rows.Hidden = True 'masque les nombres
    .Value = ""
End With
End Sub
Sur 39 000 lignes, filtrage 2018 => 0,29 seconde, 2019 => 0,60 seconde, 2020 => 0,43 seconde.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
128
Réponses
2
Affichages
427
Réponses
18
Affichages
197
Réponses
7
Affichages
259
Réponses
3
Affichages
174
  • Résolu(e)
Microsoft 365 DateDif()
Réponses
5
Affichages
279
Retour