Erreur d'execution - Filtre

Bonjour,

Dans ma macro, je me rends sur l'onglet Calendar et j'ai une action visant à supprimer les filtres afin de voir toutes mes données.

Mais voilà, cela ne fonctionne pas si je n'ai pas de filtre actif.

Je pense qu'il me faudrait une boucle Si, mais je ne sais pas faire?

Pourriez-vous m'aider, s'il-vous-plaît ? Merci...

Actuellement, l'extrait de ma Macro est:

Sheets("Calendar").Select

Application.CutCopyMode = False

ActiveSheet.ShowAllData

Bonjour,

Lorsque vous postez un code veillez à utiliser les balises de code disponible en cliquant sur l'icone </> et en collant le code dans le fenêtre. Ce sera plus lisible


Mais voilà, cela ne fonctionne pas si je n'ai pas de filtre actif.
Je pense qu'il me faudrait une boucle Si, mais je ne sais pas faire?

Pas de besoin de boucle SI --> vous pouvez essayer ceci :

Application.CutCopyMode = False 'n'est pas vraiment nécessaire mais à vous de vérifier
With ActiveWorkbook.sheets("Calendar")
    On Error Resume Next
    .ShowAllData 'defiltrer
    On Error GoTo 0
End with

Si vous voulez en apprendre sur les tableaux structurés, il existe quelques aides sur ce forum

--> le tuto de Pedro22 --> Tableaux structurés
--> le tuto de thev --> Tableaux structurés Instructions vba

Crdlt

Merci Dan,

Malheureusement, si je n'ai pas de filtre en place, le reste de ma macro ne s'éxecute pas.

Serait-ce lié à:

 On Error GoTo 0

???

re

Malheureusement, si je n'ai pas de filtre en place, le reste de ma macro ne s'éxecute pas
Serait-ce lié à: ....

Ah vous n'avez pas expliqué complètement votre souci dans votre demande
Le on error goto 0 n'a rien avoir avec le souci.

Essayez ceci alors et selon votre cas remplacez A1:L1 par référence ligne et colonnes qui doivent avoir le filtre
NB : je suppose que l'on parle bien de la fonction filtre automatique

Application.CutCopyMode = False 'n'est pas vraiment nécessaire mais à vous de vérifier
With ActiveWorkbook.sheets("Calendar")
    If .AutoFilterMode = False Then .Range("A1:L1").AutoFilter
    On Error Resume Next
    .ShowAllData 'defiltrer
    On Error GoTo 0
End with

Crdlt

Malheureusement, cela ne règle pas non plus ma problématique sauf si je n'ai pas bien compris vos conseils.

Pour en dire un peu plus sur ma Macro, la partie dont je parle est un module intermédiaire. Je vous en donne la partie qui la précède et celle qui la suit:

'Création du nouveau fichier

    Dim NewName As String
    Dim MyPath As String
    NewName = Range("E4").Value
    MyPath = "D:\_Professional Occupation_\Ortho Clinical Diagnostics\Calendars\"
    ActiveWorkbook.SaveAs Filename:=MyPath & NewName & ".xlsm", FileFormat:= _
        xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

'Désactivation des filtres

   With ActiveWorkbook.sheets("Calendar")
        If .AutoFilterMode = False Then .Range("A1:OI1").AutoFilter
        On Error Resume Next
        .ShowAllData 'defiltrer
        On Error GoTo 0
End with

'Annulation du remplissage des Cellules C3 à ND15 (Année N)

    Range("C3:ND15").Select
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

@Dan : J'ai inséré ton module. Quand je fais tourner ma Macro, qu'il y ait des filtres ou pas, mes cellules C3 à ND15 restent dans leur état antérieur. C'est comme si la Macro décidait d'ignorer certaines lignes.

Je n'ai pas d'erreur d'exécution qui s'affiche.

Bonne soirée,

re

J'ai inséré ton module. Quand je fais tourner ma Macro, qu'il y ait des filtres ou pas, mes cellules C3 à ND15 restent dans leur état antérieur. C'est comme si la Macro décidait d'ignorer certaines lignes.

Non la macro n'ignore pas de lignes, c'est juste qu'il faut comprendre comment vous fonctionnez. Et là....

Si j'analyse votre macro dans l'ordre d'exécution :

