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 :

Filtrage de données via une matrice métiers [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Par défaut Filtrage de données via une matrice métiers
    Bonjour à tous!

    Tout d'abord, je suis nouveau sur le site, j'espère juste ne pas avoir créé une nouvelle discussion dans un mauvais emplacement...

    Je débute en VBA et je suis bloqué dans ma recherche.

    J'ai un classeur avec différents onglets (en PJ) :
    - Premier onglet : Tableau de données fournisseurs (48 mais éventuellement modifiable dans les années à venir...)
    - Second onglet : Matrice métier

    J'aimerai avoir une liste multi-choix des différents métiers, qui permettrait de filtrer les fournisseurs correspondants aux métiers sélectionnés.
    Par exemple en filtrant par métier 2, obtenir la liste des entreprises 1, 16, 17, et 34.
    Ou encore en filtrant par métier 2 et 5, obtenir la liste des entreprises 1, 11, 16, 17, 34 et 43.

    Voilà! J'ai pu trouver des astuces pour filtrer en fonction des données présentes dans le tableau de l'onglet 1, mais dans le cas recherché : filtrer en fonction d'une matrice annexe, je ne sais vraiment pas comment procéder... Est-ce que c'est faisable? Et comment?

    Je suis preneur de toutes vos idées et conseils !

    Merci à tous!
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Une piste en VBA.
    Il faudra relier votre contrôle de formulaire (Excel.ListBox) à une macro
    Nom : hozce1.jpg
Affichages : 333
Taille : 18,6 Ko
    Nom : hozce2.jpg
Affichages : 283
Taille : 34,3 Ko

    Copiez le code suivant dans un module Standard
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Sub ListBox2Filtre()
    '/// La 1ère cellule du tableau Excel ///
    Const FIRST_CELL_CAPABILITE As String = "B18"   'à adapter
    '///////////////////////////////////////
    Dim LB As Excel.ListBox   'Contrôle de formulaire (ce n'est pas un ActiveX)
    Dim Coll As New Collection
    Dim R As Range
    Dim LesMetiers$
    Dim Tbl As Variant
    Dim var As Variant
    Dim k&
    Dim i&
    Dim j&
    Dim T()
    '--- La ListBox qui a appelé ---
    Set LB = ActiveSheet.Shapes(Application.Caller).OLEFormat.Object
    '--- Les métiers qui ont été sélectionnés sont stockés dans une variable String ---
    For i& = 1 To LB.ListCount
      If LB.Selected(i&) Then LesMetiers$ = LesMetiers$ & LB.List(i&) & "µ"
    Next i&
     
    '--- Definition de la 1ère cellule du tableau Excel (Capabilité) ---
    Set R = Range(FIRST_CELL_CAPABILITE)
    '--- Efface le filtre (par défaut) ---
    R.AutoFilter
     
    '--- Si aucun métier n'a été sélectionné, on sort ---
    If LesMetiers$ = "" Then Exit Sub
     
    '--- Split de la chaîne pour obtenir un tableau des métiers ---
    Tbl = Split(LesMetiers$, "µ")
     
    '###
    '--- On monte toutes les données de la feuille "Métiers" dans un Variant ---
    var = Sheets("Métiers").[a1].CurrentRegion
     
    For k& = 0 To UBound(Tbl) - 1       'boucle sur les métiers
      For j& = 1 To UBound(var, 2)      'boucle sur les colonnes (concerne la feuille "Métiers")
        If var(1, j&) = Tbl(k&) Then    'si on trouve une correspondance métier ...
          For i& = 1 To UBound(var, 1)  '... on boucle sur les lignes (concerne la feuille "Métiers") ...
            If UCase(var(i&, j&)) = "X" Then  '... si on y touve un X ...
              On Error Resume Next  '\\\Pour éviter les doublons
              Coll.Add CStr(var(i&, 2)), CStr(var(i&, 2)) '... on l'ajoute à la collection.
              On Error GoTo 0       '\\\Pour éviter les doublons (suite)
            End If
          Next i&
        End If
      Next j&
    Next k&
     
    '--- Si aucun élément n'a été ajouté à la collection, on sort ---
    If Coll.Count = 0 Then Exit Sub
     
    '--- Transfert des éléments de la collection dans un tableau ---
    ReDim T(1 To Coll.Count)
    For i& = 1 To Coll.Count
      T(i&) = Coll(i&)
    Next i&
    '--- Active le filtre en fonction des éléments du tableau (T) ---
    R.CurrentRegion.AutoFilter Field:=2, Criteria1:=T, Operator:=xlFilterValues
    End Sub
    Fichiers attachés Fichiers attachés

  3. #3
    Membre actif
    Homme Profil pro
    Chercheur à pôle emploi
    Inscrit en
    Juin 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chercheur à pôle emploi

    Informations forums :
    Inscription : Juin 2015
    Messages : 43
    Par défaut
    Bonjour, ma contribution avec un petit userform, je n'arrive pas à joindre le fichier ca marche pas...S'il vous interesse je trouverai un moyen de vous le faire parvenir. Les éléments trouvés sont dans une feuille différente des autres donc les données peuvent être manipulées et effacées sans risque de toucher aux bases de données. L'userform reste ouvert tant que vous ne l'avez pas fermé et la liste se met à jour automatiquement après chaque selection in.Cordialement.

    Le code n'est pas trop complexe donc il sera aisé de le modifier si besoin

    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
    Private Sub CommandButton1_Click()
        With Feuil1
            .Cells.Delete
            Feuil5.[a1:m1].Copy .[a1:m1]
            .[a1:m1].Borders.LineStyle = xlContinuous
        End With
     
     
        Dim a, i, j
        a = Feuil3.UsedRange
        For i = 0 To ListBox1.ListCount - 1
            If ListBox1.Selected(i) = True Then
                For j = 2 To UBound(a)
                    If a(j, i + 5) <> "" Then
                        With Feuil5
                            Set trouve = .[b:b].Find(a(j, 2), LookIn:=xlValues, lookat:=xlWhole)
                            If Not trouve Is Nothing Then
                                .Range(.Cells(trouve.Row, 1), .Cells(trouve.Row, 13)).Copy Feuil1.[a65000].End(xlUp).Offset(1, 0)
                            End If
                        End With
                    End If
                Next
            End If
        Next
    With Feuil1.UsedRange
    .Columns.AutoFit
    .Rows.AutoFit
    End With
    End Sub
    Images attachées Images attachées  

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Par défaut
    Bonjour à tous !

    Ca s'approche beaucoup de ce que je voulais, encore merci PMO2017 !
    Merci à toi aussi Camarchepas, j'aimerais bien le fichier afin d'y jeter un coup d'œil aussi. Comment faire?

  5. #5
    Membre actif
    Homme Profil pro
    Chercheur à pôle emploi
    Inscrit en
    Juin 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chercheur à pôle emploi

    Informations forums :
    Inscription : Juin 2015
    Messages : 43
    Par défaut
    Ah bah sa marche maintenant...Pour rappel, dans l'userform vous selectionnez vos métier et vous cliquez sur commander
    Fichiers attachés Fichiers attachés

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Par défaut
    J'aimerai pousser la macro un peu plus loin!

    Je voudrai combiner plusieurs filtres. Après avoir filtré par métiers (Via la matrice externe métiers), je souhaiterai ajouter des filtres en fonction des éléments du tableau.

    Voir PJ :

    Par exemple lorsque je filtre par métier 2, j'ai 4 entreprises avec 4 risques différents, et j'aimerai pouvoir filtrer uniquement les risques A1 de ce métier.
    Pour ça j'étais parti sur une liste déroulante avec une formule index pour le filtre mais ca veut pas combiner avec le précédent filtre proposé par PMO2017 ...

    Help !
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Impression des données via une popup
    Par brazza dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/04/2007, 09h43
  2. invite de données via une procédure
    Par CYCLOPE91440 dans le forum SQL
    Réponses: 1
    Dernier message: 09/12/2006, 12h55
  3. Réponses: 15
    Dernier message: 20/06/2006, 10h29
  4. récupération des données via une liste déroulante
    Par rahan_dave dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 12h27
  5. Réponses: 7
    Dernier message: 20/03/2005, 14h53

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