Sauver, supprimer, puis remettre critères de filtrage

TooFatBoy

XLDnaute Barbatruc
Bonjour,

J'ai un classeur Excel qui sert à afficher dans un tableau (une table) des données lues dans un autre classeur servant de base de données (avec "connect", "execute" et tout le tremblement...).

Les données lues dépendent du login de session Windows (pas la même "droits" selon l'utilisateur).
Par exemple, pour chaque chef de service la liste affichée correspond uniquement à son service, alors que pour le grand patron la liste affichée est la totalité de la base de données.

Tout ceci fonctionne parfaitement bien... ou presque. :(
En effet, si l'utilisateur utilise le menu de l'application pour actualiser l'affichage de la liste, il y a un problème si au moins une colonne comporte un filtre actif.
Au lieu d'effacer la table puis lire et afficher les données, l'application affiche une nouvelle fois les données en fin de liste (ce qui double donc le nombre de lignes), sans parler du décalage de ces nouvelles lignes (d'une colonne vers la droite)...


La solution que j'envisageai était donc de sauvegarder les filtres, supprimer le filtrage, actualiser la table (vidage de la table, puis lecture et affichage des données dans la table, puisque dans ce cas ça fonctionne correctement), et enfin remettre les critères de filtrage.

Seulement, les critères de filtrage peuvent être tellement nombreux que je ne vois pas bien comment procéder.


J'ai essayé de mettre Worksheets("Feuil1").AutoFilter.Filters dans une variable MesFiltres. Ca semble fonctionner d'après l'espion de variables.
Mais dès que je supprime les filtres, Worksheets("Feuil1").AutoFilter.Filters est bien évidemment vidée, mais cette variable MesFiltres est également vidée !!! :eek:


Bref, sauriez-vous me venir en aide ?
Merci


(sinon, de mon côté je suis aussi en train de chercher dans une autre direction pour résoudre ce problème d'actualisation de ma table : arriver à faire vider la table correctement, qu'il y ait ou non des filtres actifs)
 

mromain

XLDnaute Barbatruc
Re : Sauver, supprimer, puis remettre critères de filtrage

Bonjour Marcel,

Concernant l’enregistrement et la restitution des filtres, tu peux regarder ici un exemple (mais c’est quand même assez trivial…).
Sinon, pourquoi ne pas mettre tes critères de filtre dans la requête ?

Une autre piste (difficile sans exemple sous la main) serait de regarder du côté des propriétés des données externes :

attachment.php


A+
 

Pièces jointes

  • Image1.png
    Image1.png
    184.3 KB · Affichages: 106
  • Image1.png
    Image1.png
    184.3 KB · Affichages: 135
  • Image1.png
    Image1.png
    184.3 KB · Affichages: 139

TooFatBoy

XLDnaute Barbatruc
Re : Sauver, supprimer, puis remettre critères de filtrage

Merci pour ta réponse.

J'avais pourtant effectué une recherche sur le forum, mais sans doute pas avec les bons mots car je n'avais rien trouvé.
Je vais aller regarder ça de plus près. :)
 

TooFatBoy

XLDnaute Barbatruc
Re : Sauver, supprimer, puis remettre critères de filtrage

Je suis allé voir ton lien et j'ai essayé le premier code que tu as donné. La sauvegarde les filtres marche bien.

Mais la restauration ne fonctionne pas, donc pour l'instant j'ai modifié le FOR en mettant 1 au lieu de 2 et ça fonctionne. ( For col = 1 To UBound(filterArray(), 1) )

Du moins ça fonctionne tant que les filtres sont appliqués sur des entêtes de colonnes d'une plage standard.
Or, comme mentionné dans mon premier message, j'utilise des "tables", et là ça ne fonctionne pas.

Si quelqu'un sait pourquoi ou y remédier. Merci. ;)
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Sauver, supprimer, puis remettre critères de filtrage

Bonjour Marcel, le forum,

Ci-joint un fichier contenant une classe qui permet d’enregistrer et restaurer les filtres d’un tableau. Ça reste trivial avec l’utilisation de On Errors, et mérite je pense quelques tests supplémentaires…
L’exemple est basique, il duplique les filtres d’un tableau à un autre.

A+
 

Pièces jointes

  • SauvegardeFiltres.xlsm
    23.8 KB · Affichages: 43

TooFatBoy

XLDnaute Barbatruc
Re : Sauver, supprimer, puis remettre critères de filtrage

Merci pour ta réponse rapide. :)

Ca semblait fonctionner à merveille, jusqu'à ce que je teste un filtre sur la colonne n° 3 (avec les dates).
En effet, si j'utilise un filtre sur la colonne n° 3, la macro s'arrête sur une erreur 9.
 

mromain

XLDnaute Barbatruc
Re : Sauver, supprimer, puis remettre critères de filtrage

Bonsoir Marcel,

Le problème vient du fait que les dates sont groupées dans les menus des filtres. Quand on regarde le code généré par l’enregistreur de macros, on voit qu’on passe au filtre un Array composé d’une succession de nombre et dates.
Ce lien explique que le nombre représente un groupement lié à la date qui lui succède :
  • 0 pour l’année ;
  • 1 pour le mois ;
  • 2 pour la journée.

Par exemple pour l’application de ce filtre :
attachment.php


Le code enregistré est le suivant :
VB:
Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=5, Operator:= _
        xlFilterValues, Criteria2:=Array(0, "3/3/2016", 1, "2/28/2015", 2, "3/1/2015", 2, _
        "3/7/2015", 1, "4/2/2015")
End Sub
Et il interprète bien qu’on a coché :
  • 0, "3/3/2016" : toute l’année 2016 ;
  • 1, "2/28/2015" : tout le mois de février 2015 ;
  • 2, "3/1/2015", 2, "3/7/2015" : les 1er et 7 Mars 2015 ;
  • 1, "4/2/2015" : tout le mois d’avril 2015.

On peut donc bien paramétrer ces filtres de dates.
Par contre, contrairement à tous les autres types de filtres, il est impossible de récupérer ce paramétrage…

Une solution consiste à désactiver ce groupement de date dans les filtres (se fait au niveau du classeur).
Un exemple avec le classeur ci-joint et des filtres de tous genres.

A+
 

Pièces jointes

  • Filtres.png
    Filtres.png
    37 KB · Affichages: 78
  • SauvegardeFiltres_2.xlsm
    30 KB · Affichages: 32

TooFatBoy

XLDnaute Barbatruc
Re : Sauver, supprimer, puis remettre critères de filtrage

Merci encore une fois pour ta réponse prompte et éclairée.

J'avais répondu sans avoir eu le temps de regarder comment se comporte exactement le filtrage pour les dates.
Mais avec tes explications parfaitement limpides ça va me faciliter grandement la tâche pour observer et comprendre ce filtrage particulier.

Je vois ça demain. ;)
 

mromain

XLDnaute Barbatruc
Re : Sauver, supprimer, puis remettre critères de filtrage

Bonjour Marcel,

Ci-joint une dernière version qui fonctionne également avec les groupements de date dans les filtres. La méthode pour récupérer le paramétrage des filtres de date consiste à :
  • créer une copie du classeur dans le dossier %TMP% de l’utilisateur ;
  • déziper le fichier ;
  • récupérer le fichier XML correspondant à la table ;
  • analyser son contenu et récupérer le Array composé d’une succession de nombre et dates correspondant au filtre ;
  • et supprimer tout ce qui a été créé dans le dossier %TMP%.

Ci-joint l’exemple précédent, mais avec les dates groupées dans les filtres.

A+
 

Pièces jointes

  • SauvegardeFiltres_3.xlsm
    38.1 KB · Affichages: 41

Discussions similaires