1. Vous sauvegardez votre fichier contenant la macro en utilisant le nom de la cellule E4
2. Vous agissez sur les filtres
- Soit vous remettez la fonction filtre si absente de votre feuille
- Soit vous affichez toutes les lignes de données si votre feuille inclut la fonction filtre et qu'elle est filtrée
3. Vous enlevez la couleur des cellules C3 à ND15

A. Pour le point 1, quel est le nom de la feuille de la cellule E4 --> Calendar ?
B. Pour les points 2 et 3, il faut savoir quel est le fichier concerné ? celui sauvegardé ou celui depuis lequel vous exécutez le code ?

Merci de votre retour sur les deux questions A et B ci-avant

Je n'ai pas d'erreur d'exécution qui s'affiche.

Oui mais il n'y a aucun raison puisque la ligne "On error resume next" gère justement l'erreur

A : La Cellule E4 se trouve sur un onglet appelé Dashboard (sur lequel se trouve le bouton déclenchant le déroulement de ma macro)

B : les points 2 & 3 concernent l'initialisation du nouveau fichier venant d'être renommé

Juste une autre précision concernant votre point 2
"Vous agissez sur les filtres
- Soit vous remettez la fonction filtre si absente de votre feuille
- Soit vous affichez toutes les lignes de données si votre feuille inclut la fonction filtre et qu'elle est filtrée"

La fonction filtre est là de toute manière, mais il me faut afficher les lignes absentes si jamais certaines sont exclues. Le souci avec ma fonction originale étaient que si toutes les lignes étaient déjà affichées, cela entraînait une erreur d'exécution.

Pour rappel, celle-ci était:

Sheets("Calendar").Select
    Application.CutCopyMode = False
    ActiveSheet.ShowAllData

Désolé pour mon manque de précision et un grand merci pour votre esprit d'analyse.

Re

Lorsque vous reprenez un texte d'un post, pensez à utilisez l'outil "Citation" dans la barre de menu en cliquant sur l'icone "
J'ai corrigé pour que vous voyiez


Ok mais pour le code après la sauvegarde on est d'accord que les opérations de filtre et couleur se font bien sur la feuille Calendar et qui se trouve dans le nouveau fichier ?

Ok mais pour le code après la sauvegarde on est d'accord que les opérations de filtre et couleur se font bien sur la feuille Calendar et qui se trouve dans le nouveau fichier ?

Tout à fait

Alors essayez le code comme ceci. Cela devrait fonctionner

'Création du nouveau fichier
Dim NewName As String
Dim MyPath As String
With ThisWorkbook
    NewName = .Sheets("Dashboard").Range("E4").Value
    MyPath = "D:\_Professional Occupation_\Ortho Clinical Diagnostics\Calendars\"
    .SaveAs Filename:=MyPath & NewName & ".xlsm", FileFormat:= _
        xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End With

'Désactivation des filtres
With ActiveWorkbook.Sheets("Calendar")
    If .AutoFilterMode = False Then .Range("A1:OI1").AutoFilter 'si filtre absent on remet le filtre
    On Error Resume Next
    .ShowAllData 'defiltrer
    On Error GoTo 0

    'Annulation du remplissage des Cellules C3 à ND15 (Année N)
    With .Range("C3:ND15").Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End With

si ok pensez à cloturer

crdlt

Finalement, je suis passé de ça:

Sheets("Calendar").Select
    Application.CutCopyMode = False
    ActiveSheet.ShowAllData

A cela:

Sheets("Calendar").Select
    Application.CutCopyMode = False

    If ActiveSheet.AutoFilterMode Then
    ActiveSheet.AutoFilter.ShowAllData
    End If

Voili, voilou. Merci à Jean-Paul et surtout à Dan pour tous leurs efforts.

Bonne continuation...

re

Ok mais comme je vous ai dit Application.cutcopymode ne sert pas

Sinon dans le code que je vous ai proposé (je ne vois pas trop le souci que vous avez...), il vous suffit d'essayer en ajoutant SELECT comme ceci

With ActiveWorkbook.Sheets("Calendar")
    .select

Les Select sont à éviter avec VBA ou à n'utiliser que quand cela est nécessaire

Sinon si vous tenez à conserver les Select votre code simplifié comme ceci

Application.CutCopyMode = False
with Sheets("Calendar")
    .Select
    If .AutoFilterMode Then
        .AutoFilter.ShowAllData
    End If
End with

Maintenant si le filtre n'est pas présent votre code ne le remettra pas

A vous de voir

Crdlt

Rechercher des sujets similaires à "erreur execution filtre"