Sauvegarder / restaurer un filtre

Bonjour,

Votre question est incomplète, si vous sélectionnée une date, la feuille à créer sera "N°" & N° de compte" du compte situé à côté de la date sélectionnée, ou bien la feuille créée aura pour nom la date?

Si c'est le premier cas, faut -il filtrer à la fois sur la date et le N° de compte ou uniquement sur la date?

La feuille aura le nom de la date.

L'idée est de récupérer l'intégralité des écritures ayant pour date la date sélectionnée (même fonctionnement que pour les numéros de comptes).

Certains filtres peuvent être présents sur la feuille mais ce ne sera pas systématique.

Essayez ceci:

Sub Sauvegarde_Filtre()
    Dim f1 As Worksheet, f2 As Worksheet, f3 As Worksheet
    Dim DerLig As Long, NbCol As Long, Col As Long

    Application.ScreenUpdating = False
    Set f1 = Sheets("FEC")
    Set f2 = Sheets("Copie_FEC")
    If ActiveCell.Column < 4 Or ActiveCell.Column > 5 Then
        MsgBox "Veuillez sélectionner une date ou un N° de compte"
        Exit Sub
    End If
    With f1.AutoFilter
        DerLig = f1.Range("A1").CurrentRegion.Rows.Count
    End With
    If ActiveCell.Column = 4 Then
        Col = 4
        Crit = CDate(ActiveCell.Value)
    ElseIf ActiveCell.Column = 5 Then
        Col = 5
        Crit = CLng(ActiveCell.Value)
    End If
    If Col = 5 Then
        Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "N°" & Crit
    Else
        Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = Replace(Crit, "/", "-")
    End If
    Set f3 = Sheets(ActiveSheet.Name)
    f2.Range("A1:F" & DerLig).AutoFilter Field:=Col, Criteria1:=Crit
    f2.Range(f2.Cells(1, "A"), f2.Cells(DerLig, "F")).SpecialCells(xlVisible).Copy f3.Range("A1")

    f3.Columns("C:C").NumberFormat = "0"
    f3.Cells.EntireColumn.AutoFit
    f2.AutoFilterMode = False
    f2.Range("A1:F1").AutoFilter
    Set f1 = Nothing
    Set f2 = Nothing
    Set f3 = Nothing
End Sub

Avec ce code, une feuille est bien générée avec le nom de la date.

Cependant aucune écriture n'est reprise sur cette feuille

image

J'ai fait plusieurs essais et ça marche très bien, peut-être que vous n'avez pas appliqué le filtre sur la bonne feuille "FEC"!

Je pense avoir compris d'où provient le problème, lorsque je lance la macro en sélectionnant le 18/12/2020.

Le filtre est effectué avec le format américain, à savoir : 12/18/2020 (ce qui ne trouve rien évidemment)

image

Lorsque je sélectionne le 01/01/2020 par exemple la macro fait un filtre avec comme valeur recherchée : 1/1/2020, ce qui plante la macro étant donné que les 0 ne sont pas repris.

La macro tourne très bien lorsque je sélectionne le 10/10/2020 étant donné qu'il n'y a pas de problématique d'inversion du mois et du jour (ou de suppression du 0).

Peut être y a t'il un paramétrage à faire quelque part pour éviter ce problème ?

Camille

Lorsque je sélectionne le 01/01/2020 par exemple la macro fait un filtre avec comme valeur recherchée : 1/1/2020, ce qui plante la macro étant donné que les 0 ne sont pas repris.

Si vous avez des dates au format "j/m/aaaa", c'est quelles sont au format texte, mais j'ai fait des essais, ça marche.

Question: ces dates sont bien présentent dans la feuille "Copie_FEC" ? sinon il faut faire une copie de la feuille "FEC" en cliquant sur le bouton vert.

Essayez ceci:

Sub Sauvegarde_Filtre()
    Dim f1 As Worksheet, f2 As Worksheet, f3 As Worksheet
    Dim DerLig As Long, NbCol As Long, Col As Long

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set f1 = Sheets("FEC")
    Set f2 = Sheets("Copie_FEC")
    If ActiveSheet.Name = "FEC" Then
        If ActiveCell.Column < 4 Or ActiveCell.Column > 5 Then
            MsgBox "Veuillez sélectionner une date ou un N° de compte"
            Exit Sub
        End If
        With f1.AutoFilter
            DerLig = f1.Range("A1").CurrentRegion.Rows.Count
        End With
        If ActiveCell.Column = 4 Then
            Col = 4
            Crit = CDate(ActiveCell.Value)
        ElseIf ActiveCell.Column = 5 Then
            Col = 5
            Crit = CLng(ActiveCell.Value)
        End If
        On Error Resume Next
        If Col = 5 Then
            Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "N°" & Crit
        Else
            Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = Replace(Crit, "/", "-")
        End If
        If Err.Number <> 0 Then
            MsgBox "La feuille existe déjà"
            ActiveSheet.Delete
            Exit Sub
        End If

        Set f3 = Sheets(ActiveSheet.Name)
        f2.Range("A1:F" & DerLig).AutoFilter Field:=Col, Criteria1:=Crit
        f2.Range(f2.Cells(1, "A"), f2.Cells(DerLig, "F")).SpecialCells(xlVisible).Copy f3.Range("A1")

        f3.Columns("C:C").NumberFormat = "0"
        f3.Cells.EntireColumn.AutoFit
        f2.AutoFilterMode = False
        f2.Range("A1:F1").AutoFilter
    Else
        MsgBox "Veuillez sélectionner une cellule de la feuille ""FEC"""
    End If
    Set f1 = Nothing
    Set f2 = Nothing
    Set f3 = Nothing
End Sub

Il n'y a rien à faire, à chaque fois que je sélectionne une date et que j'active la macro il me sort une feuille vide.

Je vous mets le fichier utilisé en PJ.

Camille

Chez moi tout marche très bien, mettez un point d'arrêt comme sur l'image et avancez en pas à pas avec F8, passez la souris sur la variable "Crit", quelle est sa valeur?

camille1234

Sinon ajoutez * 1 comme sur l'image

camille1234

Crit = 05/11/2020

ça ne fonctionne pas, même en multipliant par 1.

Par contre quand je prends la date du 10/10/2020 ça fonctionne.

image

C'est vraiment bizarre,

mettez un point d'arrêt sur cette ligne:

        f2.Range("A1:F" & DerLig).AutoFilter Field:=Col, Criteria1:=Crit

Lancez la macro,

- à l'arrêt sur la ligne marquée par le point d'arrêt:

- Que est la valeur de la variable "Col" ? ce doit être 4.

- basculez sur la feuille excel "Copie_FEC", puis revenez sur le code et faites 1 fois F8,

- Que est la valeur de la variable "DerLig" ? ce doit être 2035

Oui c'est bien ça, col = 4 et Derlig = 2035

C'est bon je l'ai.

J'ai ajouté le format et ça fonctionne

f2.Range("A1:F" & DerLig).AutoFilter Field:=Col, Criteria1:=Format(Crit, "dd/mm/yyyy")

Merci pour votre aide Arturo !

Ouf, mais c'est tout de même bizarre que ça fonctionne bien chez moi et pas chez vous, "bizarre , bizarre, vous avez dit bizarre, bizarre..."

Edit:

il faudra modifier comme ci-dessous car la variable "Crit" est soit un nombre soit une date donc:

        Set f3 = Sheets(ActiveSheet.Name)
        If Col = 5 Then
            f2.Range("A1:F" & DerLig).AutoFilter Field:=Col, Criteria1:=Crit
        ElseIf Col = 4 Then
            f2.Range("A1:F" & DerLig).AutoFilter Field:=Col, Criteria1:=Format(Crit, "dd/mm/yyyy")
        End If

Par contre chez-moi ça ne marche pas.

Rechercher des sujets similaires à "sauvegarder restaurer filtre"