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 :

Pb avec zones cibles multiples sur filtre élaboré [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut Pb avec zones cibles multiples sur filtre élaboré
    Bonjour tout le monde,

    Après plusieurs années loin de VBA mon activité m'y ramène avec bonheur.

    Je souhaite réaliser un rapport dynamique issue de données excel. Pour ce faire j'utilise des filtres élaborés.
    Je possède 2 plages nommées (plage_1 et plage_2 une en A1:A3 et l'autre en D1:D4

    Lorsque j'exécute mon filtre élaboré vers la première plage, le résultat vient écraser le contenu de ma deuxième plage. Je cherche un moyen de lui dire d'insérer le résultat et donc de décaler la référence de ma deuxième plage afin de pouvoir insérer le résultat du premier filtre.

    A l'arrivée ma deuxième plage aurai pour référence par exemple G1:G4 et pourrais toujours être utilisé pour mon deuxième filtre élaboré.

    Je fais appelle à toutes vos lumières pour m'éclairer.

    Alex

  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 807
    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 807
    Points : 28 696
    Points
    28 696
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Quelles sont les zones des données, de critères et d'exportation ?
    A lire éventuellement Les filtres avancés ou élaborés dans Excel
    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
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonjour et merci pour votre retour rapide.

    J'ai pris le temps cette semaine et très tôt ce matin de lire cette page fort intéressante. Je n'ai malheureusement pas trouvé la solution mais peut-être ai-je mal compris le paragraphe qui pourrais répondre à mon besoin.

    J'ai mis en pièce jointe le fichier d'exercice que je possède. Le code du module mAdvancedFilter n'est pas de moi (vous le reconnaîtrez certainement ) mais répond en grande parti à mon besoin.
    Sur la feuille "Feuil1" vous trouverez les plages de destination et en "Feuil2" la base des données.

    En espérant que ces éléments vous permette de mieux comprendre mon besoin.
    Je me demandais s'il ne fallait pas générer dynamiquement la plage de sortie et la mettre à jour dans la plage pnClearCriteria et pnClearCriteria_1 pour qu'a chaque relance nous n'affichions que le nombre de lignes nécessaire.

    En "Feuil3" 2 exemples de sortie en fonction du nombre de lignes sortie par la requête. Il y a toujours une ligne vide au dessus de la plage de sortie.

    Cordialement

  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 807
    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 807
    Points : 28 696
    Points
    28 696
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour répondre, je n'ai pas besoin de télécharger un classeur.
    Une bonne explication de la manière dont sont organisées les données (zone des données, des critères et éventuellement d'exportation s'il y a lieu) soit le nom de la ou des feuilles, plage des données et les critères placés sont largement suffisant ainsi bien entendu l'affichage de la procédure VBA utilisée.
    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
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonjour et désolé,

    Je pensais qu'un exemple valait mieux qu'un long discours. Je vais tenter de m'expliquer n'hésitez pas si ce n'est pas clair.

    En gros, je réalise plusieurs filtres élaborés sur une feuille ("Feuil1") de mon classeur. Les données sources pour ce filtre sont stockées dans "Feuil2".
    La plage destination de mon premier filtre est "Feuil1".Export_1 (A1:A4).
    La plage de mon deuxième filtre est "Feuil2".Export_2 (D1:D3).

    Les filtres fonctionnent très bien seulement le retour du premier filtre viens en chevauchement de la plage du deuxième. L'objectif serai de dynamiquement décaler la référence de "Export_2" afin que le premier filtre puisse s'exécuter peut importe le nombre de ligne renvoyé par le filtre1.

    Je dois malheureusement garder une présentation l'une en dessous de l'autre.

    En espérant avoir était plus clair.

    Cordialement

  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 807
    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 807
    Points : 28 696
    Points
    28 696
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je pensais qu'un exemple valait mieux qu'un long discours. Je vais tenter de m'expliquer n'hésitez pas si ce n'est pas clair.
    Tu as raison mais nous sommes sur un forum et en principe cela signifie un partage d'informations.
    Si l'ensemble des personnes qui posent des questions renvoie les informations vers un classeur à télécharger, je pense que l'on perd l'esprit d'un forum. Finalement on pourrait discuter en aparté.
    La plage destination de mon premier filtre est "Feuil1".Export_1 (A1:A4).
    La plage de mon deuxième filtre est "Feuil2".Export_2 ($D$1:$D$3)
    Si l'exportation n'a lieu que sur une colonne, la cellule A1 (contenant l'étiquette de colonne suffit comme référence) et D1 pour l'autre exemple.
    Si il s'agit d'exporter plusieurs colonnes, la zone d'exportation doit faire référence à des colonnes de la même ligne, par exemple $A$1:$D$1, celles-ci devant contenir les étiquettes de colonnes à exporter, s'il faut exporter toutes les colonnes, la référence à une seule cellule vide suffit.
    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
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonjour et merci pour votre investissement.

    En relisant mieux ce que je vous ai écrit, j'ai fait une erreur je reprends donc.
    Si j'ai pour zone cible $A$1:$D$1 et que la requête me renvoie 10 enregistrements j'aurai pour zone de retour $A$2:$D$11.

    Si Export_2=$A$4:$C$4, le contenu de ma plage (les entêtes de colonne) sera écrasé par le retour de ma première requête. Je ne pourrais donc pas exécuter mon deuxième filtre.

    C'est pourquoi, je me demandais s'il ne fallait pas exécuter le filtre dans un tableau en mémoire, compter le nombre de ligne, insérer autan de ligne que nécessaire sous la plage $A$1:$D$1 afin que la référence de Export_2 passe à $A$13:$C$13.
    On pourrais donc exécuter la requête 2 avec pour cible Export_2.

    Par ailleurs, lors d'une nouvelle exécution de requête 1, il serai bien de pouvoir vider $A$2:$D$11 pour que Export_2 se retrouve en $A$4:$C$4 avant de recommencer.

    Encore merci et au plaisir de vous lire.

  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 807
    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 807
    Points : 28 696
    Points
    28 696
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pourquoi ne pas prévoir deux plages de cellules sur des colonnes différentes ou même dans des feuilles différentes, c'est ce que je fais lorsqu'il y a plusieurs zones d'exportations ?
    Une autre solution est de créer par VBA la plage d'exportation en commençant à la cellule A1 et en effaçant les cellules précédemment occupées avant de lancer l'exportation.
    Sinon, je ne vois pas d'autres solutions.
    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 du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonsoir,

    En fait l'on me demande de réaliser un rapport sous forme de tableau l'un sous l'autre avec la mise en page. Est ce afin d'éviter de un grand nombre de copier/coller.

    Je pense que la méthode que tu proposes peut effectivement répondre. Malheureusement, cela dépasse mes compétences actuelle en VBA.

    Si je comprends bien ton idée est d'envoyer le résultat du filtre dans un tableau, de compter le nombre de ligne de ce tableau, de créer la zone de dépot à la taille pour injecter le résultat. Puis créer une autre zone de dépôt en fonction de la première.
    C'est bien cela?
    Aurais-tu un exemple à me donner stp?

    Cordialement

  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 807
    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 807
    Points : 28 696
    Points
    28 696
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si je comprends bien ton idée est d'envoyer le résultat du filtre dans un tableau, de compter le nombre de ligne de ce tableau, de créer la zone de dépot à la taille pour injecter le résultat. Puis créer une autre zone de dépôt en fonction de la première.
    Non.
    Pour exporter des données à l'aide du filtre avancé, il suffit de lui indiquer quelle est la zone des données, de critères et d'exportation. Celle-ci est soit une cellule vide et dans ce cas, toutes les colonnes sont exportées soit on indique une ou plusieurs cellules (par exemple A1:E1) dont la ou les valeurs ont la même orthographe que les étiquettes de colonnes de la zone data et alors seules les colonnes correspondant à ces étiquettes seront exportées;
    Je te conseille une relecture du tutoriel en reprenant les exemples de celui-ci.
    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 du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Je crains que l'on ne se comprenne pas. Certainement que je m'exprime mal. J'ai bien compris que la fonction filtre élaboré avait 3 paramètres pour fonctionner: la zone des données, de critères et d'exportation. (grâce en l'occurrence à ton tuto justement)
    La zone de données ainsi que la zone de critéres sont fixe dans mon cas de figure. En revanche, je cherche à rendre dynamique le positionnement de ma zone de critères en fonction du résultat de mon premier filtre.

    Lors de l'exécution de mon deuxième filtre, ne peut-on pas créer un range dont la valeur serai fonction du résultat du premier filtre?

    Exemple: récupérer la référence de la dernière ligne écrite de la colonne A de lui ajouter 1 cela donnerai la référence d'où commencer la saisi des entêtes de colonne du 2ième filtre pour ensuite déterminer la première référence d'où positionner le résultat de ce 2ième filtre.

    Encore merci pour tes réponses

  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 807
    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 807
    Points : 28 696
    Points
    28 696
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Lors de l'exécution de mon deuxième filtre, ne peut-on pas créer un range dont la valeur serai fonction du résultat du premier filtre?
    Bien évidemment que c'est possible, regarde du côté de la propriété CurrentRegion de l'objet Range.
    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

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    J'ai été débordé cette semaine mais j'ai pu avancer grâce à ton information et cela fonctionne. Le code est très moche pour le moment et je souhaite l’optimiser à l'aide de ton exemple du tutoriel.
    Je suis confronté à un problème de perte de valeur lors du passage d'un range à une procédure.
    Je que j'ai fait:
    Création d'une feuille "Parametre rapport" contenant l'ensemble des paramètres avec des plages nommées
    Un tableau à 3 colonnes dans lequel (ligne à ligne), on donne le nom de la plage de critère, la plage d'entête, la description
    Une feuille de résultat "Rapport"

    L'objectif parcourir le tableau de critère afin d'afficher les résultats des recherches les un sous les autres.
    Voici le code qui me pose souci:
    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
    Set znSelection = Worksheets("Parametre rapport").Range("B2").CurrentRegion
    For row = 2 To znSelection.Rows.Count
        Set argCriteria = Range(znSelection.Cells(row, 2))
        Set argEntete = Range(znSelection.Cells(row, 4))
        NomRequete = znSelection.Cells(row, 5).Value
     
        'Création de l'entête de tableau
        Call entete_col(NoligEncours, argEntete)
     
        MsgBox NomRequete
    Next
     
    Sub entete_col(ligne As Integer, acEntete As Range)
     
    'copy de l'entête
        Range(acEntete).Select
        Selection.Copy
        Sheets("Rapport").Select
        Range("B" & ligne).Paste
        ActiveSheet.Paste
    end sub
    Lorsque j'exécute le code, j'ai affiché, jusque avant l'appel à procédure, l'adresse de argEntete.adress. La variable est bien instanciée mais quand j'arrive dans ma procédure, elle n'est plus connue.
    Il doit y avoir un problème dans mon appel à la procédure mais lequel je ne vois pas.

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

Discussions similaires

  1. [XL-2003] Problème de macro sur filtre élaboré
    Par doune37 dans le forum Excel
    Réponses: 6
    Dernier message: 03/01/2014, 08h26
  2. [XL-2007] faire un filtre élaboré avec 2 criteres sur la meme colonne
    Par sebing dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/02/2011, 12h35
  3. [XL-2007] Macro sur Filtre élaboré
    Par jose_67 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/02/2010, 19h45
  4. Réponses: 1
    Dernier message: 10/01/2008, 16h07
  5. Pb avec les clic multiple sur un boutons
    Par mikky dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/11/2006, 11h53

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