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

Murphy et Excel-VBA, quelques régles…

excel-vba-murphy
Excel, notamment avec le VBA permet de développer des applications complètes.
Ceci dit, il y a pleins de pièges à éviter.

Petit rappel sur les lois de Murphy : « S'il existe au moins deux façons de faire quelque chose et qu'au moins l'une de ces façons peut entraîner une catastrophe, il se trouvera forcément quelqu'un quelque part pour emprunter cette voie »

D'où un certain nombre de règles qui vous éviteront une murphysation de vos projets VBA :
- Assurez vous que le code VBA fonctionne une fois que le classeur ou la feuille a été protégée. Quelqu'un va forcément protéger le projet.
- Utiliser les nom des feuilles dans VBE et n'utilisez surtout pas les noms de feuille d'Excel. Quelqu'un va se faire un malin plaisir de les changer.
excel-nom-feuilles
- Utilisez toujours des zones nommées et surtout pas des références du style B10. Ca donnera :
range("Param-Taux").value = 15 au lieu de :
range("B10").value = 15
Car il y a aura forcément quelqu'un qui va ajouter des nouvelles lignes !

Et vous, quels sont vos règles ?

A bientôt.

Gaetan

Développez un complément Excel de A à Z

Bonjour à tous,

Voici un cours complet en 13 vidéos qui vous explique comment ajouter automatiquement des noms à une table de données, mais aussi comment transformer un fichier en complément Excel, incluant l'ajout d'un bouton dans le ruban.

Si vous avez aimé ce cours, n'hésitez pas à soutenir XLerateur ci-contre.

L'objectif de cette application est ensuite de pouvoir utiliser ces noms dans les validations de données, dans la mise en forme conditionnelle, ou encore lors de l'écriture de code VBA.

Les fichiers du cours sont disponibles ici :
- HyperNoms.xlsm (fichier excel classique)
- HyperNoms.xlam (macro complémentaire)

Et on commence avec le plan du cours et une petite vidéo d'introduction pour expliquer le contexte et l'objectif de l'application.


Vous avez aimé?
Soutenez XLerateur



definition des noms 1

Les 13 parties du cours :
1 : Explication du problème et ajout du formulaire
2 : ajout du code VBA
3 : Création du nom pour la table au complet
4 : Création des noms de titre
5 : Création des noms de données
6 : Création des noms de titres+données pour une colonne
7 : Sélection de la plage en cours
8 : Vérification du fonctionnement avec les tables
9 : Gestion des caractères interdits dans un nom
10 : Cas où la plage sélectionnée est invalide
11 : Ordre de tabulation
12 : Gestion du ruban
13 : Transformer en macro complémentaire

Amusez-vous bien !

Gaëtan