2
votes

Comment filtrer automatiquement à l'aide d'une variable (WEEKNUM)

J'essaie de créer une macro qui filtre une table en fonction du numéro de semaine en cours.

J'ai défini la variable 'ThisWeek' pour me donner le numéro de semaine en cours:

Sheet2.ListObjects("Table3").Range.AutoFilter Field:=10, Criteria1:=">=" & ThisWeek, Operator:=xlAnd, Criteria2:="<=" & ThisWeek


1 commentaires

Par ThisWeek = "= WeekNum (TODAY ())" c'est juste une chaîne contenant toujours ces mêmes caractères. Veuillez vous référer à ma réponse pour voir comment obtenir le numéro d'une semaine en VBA.


3 Réponses :


0
votes

La meilleure méthode que je puisse utiliser pour le filtre automatique serait de résoudre TODAY () ( Date dans VBA) aux dates de début et de fin, puis d'utiliser les arguments Criteria1 et Criteria2 du filtre automatique avec l'opérateur : = xlAnd . Trouver le dimanche précédent (ou tout autre DOW) et le samedi suivant est une petite affaire dans VBA en utilisant la fonction Weekday (, []) avec quelques petits calculs.

Les fonctions Jour de la semaine et Date sont utilisées pour résoudre en permanence des dates dynamiques telles que le deuxième dimanche de mai ou le troisième lundi de novembre.


0 commentaires

0
votes

Dans VBA, vous devez utiliser Date () au lieu de TODAY (), et pour obtenir le numéro de la semaine, utilisez DatePart () .

Vous devez vérifiez comment les numéros de semaine sont comptés dans votre pays et adaptez le paramètre firstweekofyear de cette fonction.

En Europe e. g. utilisez DatePart ("ww", Date, vbMonday, vbFirstFourDays) dans VBA.
La fonction de numéro de semaine correspondante dans votre feuille de calcul est WEEKNUM (..., 21).

Dim ThisWeek As Integer
ThisWeek = DatePart("ww", Date, vbMonday, vbFirstFourDays)
Sheet2.ListObjects("Table3").Range.AutoFilter Field:=10, Criteria1:=ThisWeek


0 commentaires

0
votes

Il peut également être évalué (je ne sais pas si la partie "=" & est nécessaire):

ThisWeek = "=" & [WeekNum(TODAY())]


0 commentaires