Tout d'abord, pour bien comprendre la macro il faut avoir utilisé un filtre avancé.
Dans le fichier joint, tu verras que j'ai ajouté une plage "Critères" pour te permettre de faire le test suivant :
Tu sélectionnes la plage de données A4:D10.
Clic sur Données > Trier et Filtrer / Avancé
Clic dans la zone de critères, puis tu sélectionnes F4:F5
OK.
Tu peut voir que le filtre a été appliqué avec le critère choisi.
La macro reprend le même type de filtre.
Dans le classeur envoyé précédemment, j'ai simplement masqué la zone de critères qui se trouve en N1:P2.
Le premier critère est sur la date. On indique que les données à afficher doivent être supérieures ou égales au premier jour du mois choisi.
On utilise pour cela la formule =">=" &I3
Le deuxième critère est également sur la date. On indique que les données à afficher doivent être inférieures ou égales au dernier jour du mois choisi.
On utilise pour cela la formule ="<=" & FIN.MOIS(I3;0)
Le troisième critère est sur le nom.
Pour faciliter la mise en place des critères, tu remarqueras que j'ai modifié les données dans la colonne "Période" de la feuille "Données".
J'ai remplacé les mois en toutes lettres par la date du premier jour du mois correspondant (01/01/2014 au lieu de janvier).
J'ai ensuite appliqué le format personnalisé "mmmm" pour garder l'affichage des mois en toutes lettres.
La liste de validation en I3 affiche elle aussi les mois en toutes lettres mais si tu regardes dans la barre de formule, tu verras que la valeur est une date. Cela permet d'utiliser directement cette valeur pour établir le critère.
Voila, si tu as compris tout cela, la macro ne présente plus aucun mystère
Sub Trier()
Application.ScreenUpdating = False
With Worksheets("Dépenses")
'Si la feuille de calcul est en mode filtre, on affiche toutes les lignes de la liste actuellement filtrée
If .FilterMode = True Then .ShowAllData
'On applique un filtre avancé sur le Tableau1 suivant les critères définis en N1:P2
.Range("Tableau1[[#Headers],[#Data]]").AdvancedFilter Action:=xlFilterInPlace _
, CriteriaRange:=Range("Criteres"), Unique:=False
End With
End Sub
J'espère que tout cela sera un peu plus clair pour toi.
A te relire.
A+