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 :

VBA - Filtre avancé avec TCD


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Logistique
    Inscrit en
    Juin 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Logistique

    Informations forums :
    Inscription : Juin 2024
    Messages : 3
    Par défaut VBA - Filtre avancé avec TCD
    Bonjour le forum !

    Je vous présente mon fichier :
    Dans l'onglet "Commandes" il y a les données que j'extrais (de base c'est un fichier qui fait une centaine de colonnes et une dizaine de milliers de lignes, j'ai simplifié ici et ces données ne seront pas mises dans le fichier d'analyse)
    Dans l'onglet "Liste clients" il y a les codes clients et le nom du client en rapport avec ce code (plusieurs codes pour un même client)
    Dans l'onglet "Récap", j'y ai mis les codes clients avec le nom associé sous forme de TCD, ainsi que les en-têtes de l'onglet "Commandes" que je souhaite rapporter (au vu du nombre dans le fichier de base)

    L'onglet "Commandes" est un fichier que j'extrais et qui ne sera pas dans ce fichier, mais rangé dans un dossier à part avec comme nom la semaine d'extraction (et avec beaucoup plus de lignes et colonnes, l'idée est avec un code de rechercher le fichier en question en mettant la semaine dans une cellule pour éviter de l'ouvrir et fermer manuellement => ex : le fichier s'appelle "Semaine26", il y aura donc "C://Fichier commande/Fichier de la "[D1]".xlsx" avec en D1 "Semaine26" + les différents codes permettant l'ouverture/fermeture de ce dernier, là-dessus pas de soucis)

    Mon but est, dans l'onglet "Récap", de filtrer sur le nom du client (utilisation d'un TCD pour éviter de filtrer les lignes de la feuille) et qu'avec un filtre avancé je puisse récupérer les données de l'onglet "Commandes" (donc du fichier d'extraction) correspondants aux en-têtes et aux clients en question de l'onglet "Récap", et qu'à chaque fois que je modifie en filtrant le nom et/ou le code du client, les données se mettent à jour en fonction.

    J'avais pensé avec un code pour le filtre avancé et le petit bouton pour faire la màj une fois le(s) client(s) choisi, mais j'avoue bloquer sur la zone de critère du filtre avancé vu que c'est un TCD et que la taille des données changera.
    Peut-être qu'il y a une meilleure méthode pour résoudre mon soucis que je prendrais volontiers, mais je reste bloqué sur mon idée et je n'avance plus.

    Un grand merci pour votre aide !
    Fichiers attachés Fichiers attachés

  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
    13 176
    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 : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'avais pensé avec un code pour le filtre avancé et le petit bouton pour faire la màj une fois le(s) client(s) choisi, mais j'avoue bloquer sur la zone de critère du filtre avancé vu que c'est un TCD et que la taille des données changera.
    Pour en savoir plus sur les filtres avancés, Les filtres avancés ou élaborés dans Excel

    Pour ma part, il est préférable de passer par Power Query. Une requête qui pourra charger le fichier "C://Fichier commande/Fichier de la "[D1]".xlsx" sans problème. Le seul code VBA à écrire dans ce cas là est l'actualisation de la ou des requêtes depuis une procédure événementielle (une ligne de code)
    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
    Candidat au Club
    Homme Profil pro
    Logistique
    Inscrit en
    Juin 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Logistique

    Informations forums :
    Inscription : Juin 2024
    Messages : 3
    Par défaut
    Bonjour Philippe,

    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Pour en savoir plus sur les filtres avancés, Les filtres avancés ou élaborés dans Excel

    Pour ma part, il est préférable de passer par Power Query. Une requête qui pourra charger le fichier "C://Fichier commande/Fichier de la "[D1]".xlsx" sans problème. Le seul code VBA à écrire dans ce cas là est l'actualisation de la ou des requêtes depuis une procédure événementielle (une ligne de code)
    Cela m'intéresserait de connaitre la marche à suivre. Je n'ai jamais utilisé Power Query et fonctionnant avec une requête. Ca m'aiderait beaucoup.
    Merci pour votre aide

  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
    13 176
    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 : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le classeur principal se trouve dans un dossier dédié et les classeur "Semaine_nn" dans un sous-dossier Commande et ceux-ci contiennent une feuille avec un tableau structuré nommé Tableau1
    La cellule où l'on entre le numéro de semaine se nomme pWeek
    La requête est actualisée dès que l'on entre le numéro de semaine grâce à la procédure événementielle

    Le code de la requête Power Query
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let
        // Récupère la valeur de la cellule nommée pWeek
        SourceWeek = Excel.CurrentWorkbook(){[Name="pWeek"]}[Content]{0}[Column1],
        // Construit dynamiquement le chemin du fichier en utilisant la valeur de la semaine
        FilePath = "C:\Users\phili\Desktop\Test_Import_Fichier\Commande\Semaine_" & Text.From(SourceWeek) & ".xlsx",
        // Charge le fichier Excel
        Source = Excel.Workbook(File.Contents(FilePath), null, true),
        Tableau1_Table = Source{[Item="Tableau1",Kind="Table"]}[Data],
        #"Type modifié" = Table.TransformColumnTypes(Tableau1_Table,{{"Division", type text}, {"Code client", Int64.Type}, {"Nom client", type text}, {"Date de saisie de commande", type date}, {"N° de commande", Int64.Type}, {"Date de livraison demandée", type date}, {"Quantité commandée", Int64.Type}, {"Prix de vente", Int64.Type}, {"Référence", Int64.Type}, {"N° de semaine", Int64.Type}})
    in
        #"Type modifié"
    Code de la procédure événementielle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Me.Range("pWeek")) Is Nothing Then
            Application.EnableEvents = False
            On Error GoTo ErrorHandler
            Me.Range("t_Commande").ListObject.QueryTable.Refresh BackgroundQuery:=False
    ErrorHandler:
            Application.EnableEvents = True
            If Err.Number <> 0 Then
                MsgBox "Erreur lors de l'actualisation de la table de requête: " & Err.Description, vbCritical
            End If
            On Error GoTo 0
        End If
    End Sub
    S'il y a lieu ensuite de filtrer ce tableau, suivant d'autres critères, une autre requête peut être créée.
    Pour manipuler des données Power Query est plus efficace et surtout permet une mise en place en très peu de temps par rapport à un développement en VBA.

    Nom : Import Fichier.png
