Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Filtre avancé sur date en vba

Tableau123

XLDnaute Nouveau
Bonjour,
J'ai un tableau dans lequel je voudrais faire un filtre avancé avec comme critère une date supérieure à aujourd'hui.
En utilisant la fonction filtre avancé sur excel, j'ai bien le résultat qui s'affiche mais dès que j'utilise cette fonction en vba, je n'ai aucun résultat.
Les données sont sur la feuille BASE et le résultat doit se trouver sur la feuille ECHEANCES A VENIR.
J'ai beau cherché sur internet mais, malheureusement, je n'ai rien trouvé.
Pouvez-vous m'aider à résoudre ce problème ?
Ci-joint le fichier en pièce jointe.
Merci beaucoup pour votre aide.
 

Pièces jointes

  • Filtre avancé.xlsm
    18.2 KB · Affichages: 10

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour tableau123,
Un essai en PJ avec :
VB:
Sub Worksheet_Activate()
    Application.ScreenUpdating = False                          ' Ecran figé
    Range("A2:G" & Range("A65500").End(xlUp).Row).ClearContents ' Efface matrice de sortie
    DL = Sheets("BASE").Range("A65500").End(xlUp).Row           ' Dernière ligne de Base
    Range("A1:G" & DL) = Sheets("BASE").Range("A1:G" & DL).Value ' Copie tableau en valeur
    With ActiveSheet.UsedRange
        .Columns(2).EntireColumn.Insert                         'Insère une colonne auxiliaire
        With .Columns(2)
            .FormulaR1C1 = "=IF(RC[6]<TODAY(),1,"""")"          ' Insère formule, 1 si < aujourd'hui
            .Value = .Value                                     ' Supprime les formules
            .EntireRow.Sort .Cells, xlDescending                'Tri pour regrouper et accélérer
            On Error Resume Next                                'Si aucune SpecialCell
            .SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete ' Suprime les lignes < aujourd'hui
            .EntireColumn.Delete                                'Supprime la colonne auxiliaire
        End With
    End With
    With ActiveSheet.UsedRange: End With                            'Actualise les barres de défilement
End Sub
La réactualisation s'effectue lorsqu'on sélectionne la feuille Échéance.
 

Pièces jointes

  • Filtre avancé V2.xlsm
    20 KB · Affichages: 13

Jacky67

XLDnaute Barbatruc
Bonjour,
Une proposition avec ce code
VB:
Sub ECHEANCES_A_VENIR()
    Dim plage
    Feuil2.Cells.Clear
    Set plage = Feuil1.UsedRange
    plage.AutoFilter Field:=7, Criteria1:=">" & Date * 1
    plage.SpecialCells(xlCellTypeVisible).Copy Feuil2.[a1]
    plage.AutoFilter
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

La version avec le filtre avancé
(test OK sur Excel 2013)
VB:
Sub Filtre_Avancé_OK()
Dim Criteres As Range
Set Criteres = Range("'ECHEANCES A VENIR'!I1:I2") ' définition plage critères
'On applique le filtre avancé
Sheets("BASE").Range("A1:G11").AdvancedFilter _
    Action:=xlFilterCopy, _
    CriteriaRange:=Criteres, _
    CopyToRange:=Range("'ECHEANCES A VENIR'!Extract"), _
    Unique:=False
End Sub
NB= en I2, la formule est: =">"&AUJOURDHUI()
 

Staple1600

XLDnaute Barbatruc
Re

Une version qui tient prend en compte l'agrandissement du tableau sur la feuille BASE.
VB:
Sub Filtre_Avancé_OK_bis()
Dim vBase As Range, Criteres As Range, Recopie As Range
With Sheets("BASE")
    Set vBase = Range(.Cells(1), .Cells(Rows.Count, "G").End(xlUp))
End With
With Sheets("ECHEANCES A VENIR")
    Set Criteres = .[I1:I2] ' définition plage critères
    Set Recopie = .[A1:G1] 'définition plage de recopie
End With
'On applique le filtre avancé
vBase.AdvancedFilter xlFilterCopy, Criteres, Recopie, False
End Sub
 

Discussions similaires

Réponses
16
Affichages
639
Réponses
12
Affichages
658
Réponses
16
Affichages
728
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…