Je remarque que mon script VBA ne fonctionne pas quand un filtre automatique est déjà activé. Une idée pourquoi c'est?
wbk.Activate
Set Criteria = Sheets("Sheet1").Cells(i, 1)
Set rng = Sheets("Sheet1").Range(Cells(i, 2), Cells(i, 4))
wb.Activate
If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData 'remove autofilter, but it crashes on this line
Selection.AutoFilter
Range("$A$1:$BM$204").AutoFilter Field:=2, Criteria1:=Criteria.Value
rng.Copy
Range("$BC$2:$BE$204").SpecialCells(xlCellTypeVisible).PasteSpecial
Merci beaucoup
AutoFilterMode sera True s'il est activé, qu'il s'agisse ou non d'un filtre appliqué à une colonne spécifique. Lorsque cela se produit, ActiveSheet.ShowAllData
sera toujours exécuté, générant une erreur (car il n'y a pas de filtrage réel).
J'ai eu le même problème et je l'ai fait fonctionner avec
If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
Cela semble empêcher ShowAllData de s'exécuter lorsqu'aucun filtre n'est appliqué, mais avec AutoFilterMode activé.
La deuxième capture Or ActiveSheet.FilterMode
devrait capturer les filtres avancés
Le moyen simple d'éviter cela est de ne pas utiliser la méthode de feuille de calcul ShowAllData
Le filtre automatique a la même méthode ShowAllData qui ne génère pas d'erreur lorsque le filtre est activé mais qu'aucun filtre n'est défini
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilter.ShowAllData
L'erreur ShowAllData method of Worksheet class failed
se produit généralement lorsque vous essayez de supprimer un filtre appliqué alors qu'aucun filtre n'est appliqué.
Je ne sais pas si vous essayez de supprimer la totalité de la AutoFilter
, ou tout simplement de supprimer tout filtre appliqué, mais il existe différentes approches pour chacun.
Pour supprimer un filtre appliqué tout en laissant AutoFilter
:
If ActiveSheet.AutoFilterMode Or ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
La raison d'être du code ci-dessus est de vérifier qu'il existe une AutoFilter
ou qu'un filtre a été appliqué (cela supprimera également les filtres avancés).
Pour supprimer complètement la AutoFilter
:
ActiveSheet.AutoFilterMode = False
Dans le cas ci-dessus, vous désactivez simplement la AutoFilter
complètement.
Je viens de rencontrer le même problème. Après quelques essais et erreurs, j'ai découvert que si la sélection était à droite de ma zone de filtre ET si le nombre d'enregistrements affichés était égal à zéro, ShowAllData échouerait .
Un peu plus de contexte est probablement pertinent. J'ai un certain nombre de feuilles, chacune avec un filtre. Je voudrais installer des filtres standard sur toutes les feuilles, donc j'utilise des VBA comme ceci
Sheets("Server").Select
col = Range("1:1").Find("In Selected SLA").Column
ActiveSheet.ListObjects("Srv").Range.AutoFilter Field:=col, Criteria1:="TRUE"
Ce code ajuste le filtre sur la colonne avec l'en-tête "Dans le contrat de niveau de service sélectionné" et laisse tous les autres filtres inchangés. Cela a pour effet malheureux que je puisse créer un filtre qui affiche zéro enregistrement. Ce n'est pas possible en utilisant l'interface utilisateur seule.
Pour éviter cette situation, je souhaite réinitialiser tous les filtres avant d'appliquer le filtrage ci-dessus. Mon code de réinitialisation ressemblait à ceci
Sheets("Server").Select
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Notez que je n'ai pas déplacé la cellule sélectionnée. Si la sélection était à droite, les filtres ne seraient pas supprimés, ce qui permettrait au code de filtre de créer un filtre à zéro ligne. La deuxième fois que le code est exécuté (sur un filtre à zéro ligne), ShowAllData échouera.
La solution de contournement est simple: déplacez la sélection dans les colonnes du filtre avant d'appeler ShowAllData.
Application.Goto (Sheets("Server").Range("A1"))
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
C'était sur la version Excel 14.0.7128.5000 (32 bits) = Office 2010
Je suis aussi le même problème. Je pense que la raison sont,
1) Lorsque ma cellule active est dans la table, "ActiveSheet.ShowAllData" peut être un travail . 2) Lorsque ma cellule active ne figure pas dans la table, "ActiveSheet.ShowAllData" ne peut pas fonctionner. ("Srv"). Range.AutoFilter Field: = 1 peut effacer le filtre.