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 :

Filtre élaboré VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 96
    Points : 41
    Points
    41
    Par défaut Filtre élaboré VBA
    Bonjour à tous,

    Je viens vers vous car je n'arrive pas à faire fonctionner un filtre élaboré dans un code VBA:

    Je dispose d'une macro qui me permet d'appeler un autre fichier Excel ( Source ) sur lequel se situe une Feuille ("BDD") que je voudrais importer dans mon fichier ( Destination ).

    --> Pour une meilleur compréhension de mon problème j’appellerais le fichier de travail (Destination ) et le fichier que je charge pour contrôler la BDD ( SOURCE).

    Dans mon classeur ( Destination ) je dispose déjà d'une BDD, que je voudrais mettre à jour tous les mois via un Classeur (Source). Il peut y avoir des lignes similaires entre les 2, c'est pour cela que je voudrais filtrer les données du fichier ( Source ) que je dispose déjà dans mon fichier (Destination) afin de les supprimer.

    Puis par la suite, copiés les lignes restantes du fichier ( Source ) afin de les coller à la dernière lignes non remplie de la colonne "A" du fichier ( Destination).

    je ne suis pas encore rendu au stade de copié collé les lignes, car je n'arrive pas à faire fonctionner le filtre élaboré.

    Call PeriodTrié_BDD_réelle : Cette macro me permet d'extraire sans doublons les lignes de la base de données de mon classeur ( Destination ). Une fois la macro exécuté, elle nomme la plage de données "PériodTrié".

    Je souhaiterais pouvoir filtrer le classeur ( Source ) avec en "CriteriaRange:=" le nom " PériodeTrié".
    J'ai essayé avec cette méthode : "Destination.Range("A1:A19")" et "Destination.names("PériodTrié"), mais aucunes des 2 solutions ne fonctionne. Aucun filtre ne se met en place.

    Pouvez vous m'indiquer ou se trouve l'erreur svp ?

    Voici le code:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub OuvertureFichiers(RepertoireFichier, NomFichier)
     
    Application.ScreenUpdating = False
     
    Call PeriodTrié_BDD_réelle ' Trie les périodes déjà présentes dans le classeur ( Destination ) 
     
     
       FichierP = ActiveWorkbook.Name ' Classeur Destination
     
    Call SUPPRIMER_NOMS ' Supprime tous les noms du classeur
     
        ' Condition pour activer la macro
        If Continuer = True Then
        For Each Wb In Workbooks
                Select Case Wb.Name
                    Case NomFichier
                        Wb.Activate
                        Continuer = False
                        Exit For
                End Select
        Next Wb
     
            If Continuer = True Then Workbooks.Open Filename:=RepertoireFichier & "\" & NomFichier ' Ouverture du fichier Source
     
     
        ' Ouverture et Mise en forme de la BDD
       Workbooks(NomFichier).Sheets("BDD").Activate
       If FilterMode = True Then ActiveSheet.ShowAllData
     
       Rows("1:1").Delete
    '   Sheets("BDD").ShowAllData
     
       Call SupprLigne ' Sub pour effacer les données non utilisées
     
       Set Destination = Workbooks(FichierP).Sheets("Données")
     
       Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Select
    With Selection
    .AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Destination.Range("A1:A19"), Unique:=False
    End With  
     
        Workbooks(NomFichier).Close False
     
        End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Je te conseille la lecture de ce sujet https://www.developpez.net/forums/d1...blons-feuille/ qui je pense traite du même problème.

    As-tu lu le tuto présent sur ce site concernant les filtres avancés, si non je te le conseille aussi.
    As-tu essayé de faire le filtre à la main avant de le faire en vba?
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    bonjour,
    je n'ai jamais "jonglé" avec 2 WorkBook , donc la première chose que je ferait c'est : contrôler la "communication" entre les 2 WB

    par exemple :

    Workbooks.Open Filename:=RepertoireFichier & "\" & NomFichier ' Ouverture du fichier Source
    et

    Workbooks(NomFichier).Sheets("BDD").Activate
    cela fonctionne ?

    et Workbooks(RepertoireFichier & "\" & NomFichier).Sheets("BDD").Activate ?

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Si ça peut donner l'inspiration!
    https://www.developpez.net/forums/d1...s/#post9054844

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 96
    Points : 41
    Points
    41
    Par défaut
    Bonsoir et merci à vous pour vos réponses:

    halaster08 : j'ai essayé d'exécuter juste la partie du code ci dessous sur le fichier ( Source ), mais ça ne fonctionne pas non plus. je me demande si il n'y a pas une erreur de syntaxe dans le champ ( " CritiriaRange" ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sut Test
     
     Set Destination = Workbooks(FichierP).Sheets("Données")
     
       Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Select
    With Selection
    .AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=.Sheets("Feuil2").Range("A1:A19"), Unique:=False
    End With  
     
    End sub
    mjpmjp : La commutation entre les 2 fichiers fonctionne bien, c'est juste le filtre qui ne ce met pas en place

    dysorthographie: merci pour ta réponse, je suis en cours de lecture et déchiffrage du code.

    Encore merci à vous pour vos réponses.

  6. #6
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    bonjour,

    Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Select
    de quel fichier ?

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 96
    Points : 41
    Points
    41
    Par défaut
    j’exécute directement la macro sur le fichier source avec la feuil en question active c'est pour ça que je ne n'ai pas indiqué le chemin dans le prog.

    j'ai essayé en mettant les critères dans la même feuil que la BDD et ça fonctionne mais dés que les critères sont en dehors de la feuille (BDD) sa ne fonctionne plus.

  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 762
    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 762
    Points : 28 621
    Points
    28 621
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    j'ai essayé en mettant les critères dans la même feuil que la BDD et ça fonctionne mais dés que les critères sont en dehors de la feuille (BDD) sa ne fonctionne plus
    La zone de données, des critères ainsi que celle de l'exportation peuvent être dans des feuilles distinctes que ce soit dans le même classeur ou des classeurs différents pour autant qu'ils soient ouverts au moment de l'exécution de l'exportation;
    Le problème évoqué ici provient vraisemblablement du fait que la parentalité des objets n'est pas définie. C'est un problème récurent chez pas mal de développeurs malheureusement.
    Une plage de cellules (ou cellule) a comme parent une feuille qui elle même a comme parent un classeur..
    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
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 415
    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 415
    Points : 16 257
    Points
    16 257
    Par défaut
    Bonjour

    : filtre sur place mais n'extrait pas !

    Il faut indiquer classeur, feuille et plage source, idem pour destination, idem pour critère, exemple avec critères dans une feuille du classeur Destination et une extraction sans doublons

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Workbooks("ClasseurSource.xlsx").Sheets("FeuilleSource").Columns("A:H"). _
            AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Workbooks("ClasseurDestination.xlsx").Sheets("FeuilleCriteres").Range( _
            "E1:E2"), CopyToRange:=Workbooks("ClasseurDestination.xlsx").Sheets("FeuilleDestination").Columns("A:H"), Unique:=True
    Edit : coucou Philippe, pas raffraichi !
    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é...

Discussions similaires

  1. [XL-2002] Syntaxe dans filtre élaboré VBA
    Par thomas67 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/06/2012, 14h50
  2. [XL-2010] Filtre élaboré VBA
    Par vegastar dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 11/05/2012, 14h17
  3. [XL-2010] Filtres élaborés vba
    Par ketum88 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/09/2011, 23h06
  4. Filtre élaboré de Excel en VBA
    Par Bilre dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/07/2007, 18h10
  5. [VBA-E] filtre élaboré
    Par MatMeuh dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/04/2006, 15h41

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