Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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
Tu as essayé d'appliquer un filtre automatique tout en laissant tourner l'enregistreur de macros.?
Si oui, tu obtiendras alors le code VBA que tu veux.
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
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
•>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 😉
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..)
re
oui moi aussi je fait deux critères en clng(date)quand les dates recherchées ne sont pas du même mois ou année
je ne sais pas si en remplaçant le "0" dans l'array par une date début ça fonctionnerait
il faudra que je teste 😉
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
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
- 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