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 :

Advanced Filter problème


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 39
    Points : 25
    Points
    25
    Par défaut Advanced Filter problème
    Extraits de mon programme Travaux
    Objectif: Filtrer une base de données de la feuille Worksheet "Source" (WsData) et de déposer le résultat sur une Worksheet nommée "FiltTable", le critère de filtrage se trouve sur une Worksheet" Filters". Il s'agit du Range ("B7:B8") nommé "Criteria1" où B7 contient la catégorie cherchée et B8 le nom de cette catégorie. Exemple: B7 = 'catégorie' et B8 = 'jardin'.
    Au moment de la ligne 'InputRange.AdvancedFilter…, le message d'erreur suivant apparait:
    Erreur d'exécution 1004…
    J'ai contrôlé maintes fois tous les critères, ils sont tous corrects et au bon endroit.
    Ce programme a fonctionné avec ce code depuis des années sans aucune faute.
    Quelqu’un aurait-il une idée quelle pourrait être la raison de ce message? Merci.
    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
    27
    28
    29
    30
    Public Sub FilterObjects(myCat As String, myColumn As Integer, _
               myoperator As String, ObjStatus As String, blnCntSum As Boolean)
    Dim InputRange As Range, OutputRange As Range
    Dim FinalRow As Integer, LastColumn As Integer
    '-------------------------------------------
    Worksheets("FiltTable").Cells.ClearContents
    
    'Define the global output range ************
    'FinalRow a été définie auparavant
    Set OutputRange = Worksheets("FiltTable").Range("A1:L" & FinalRow)
    
    'Define the global input range. ************
    Set InputRange = WsData.Range("A1:L" & FinalRow)
    
    'Clear the last filter criteria
    With Worksheets("Filters")
    .Range("criteria1").ClearContents
    End With
    
    'Write the new filter criteria into cells B7:B8 on worksheet "Filters"
     With Worksheets("Filters")
      .Range("B7").Value = WsData.Cells(1, myColumn)  '= Catégorie
      .Range("B8").Value = myCat  '= jardin
     End With
    
        'Copy filtered range of database into sheet "FiltTable"
        InputRange.AdvancedFilter _
            Action:=xlFilterCopy, CriteriaRange:=Worksheets("Filters").Range("Criteria1"), _
            copytorange:=OutputRange
    Erreur d'exécution 1004. Le nom de champ est incorrect ou manquant dans la zone d'extraction.

  2. #2
    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 825
    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 825
    Points : 28 731
    Points
    28 731
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    A mon humble avis, le problème vient de la ligne 10 du code publié (Set OutputRange = Worksheets("FiltTable").Range("A1:L" & FinalRow)). La plage d'exportation doit être soit une cellule vide soit une ligne contenant les étiquettes de colonnes


    A lire éventuellement le chapitre VII. Exporter les données filtrées
    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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 39
    Points : 25
    Points
    25
    Par défaut Advanced Filter Problem
    Bonjour Philippe et merci pour ta suggestions que j'ai essayée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set OutputRange = Worksheets("FiltTable").Range("A1")
    malheureusement sans succès. Le même message d'erreur réapparait à chaque essai.
    Aurais-tu une autre proposition à me faire ?
    Merci.

  4. #4
    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 825
    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 825
    Points : 28 731
    Points
    28 731
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est qu'il y a d'autres adressages qui ne sont pas corrects mais en tous les cas, la ligne que je vous ai indiquée devait être corrigée.

    Pour comprendre les filtres avancés d'excel, il y a lieu de lire le tutoriel dont j'ai référencé l'un des chapitres

    En résumé , lorsque l'on fait une exportation avec la méthode AdvancedFilter, il y a lieu de définir trois zones.
    1. La zone des données doit contenir la ligne des titres et les données
    2. La zone des critères doit avoir au minimum deux cellules don la première contient le titre et la deuxième le critère
    3. La zone d'exportation doit faire référence soit à une cellule vide soit à une plage de cellules contenant les étiquettes de colonnes à exporter

    Les titres de la zone des données, d'exportations et des critères doivent être d'orthographe identiques mais dans la zone des critères on peut utiliser des critères calculer et dans ce cas là, le titre doit être d'orthographe différente

    Voici un exemple où la zone des données est un tableau structuré nommé t_Data (en bleu) qui se trouve dans une feuille séparée de la zone des critères (en brun) et de la zone d'exportation (en vert)
    La zone des critères se nomme areaCriteria et la zone d'exportation areaTarget

    Le code utilisé
    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
    Sub ExportByAdvancedFilter()
      ' Déclaration + affectation des variables
      Dim t As ListObject
      Dim r As Range
      Set t = Range("t_Data").ListObject
      With t.Range
        Set r = .Resize(.Rows.Count + t.ShowTotals)
      End With
      ' Exportation
      r.AdvancedFilter Action:=xlFilterCopy, _
                       CriteriaRange:=Range("areaCriteria"), _
                       CopyToRange:=Range("areaTarget")
      ' Libère la mémoire
      Set t = Nothing: Set r = Nothing
    End Sub
    La procédure ExportByAdvancedFilter est enclenchée par la procédure événementielle Worksheet_Change présente dans la feuille où se trouve la zone des critères et la zone d'exportation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Address = Range("areaCriteria").Item(2).Address Then
         ExportByAdvancedFilter
      End If
    End Sub
    Illustration
    Nom : 230725 dvp AdvancedFilter.png
