Excel VBA filtre automatique ne fonctionne pas avec la colonne de la Date
J'ai eu un problème à l'aide de filtre automatique avec VBA dans Excel.
Il fonctionne bien régulier des filtres, mais le filtrage de la colonne de date ne fonctionne pas comme prévu.
La colonne est au format date, je ne peux filtrer manuellement et par l'absurde, si je lance mon code, il filtre rien, mais quand je vérifie le filtre, puis cliquez sur ok (pas de changement appliquée au filtre des critères), il commence filtrage correctement.
Voici mon code:
ws.ListObjects(SheetName).Range.AutoFilter Field:=3, Criteria1 _
:=">" & CDate([datecell]), Operator:=xlAnd, Criteria2:= _
"<=" & CDate(WorksheetFunction.EoMonth([datecell], 3))
Quelqu'un a une idée? Il semble être un problème commun, mais je n'ai pas trouvé une solution.
Merci d'avance.
Edit: Juste pour ajouter, quand j'ai une macro enregistrer et exécuter la macro enregistrée, elle ne fonctionne pas non plus.
Oui, comme je l'ai dit, tout fonctionne comme il se doit. Il y a un problème lorsque le filtre est appliqué. Parce que la macro enregistrée ne fonctionne pas non plus.
Essayez de convertir le texte au lieu. comme
CDate([datecell])
changement de Format([datecell], "dd-MMM-yy")
Ne fonctionne pas non plus, voir la réponse et mon commentaire ci-dessous. C'est vraiment absurde.
Cela semble un peu bizarre oui.... quelle est la valeur
[datecell]
et WorksheetFunction.EoMonth([datecell], 3)
si vous Debug.Print
ou msgbox
?OriginalL'auteur Spurious | 2013-11-04
Vous devez vous connecter pour publier un commentaire.
Les Dates peuvent être délicate avec Excel VBA filtre automatique. Certains trouvent qu'il est plus facile de parcourir le tableau pour être filtré.
Parfois j'ai trouvé que l'on peut utiliser la valeur numérique de la date, surtout lorsqu'il s'agit de "dates entre"
Noter que la ci-dessus doivent être "dates réelles" et non pas des chaînes de caractères qui ressemblent à des dates. Même un seul "chaîne de date" va gâcher les choses.
Une autre option, lorsque vous traitez avec des "dates entre", c'est d'utiliser le fichier Excel stockés nombre. Voir mon montage dans la réponse
Autre chose à vérifier est que l'ensemble de vos dates sont vraiment les dates, et pas des liens qui ressemblent à des dates. Même un seul "chaîne de date" dans la liste de gâcher les choses.
La Double Méthode a fonctionné, il me semble.
Modifier votre réponse à ne montrer que le CDbl Version et je marque comme correct et de voter.
OriginalL'auteur Ron Rosenfeld
Autofilter()
travaille avec "universel" formatyyyy-mm-dd
, c'est à dire:C'est mieux car Excel ne peut pas "comprendre" ce mal . Si vous utilisez
mm/dd/yyyy
oudd/mm/yyyy
Excel peut s'adapter 02-janv 01-févr.voir:
http://www.oaltd.co.uk/ExcelProgRef/Ch22/ProgRefCh22.htm
Edit:
Nous pouvons créer une Fonction universelle à l'aide de
Application.International
comme:OriginalL'auteur Makah
vous avez besoin de convertir le format vers le format américain, comme:
">" & Format([datecell], "mm/dd/yyyy")
VBA ne pas comprendre un autre format.
OriginalL'auteur Karlos Henrique
Cette syntaxe fonctionne pour moi:
Indice obtenu grâce à une macro enregistrement
OriginalL'auteur Mago Fabian
Karlos Henrique,
Merci pour suggérer Format([datecell], "mm/dd/yyyy").
Il fonctionne dans mon fichier.
Mon code précédent est :
Mon code modifié est :
Grâce.
OriginalL'auteur pmyk
Correspondent à votre "jj-mm-aaaa" pour le format de la colonne, donc si vous avez des "16-Aug-16" en tant que votre source de données mise en forme puis faire le filtre sous la forme "jj-mmm-yy"
OriginalL'auteur Graham P
La seule solution est de configurer correctement le format de la colonne cible. Si sa forme "custom", même si elle ressemble à une date, ça ne marchera pas.
Vous demandez VBA pour filtrer en fonction d'une date, donc le format des colonnes a une date trop.
OriginalL'auteur Andrés Roldán