IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Filtrage avancé et tableau structuré avec la fonction advance filter ne semble pas fonctionner [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut Filtrage avancé et tableau structuré avec la fonction advance filter ne semble pas fonctionner
    Bonsoir,

    J'ai repris l'excellent tuto sur les filtres avancés, mais j'ai un petit souci.
    https://philippetulliez.developpez.c...edfilter/#LXIV

    J'essaie d'utiliser un tableau structuré pour faire un export de données filtrées or cela ne fonctionne pas correctement.
    alors que si j'utilise une plage nommée (grâce à la fonction décaler) cela fonctionne.

    J'ai essayé d'établir le filtre elaboré "à la main" et sur tableau structuré ça ne marche pas !!
    est une limitation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub Export()
      ThisWorkbook.Sheets("Résultat").Cells.Clear
      Range("Tableau1").AdvancedFilter _     '<<<==== Tableau1 ne fonctionne pas ne me renvoie qu'une seule ligne alors que si je mets une zone nommée ça marche.
             Action:=xlFilterCopy, _
             CriteriaRange:=ThisWorkbook.Sheets("Param_Export").Range("A1:Y2"), _
             CopyToRange:=ThisWorkbook.Sheets("Résultat").Range("A1"), _
             Unique:=False
    End Sub
    Merci
    Denis

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Si tu vérifies le gestionnaire de noms, tu peux voir que la ligne d'en-tête n'est pas associée au nom

    Il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Tableau1[#All]").AdvancedFilter _
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonjour,
    si vous voulez faire une extraction par filtres élaborés depuis une base de données d'une feuille A vers une feuille B, vous ne pouvez l'effectuer que depuis la feuille B. C'est à dire que la feuille active au moment de l'extraction doit être celle qui reçoit l'extraction.
    J'espère avoir été clair dans mes explications.
    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  4. #4
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Bonjour Chris,

    En effet la ligne d'entete n'est pas dans la définition des noms.
    Par contre ta syntaxe ne semble pas fonctionner. j'ai une erreur 1004 lorsque que je mets [#A20] (l'entete de mon tableau commence en ligne 20.
    J'ai aussi essayé, mais pareil erreur 1004.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("Tableau1[#Tout]").AdvancedFilter
    Transitoire, oui je sais, c'est d' ailleurs expliqué dans le tuto de Philippe. mais avec le code VB, je jongle sur trois feuilles. La feuille source, la feuille où sont stockés les paramètres (les filtres) et une feuille pour publier les résultats.
    Dans mon application, j'applique une série de flitrages successifs et je publie les différents résultats sur une feuille.
    Ca fonctionne sans problème.

    Denis

  5. #5
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Je ne vois pas le rapport entre "Tableau1[#Tout]" qui désigne la plage complète du tableau quelle que soit sa position et l'endroit ou commence le tableau...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour
    Citation Envoyé par Transitoire Voir le message
    si vous voulez faire une extraction par filtres élaborés depuis une base de données d'une feuille A vers une feuille B, vous ne pouvez l'effectuer que depuis la feuille B. C'est à dire que la feuille active au moment de l'extraction doit être celle qui reçoit l'extraction.
    En VBA cela ne joue pas : il suffit de bien indiquer les feuilles concernées
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  7. #7
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    J'ai essayé d'établir le filtre elaboré "à la main" et sur tableau structuré ça ne marche pas !!
    est une limitation
    C'était un rappel pour : à la main.
    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'essaie d'utiliser un tableau structuré pour faire un export de données filtrées or cela ne fonctionne pas correctement.
    alors que si j'utilise une plage nommée (grâce à la fonction décaler) cela fonctionne.
    Voir cette contribution titrée La méthode AdvancedFilter et l'objet ListObject
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Merci Philippe, ça demande à etre étudié, listobject encore une nouvelle notion à capter.
    Pour l'instant je reste avec ma zone nommée avec décaler, puisque ça fonctionne.
    Denis

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    listobject encore une nouvelle notion à capter
    ListObject est tout simplement le tableau structuré

    Pour utiliser la méthode AdvancedFilter avec un tableau structuré, on écrira par exemple ListObjects("Tableau1").Range.AdvancedFilter suivi des arguments
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    M E R C I Philippe,

    Si déjà tu prends la peine d'argumenter, je prends la peine de tester.

    et donc je confirme cela fonctionne , ce dont tu ne doutais pas, mais des fois je suis un peu lourd.

    Donc je livre ma syntaxe complète. qui consiste à avoir une feuille des saisie des critères (fixes mais modifiables si besoin), une feuille de données alimenté par une requete. et une feuille résultat ou je publie les filtrages par groupement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Option Explicit
    Sub Export()
    Dim Ma_Ligne
      ThisWorkbook.Sheets("Resultat").Cells.Clear
     
    ' Filtrage 1
    ThisWorkbook.Sheets("Resultat").Range("A1") = "Mon premier filtrage"
     
    ThisWorkbook.Sheets("Donnees").ListObjects("Tableau1").Range.AdvancedFilter _
             Action:=xlFilterCopy, _
             CriteriaRange:=ThisWorkbook.Sheets("Param_Export").Range("A2:Y3"), _
             CopyToRange:=ThisWorkbook.Sheets("Resultat").Range("A2"), _
             Unique:=False
     
    'Filtrage 2
    Ma_Ligne = ThisWorkbook.Sheets("Resultat").Range("A1").End(xlDown).Row + 2
    ThisWorkbook.Sheets("Resultat").Range("A" & Ma_Ligne) = "Mon filtrage 2"
        ThisWorkbook.Sheets("Donnees").ListObjects("Tableau1").Range.AdvancedFilter
             Action:=xlFilterCopy, _
             CriteriaRange:=ThisWorkbook.Sheets("Param_Export").Range("A7:Y9"), _
             CopyToRange:=ThisWorkbook.Sheets("Resultat").Range("A" & Ma_Ligne + 1), _
             Unique:=False
     
     
    End Sub
    Bonne journée à vous tous.
    Denis

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour Denis et merci pour ton retour.

    J'attire ton attention que la syntaxe ListObject.Range englobe les trois parties du tableau structuré, à savoir la ligne des titres (HeaderRowRange), les données (DataBodyRange) et la ligne des totaux (TotalsRowRange)/

    Il y a donc lieu pour éviter d'exporter la ligne des totaux si l'un des éléments de cette ligne entrait dans les critères de faire un redimensionnement(Resize) du Range mais tout cela est expliqué et illustré dans le Fil #1 de la contribution que j'ai référencé dans ma première réponse
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/05/2013, 16h22
  2. Réponses: 6
    Dernier message: 09/03/2011, 11h43
  3. [PHP 5.0] Fonction IF qui ne semble pas fonctionner
    Par amerex dans le forum Langage
    Réponses: 3
    Dernier message: 10/01/2010, 21h44
  4. probleme de tableau array avec la fonction array_push()
    Par carmen256 dans le forum Langage
    Réponses: 13
    Dernier message: 07/09/2009, 17h21
  5. Réponses: 2
    Dernier message: 12/05/2007, 01h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo