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 withSi 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 withCrdlt
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.ShowAllDataDé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 Withsi ok pensez à cloturer
crdlt
Finalement, je suis passé de ça:
Sheets("Calendar").Select
Application.CutCopyMode = False
ActiveSheet.ShowAllDataA cela:
Sheets("Calendar").Select
Application.CutCopyMode = False
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilter.ShowAllData
End IfVoili, 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")
.selectLes 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 withMaintenant si le filtre n'est pas présent votre code ne le remettra pas
A vous de voir
Crdlt