0
votes

Comment filtrer toutes les dates de plus de 3 mois, référençant la date actuelle

Je veux filtrer les dates âgées de plus de 3 mois et je veux avoir la variable système

Dim Date3M_ago As Date
Date3M_ago = Worksheets("Engine").Range("C1")
Selection.AutoFilter
ActiveSheet.Range("A:C").AutoFilter Field:=46, Operator:= _
xlFilterValues, Criteria1:= Date3M_ago


1 commentaires

Votre autofilter sur la colonne 46, mais vous n'essayez que des colonnes Autofilter A: c. Par définition, un autofiltre ne peut pas être appliqué en excluant la colonne que l'autofiltre est appliqué sur. Incluez la colonne (jusqu'à) comme dans votre gamme ou définissez le champ que vous souhaitez filtrer comme un dans votre plage.


3 Réponses :


0
votes

Vous pouvez essayer ceci: xxx


1 commentaires

Avez-vous essayé cela? Selon vos paramètres, cela pourrait vous donner des résultats inattendus (comme cela a fait à ma fin).



0
votes

Espérons que quelque chose ici est utile pour vous:

Vous dites que vous devez filtrer les dates plus anciennes qu'aujourd'hui moins trois mois (comme c'est ce que votre formule dans feuilles de calcul ("moteur"). Gamme (" C1 ") fait. La même chose peut être faite via VBA avec application.worksheetfunction.eadate (date, -3) ou même daadd selon @plutian sa réponse. Si ce n'est pas ce que votre intention était, vous pouvez également faire référence à votre propre variable à nouveau, mais assurez-vous de la transformer en une double valeur à utiliser dans le filtre> CDBL (date3m_ago) .

  • Pourquoi allons-nous cela en un double? En fonction de vos paramètres régionaux Windows, l'utilisation de dates comme critère peut vous donner des résultats inattendus. C'est parce que Excel voit les dates comme date américaine . Un moyen de contourner cela, selon le lien, consiste à utiliser de longues variables, mais utiliser des variables doubles fonctionnera avec des décimales et qu'il est économisé pour utiliser CDBL dans mon option pour tenir compte des valeurs de date-heure. < / li>

    Si nous mettons ci-dessus dans la pratique avec quelques données telles que ci-dessous (dates sont formatées "DM-AAAAYY":

     Entrez la description de l'image ici < / p>

    Un morceau de code à filtrer sur la colonne C ressemblerait à: xxx

    remarque comment le champ à filtrer est dans la plage à filtrer, par exemple : la troisième colonne? La sortie ressemblerait à:

    Entrez la description de l'image ici


2 commentaires

Une autre question monsieur monsieur, avant de fermer cela.Comment, est-ce que je fais la variable de zone de champ? Toujours chercher un nom à chaque fois


@Hunter, vous pouvez appliquer une variable au lieu du champ : = 3 . Cela devient par exemple devenir quelque chose comme champ: = x . Maintenant, vous pouvez attribuer n'importe quel nombre de colonnes avec le .Range ("A: C") , donc signifie 1, 2 ou 3 à la variable x. Si vous devez augmenter la plage, vous pouvez le faire et assigner d'autres colonnes.



1
votes

Autofilter ne peut pas être appliqué sur une colonne à l'extérieur de la plage que vous essayez d'autofilter. Dans votre exemple, vous essayez de filtrer la colonne au ( champ: = 46 code>) mais n'appliquez que la plage de la colonne A à C. Appliquez une colonne à votre autofiltre, de même:

Date3M_ago = DateAdd("m", -3, Now)


7 commentaires

Fait intéressant, tandis que daadd renvoie une valeur de date, elle ne fonctionnera pas toujours comme une variable dans les critères (dépemnding sur les paramètres régionaux de Windows, je suppose). Pour le faire fonctionner, vous pouvez envelopper dans un CDBL > Critères1: = ">" & CDBL (Daadd ("m", -3, date)) . FutHermore +1 pour la bonne idée d'utiliser daadd :)


Merci JVDV, c'est vraiment intéressant de savoir. J'aurais peut-être utilisé cela pour un projet qui vient à venir, car je vais utiliser une autofiltre un peu.


Le CDate fonctionne également comme substitut de CDBL dans ce cas?


Non, ce ne serait pas. Cela signifierait même surkill comme daadd renvoie une date à laquelle elle est propre. Vérifiez le lien que j'ai fourni dans ma réponse, pour une meilleure compréhension de la raison pour laquelle le filtrage ne fonctionnerait pas avec les variables de date.


Assez juste. Comme je l'ai dit, essayez simplement d'apprendre comme je pourrais l'utiliser plus tard. Merci!


C'est quelque chose que je trouve aussi difficile à comprendre pourquoi la MS a rendu cela si difficile: s


Je suppose que c'est à faire de la compatibilité avec la douane de format de date différente. Il est presque impossible de prédire et de prendre en compte toutes les coutumes différentes. J'ai aidé quelqu'un qu'il n'y a pas trop longtemps, car il utilisait la coutume allemande des dates d'écriture sans années que dd.mm. qui (bien sûr) a complètement jeté son code.