Excel VBA - ActiveSheet.ShowAllData, La 1004 : "La méthode ShowAllData de la classe Worksheet a échoué"

Bonjour à tous,

Si vous avez déjà eu à utiliser ShowAllData en VBA, vous avez certainement rencontré ceci !

ShowAllData-Excel-VBA-1004

Voici un petit résumé de ce qui se passe...Du moins, de ce que j'ai pu en comprendre jusqu'à présent !
Voici le lien vers le fichier

Le code utilisé est celui-ci :
ActiveSheet.ShowAllData ou encore Feuil1.ShowAllData
qui à la lecture pourrait vouloir dire : afficher les données de la feuille active ou de la feuil1.
Mais en fait, il vaudrait mieux lire : afficher les données du filtre de la cellule active.

En effet, soit un tableau filtré comme ceci :
Table-ShowAllData-Excel-VBA-1004

Le code suivant ne fonctionnera pas, car la cellule active n'est pas sur le tableau.
Sub SubShowAllData_fonctionne_pas()
Range("H1").Select
Feuil1.ShowAllData
End Sub

De fait, celui-ci fonctionnera mieux, mais je ne le comprends pas, car ca fonctionnera même si on se trouve sur une autre feuille !
Sub SubShowAllData_fonctionne_parfois()
Range("A1").Select
Feuil1.ShowAllData
End Sub

Mais malheureusement, il ne fonctionnera qu'une seule fois.
En effet, une fois que l'on aura tout ré-affiché, le code va afficher la même erreur, car toutes les données seront affichées.
D'où un test qui permet de savoir si le filtre est activé :
Sub ShowAllData_fonctionne_a_priori_toujours()
Feuil1.Select
Range("A1").Select
If Feuil1.FilterMode Then
Feuil1.ShowAllData
End If
End Sub

Et une solution alternative basée sur une idée de Dominique.
Celle-ci supprime et remet le filtre automatique.
Cette fonctionnalité ne fonctionne cependant pas avec des filtres avancés.
Sub Supprime_filtre_alternative()
Feuil1.Select
Range("A1").Select
If Feuil1.FilterMode Then
Feuil1.UsedRange.AutoFilter
Feuil1.UsedRange.AutoFilter
End If
End Sub

A bientôt

Gaëtan