Affichages : 142
Taille : 41,6 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
    Candidat au Club
    Homme Profil pro
    Logistique
    Inscrit en
    Juin 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Logistique

    Informations forums :
    Inscription : Juin 2024
    Messages : 3
    Par défaut
    Bonjour,
    Merci beaucoup pour l'aide et ces explications. En effet, il y a d'autres critères comme le fait de choisir les colonnes d'analyse (j'en ai une centaine dans mon fichier de base et il ne m'en faut que 7 pour avoir les données qu'il me faut), et également le fait de pouvoir filtrer sur le nom du client et de pouvoir en choisir plusieurs à la fois, je ne sais pas si cela est possible.
    Je vais également regarder de mon côté pour me former à l'utilisation de Power Query, qui ne m'est pas familier du tout

  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
    13 176
    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 : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tout est possible, il faut juste connaître les critères et les colonnes à exporter.
    Power Query est l'OUTIL à utiliser pour transformer des données. Bien plus rapide à mettre en place et à appréhender que le 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

Discussions similaires

  1. [XL-2010] VBA Filtre Avancé Trié
    Par sultan87 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/05/2024, 13h12
  2. [XL-2016] VBA Filtres avancé avec date
    Par lfdner dans le forum Excel
    Réponses: 4
    Dernier message: 23/09/2023, 16h47
  3. [XL-2016] VBA Filtre avancé plages variables
    Par ValentinD78310 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/10/2021, 13h26
  4. Filtre avancé avec des choix multiple à l'aide des CheckBox
    Par Bell2018 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 11/04/2019, 19h22
  5. [XL-2010] Problème Filtre avancé avec VBA
    Par jppnancy dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 12/04/2015, 10h35

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