Affichages : 183
Taille : 90,7 Ko
    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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 39
    Points : 25
    Points
    25
    Par défaut Advanced Filter Problem
    Hi Philippe
    Merci pour tes informations précises et très intéressantes pour moi.
    J'ai essayé de le adapter à mon programme mais sans succès car je ne sais pas comment référencer correctement mes variables.
    Cette partie de mon programme comporte 3 feuilles:
    1. la liste des données "Inputlist", 2. la feuille contenant mes critères "Filters"(ici je n'en utilise qu'un), 3. la list de réception "Outputlist".
    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
    'Sub ExportByAdvancedFilter()
      ' Déclaration + affectation des variables
    Dim Inputlist As Object
    Dim InpRange As Range
    'Set Inputlist = Range("Inputlist_Data").ListObject
     Set Inputlist = Range("Inputlist").ListObject
    With Inputlist.Range
        Set InpRange = .Resize(.Rows.Count + Inputlist.ShowTotals)
    End With
     
      ' Exportation
    InpRange.AdvancedFilter Action:=xlFilterCopy, _
    Criteriarange:=Sheets("Filters").Range("Criteria1"), _
    Copytorange:=Range("outputrange?...")
    'Ce range varie selon mes paramètres de recherche et je n'arrive pas à le formuler ici...
      ' Libère la mémoire
      Set InputRange = Nothing: Set InpRange = Nothing
    'End Sub
    Je reçois le message: "La méthode Range de l'objet"_Global" a échoué".
    C'est en faisant ces essais que j' découvert la faute dans mon programme qui fonctionnait depuis 15 ans sans nouveaux problèmes!
    La faute est: un des titres contenait une formule c'était faux, bien-sur, et différent dans les 2 listes.
    Tout fonctionne bien maintenant. Mais j'aimerais quand même essayer ta méthode, plus simple que la mienne.
    Merci en attendant.
    Jacksun

  6. #6
    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 825
    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 825
    Points : 28 731
    Points
    28 731
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Essayez d'éviter de mettre des balises <QUOTE> lorsque vous écrivez. Ces balises sont là pour faire référence à un texte qu'une personne aurait écrit dans une autre discussion.
    C'est très compliqué de vous lire sinon

    J'ai essayé de le adapter à mon programme mais sans succès car je ne sais pas comment référencer correctement mes variables.
    Je n'utilise pas de variables pour référencer les deux zones (critères et export) mais des plages nommées (à l'aide du gestionnaire des noms)

    Pour la plage des données, j'utilise un tableau structuré

    Je reçois le message: "La méthode Range de l'objet"_Global" a échoué".
    Lorsque vous signalez une erreur (numéro + message), ce serait bien d'indiquer en plus à quelle ligne elle a eu lieu dans le code que vous publiez.

    Pour en savoir plus sur les tableaux structurés, je vous conseille la lecture de
    1. Apprendre à utiliser les tableaux structurés Excel : création, manipulations et avantages(1)
    2. Excel: Les tables de données en VBA

    Le premier est pour son utilisation normale et le second explique les méthodes et propriétés à utiliser pour manipuler l'objet ListObject en VBA
    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

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 39
    Points : 25
    Points
    25
    Par défaut Advanced Filter Problem
    Bonjour Philippe

    Je lis avec grand intérêt le tutorial sur les tableaux structurés qui va certainement m'être utile à l'avenir.
    Comme mon problème initial a été résolu car la formule de toute une colonne s'était retrouvée dans l'entête (j'ignore pour quelle raison), je vais terminer notre entretien ici. Problème résolu.

  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 825
    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 825
    Points : 28 731
    Points
    28 731
    Billets dans le blog
    53
    Par défaut
    Bonjour Jacksun,
    Merci pour votre retour.
    Si la discussion est close, n'oubliez pas de changer son statut en le mettant sur "Résolu"
    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
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    Re-bonjour
    J'ai cliqué 2x sur "Résolu". ça n'a pas l'air de marcher.
    Je ressaye encore

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 29/09/2020, 12h45
  2. [XL-2016] Extraite données depuis tableau variable via Advanced filter
    Par axurit dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/10/2017, 18h06
  3. Advanced installer probléme
    Par nabil.talbi dans le forum EDI et Outils pour Java
    Réponses: 0
    Dernier message: 26/07/2017, 12h51
  4. Réponses: 1
    Dernier message: 26/04/2012, 21h06
  5. problème de mapping d'un filter
    Par gaet_045 dans le forum JSF
    Réponses: 1
    Dernier message: 21/05/2007, 11h32

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