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 à partir d'une liste


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de maxxikilla
    Homme Profil pro
    Analyste Risques
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Analyste Risques
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Par défaut Filtre à partir d'une liste
    Bonjour à tous,

    Je suis en difficulté sur une macro.

    Je cherche à venir filtrer massivement sur base de plusieurs références en même temps. L'idée est d'éviter de filtrer les données une par une pour optimiser les temps de traitement.

    L'idée, c'est de prendre donc ma liste de référence, dans la feuille 1. Je viens stocker les valeurs dans un tableau en vba, et j'applique le filtre sur la feuille 2 sur base des valeurs de mon tableau. Je m'attends donc à ce que le filtre soit fait en une seule fois.

    Le problème est que le filtre remonte vide. pourtant unitairement, et quand je le fais à la main, je ne rencontre aucun soucis.

    Voici le code que j'utilise. Je vous transmets le fichier également (j'ai simplifié un maximum le fichier pour vous exposer clairement ma problématique)
    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
     
    Sub test()
    Application.ScreenUpdating = False
     
    s1 = "1"
    s2 = "2"
     
    nbls1 = Sheets(s1).Range("A1000").End(xlUp).Row
     
    Sheets(s1).Activate
     
            ReDim myArray(nbls1 - 2)
     
            For j = 2 To nbls1
                    myArray(j - 2) = Cells(j, 1).Value
            Next j
     
            Sheets(s2).Activate
            Range("A1").AutoFilter Field:=1, Criteria1:=myArray, Operator:=xlFilterValues
     
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Déclarer le tableau en String
    Criteria1:=Array(myArray)
    Selectionner la plage en entier pour le filtre: Range("A1:A" & DerLig_S2)

    Essayez ceci:
    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
    Sub test()
        Dim s1 As Worksheet, s2 As Worksheet
        Dim nbls1 As Long, DerLig_S2 As Long
     
        Application.ScreenUpdating = False
        Set s1 = Sheets("1")
        Set s2 = Sheets("2")
        nbls1 = s1.Range("A" & Rows.Count).End(xlUp).Row
        s1.Activate
        ReDim myArray(nbls1 - 2) As String
        For j = 2 To nbls1
            myArray(j - 2) = s1.Cells(j, 1)
        Next j
        s2.Activate
        DerLig_S2 = s2.Range("A" & Rows.Count).End(xlUp).Row
        ActiveSheet.Range("A1:A" & DerLig_S2).AutoFilter Field:=1, Criteria1:=Array(myArray), Operator:=xlFilterValues
        set s1 = nothing
        set s2 = nothing
    End Sub
    Cdlt

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Je vois que j'ai écopé d'un -1 (Pouce vers le bas), hormis que ça ne résout pas les problèmes, j'aurais aimé connaître ce qui ne va pas, cela pourrait me servir pour la suite et éviter de reproduire les mêmes erreurs (Peut-être l'oubli d'avoir enlevé les "S1.Activate" et "S2.Activate" devenus inutiles)
    Le but n'était pas de refaire le code, mais simplement de trouver ce qui l'empêchait d'exécuter le filtre, ce que j'ai fait dans les 3 premières lignes de ma précédente réponse, c'est au demandeur, par la suite de suivre ou pas ces recommandations et de les appliquer à son code. Le code que j'avais déposé n'était là que pour montrer que ça fonctionnait.
    Revoici le code complet tel qu'il aurait dû être:
    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
    Option Explicit
     
    Sub test()
        Dim s1 As Worksheet, s2 As Worksheet
        Dim NblS1 As Long, DerLig_S2 As Long
        Dim j As Long
     
        Application.ScreenUpdating = False
        Set s1 = Sheets("1")
        Set s2 = Sheets("2")
        NblS1 = s1.Range("A" & Rows.Count).End(xlUp).Row
        ReDim MyArray(NblS1 - 2) As String
        For j = 2 To NblS1
            MyArray(j - 2) = s1.Cells(j, 1)
        Next j
        DerLig_S2 = s2.Range("A" & Rows.Count).End(xlUp).Row
        s2.Range("A1:A" & DerLig_S2).AutoFilter Field:=1, Criteria1:=Array(MyArray), Operator:=xlFilterValues
        Set s1 = Nothing
        Set s2 = Nothing
    End Sub

    Cdlt

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 554
    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 554
    Par défaut
    Bonjour à tous

    Le plus rapide est sans doute le filtre avancé https://philippetulliez.developpez.c...dvancedfilter/

  5. #5
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour 78chris,

    Evidemment le filtre avancé est bien plus simple d'utilisation, mais ma réponse concernait son code et plus particulièrement pourquoi il ne fonctionnait pas.

    Cdlt

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 554
    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 554
    Par défaut
    Re
    Citation Envoyé par ARTURO83 Voir le message
    Bonjour 78chris,

    Evidemment le filtre avancé est bien plus simple d'utilisation, mais ma réponse concernait son code et plus particulièrement pourquoi il ne fonctionnait pas.

    Cdlt
    Ce n'était pas une critique mais une proposition d'autre piste

Discussions similaires

  1. [XL-2010] Créer un filtre à partir d'une List
    Par -Anthime- dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/07/2017, 13h39
  2. Réponses: 2
    Dernier message: 02/12/2013, 16h11
  3. [XL-2007] Filtre à partir d'une liste
    Par gbdos dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 05/07/2012, 16h35
  4. [XL-2007] Effectuer un filtre à partir d'une liste déroulante
    Par Fenrhir dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/11/2009, 17h32
  5. Sélectionner un fichier à partir d'une liste filtrée
    Par Lenaick dans le forum C++Builder
    Réponses: 7
    Dernier message: 14/03/2006, 11h16

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