AdvancedFilter erreur 1004 si ActiveCell dans le tableau

Bonjour,

J'ai un problème dont j'ai déjà une solution mais qui ne me convient qu'à moitié et je souhaiterais savoir si il n'existerait pas une solution plus simple pour le résoudre.

Voici mon problème :

j'ai deux feuilles, l'une est une base de données "BD" et l'autre est un interface de recherche et de modification "GESTION"

j'utilise pour récupérer les information de la BD un AdvancedFilter depuis la feuille GESTION. De temps en temps quand je faisais appel à cette macro, une erreur 1004 apparaissait.

Après recherche je me suis aperçu que si la dernière cellule active sur la feuille "BD" avant que je change d'onglet était comprise dans le tableau où le filtre s'appliquait cela engendrait une erreur et ce même si j'utilise la macro depuis une autre feuille.

La solution que j'utilise est d'activer la feuille BD, de sélectionner une cellule en dehors du tableau puis de réactiver la feuille GESTION.

Je n'ai pas énormément de ralentissement lié à cette macro mais j'étais curieux de savoir si une manière plus propre de l'écrire existait peut être en s'assurant qu'à la sortie de la feuille BD, une cellule par défaut soit toujours sélectionnée...

Voici une illustration de la macro que j'utilise dans mon excel

Merci d'avance pour vos retours!

Tarmak

with shBD

'Affecte le critère de recherche pour le filtre
.Range("AA19").ClearContents
.Range("AA19").Value = shGESTION.Range("G12").Value

'Sélectionne une cellule en dehors du tableau
.Activate
.Range("B16").Select

If LastListRow < 18 Then Exit Sub
    'Filtre les noms qui ont comme critère la valeur saisie en G12 sur la feuille de GESTION
    .Range("A18:D" & LastListRow).AdvancedFilter xlFilterCopy, CriteriaRange:=.Range("AA18:AA19"), CopytoRange:=.Range("AC18")

end with

'Resélectionne la feuille de Gestion à la fin de la macro
shGESTION.Activate
shGESTION.Range("G12").Select

Bonjour,

Étrange je n'ai pas ce comportement avec un fichier que j'ai construit afin de tester ... Pourriez-vous nous joindre votre fichier et nous indiquer la manipulation exacte réalisée afin de reproduire le bug, où vous baser sur mon fichier.

Lorsque j'active la cellule en A35 puis active mon code (dont A35 fait parti des critères à extraire), alors les lignes sont correctement extraites. Et ce depuis n'importe quelle feuille.

Cdlt,

1classeur1.xlsm (16.94 Ko)

Bonjour Ergotamine,

Merci de ton retour!

En essayant de recréer la situation où le problème se posait, j'ai trouvé la source de l'erreur.

Dans ma BD j'utilise des segments pour une fonction de tri entre autre. Ce sont eux qui provoque une erreur si la cellule active est dans le tableau.

J'aurai du m'en apercevoir avant car ils demandent de se mettre à jour régulièrement mais je pensais que c'était lié aux modifications faite dans la BD.

Visiblement l'utilisation d'un advancedfilter provoque aussi leur maj...

Ci - joint un fichier où l'erreur est recréée avec deux macro, une qui marche tout le temps et l'autre qui provoque une erreur si une cellule du tableau est sélectionnée.

Le fonctionnement est le suivant : dans la feuille gestion je choisi le pays qui m'intéresse et dans la case d'à coté la liste déroulante me propose la liste des personnes dans le pays choisi. (après exécution de la macro)

Tarmak

Bonjour,

Je n'utilise que très rarement le filtre avancé mais de ce que je vois quelque soit la cellule de la table structurée dès lors qu'elle a des segments liés, la fonction Filtre Avancé dans le ruban EXCEL est grisée, et la macro plante. Donc je pense que le filtre avancé ne peut être lancé lorsqu'une cellule d'une table structurée avec des segments liés est active, ce qui semble être confirmé par cet article.

Comme vous l'avez souligné les slicers semblent vouloir se mettre à jour via la macro.

Une alternative qui fonctionne sinon en supprimant puis repositionnant les segments et les updatant à la fin :

Sub TriErreur()
Dim LastListRow As Integer
With shBD
    LastListRow = .Range("C9999").End(xlUp).Row
    ActiveSheet.Shapes.Range(Array("PAYS", "NOM")).Delete
    .Range("E7").ClearContents
    .Range("E7").Value = shGestion.Range("B6").Value
    If LastListRow < 7 Then Exit Sub
    .Range("B6:C" & LastListRow).AdvancedFilter xlFilterCopy, CriteriaRange:=.Range("E6:E7"), CopytoRange:=.Range("F6")
    ThisWorkbook.SlicerCaches.Add2(ActiveSheet.ListObjects("Tableau1"), "NOM").Slicers.Add ActiveSheet, , "NOM", "NOM", 250, 0, 144, 198.75
    ThisWorkbook.SlicerCaches.Add2(ActiveSheet.ListObjects("Tableau1"), "PAYS").Slicers.Add ActiveSheet, , "PAYS", "PAYS", 250, 150, 144, 198.75
    ThisWorkbook.SlicerCaches("Segment_PAYS").RequireManualUpdate = False
End With
End Sub

Cdlt,

Bonjour,

Merci beaucoup pour votre réponse !

Cette solution marche dans la feuille BD mais rencontre des erreurs si on l'exécute dans la feuille GESTION car l'ActiveSheet est alors la feuille gestion.
Après quelques modifications elle marche dans n'importe quelle feuille sans latence apparente.

Mon problème est résolu,

Merci encore!

Le code modifié :

Sub TriErreur()
Dim LastListRow As Integer
With shBD
    LastListRow = .Range("C9999").End(xlUp).Row
    .Shapes.Range(Array("PAYS", "NOM")).Delete
    .Range("E7").ClearContents
    .Range("E7").Value = shGestion.Range("B6").Value
    If LastListRow < 7 Then Exit Sub
    .Range("B6:C" & LastListRow).AdvancedFilter xlFilterCopy, CriteriaRange:=.Range("E6:E7"), CopytoRange:=.Range("F6")
    ThisWorkbook.SlicerCaches.Add2(.ListObjects("Tableau1"), "NOM").Slicers.Add shBD, , "NOM", "NOM", 250, 0, 144, 198.75
    ThisWorkbook.SlicerCaches.Add2(.ListObjects("Tableau1"), "PAYS").Slicers.Add shBD, , "PAYS", "PAYS", 250, 150, 144, 198.75
    ThisWorkbook.SlicerCaches("Segment_PAYS").RequireManualUpdate = False
End With
End Sub
Rechercher des sujets similaires à "advancedfilter erreur 1004 activecell tableau"