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

Excel Discussion :

Filtrer un tableau à partir d'une COMBO BOX


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire de contrats
    Inscrit en
    Octobre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de contrats
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Filtrer un tableau à partir d'une COMBO BOX
    Bonjour à tous

    Je souhaite filtrer un tableau à partir d'une valeur située dans une COMBO BOX Située sur u USER FORM

    L'action de la macro bute sur

    Range("LigNom").Select

    Je pense que cette écriture correspond à une seule ligne, alors qu'il peut y avoir plusieurs lignes à filtrer.

    Ci après l'écriture de ma macro

    Nom de la COMBOBOX ou se trouve la valeur à filtrer = cmbFiltSecteur
    Nom de la plage du tableau à filtrer = NomPlage
    Nom de la plage de la colonne qui doit être filtrée = RechSect
    Nom de l'entête de la colonne qui doit être filtrée = Secteur

    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
    Private Sub cmbFiltSecteur_Change()
     
    Dim contacts As Object
    Dim nom As String
    Dim ligNom As Integer
    Dim cellule As Object
     
    Set contacts = Sheets("Contacts")
     
    nom = Me.cmbFiltSecteur
    ligNom = False
    For Each cellule In Range("RechSect")
        If cellule = nom And ligNom = False Then
            ligNom = cellule.Row
        End If
    Next cellule
     
     If ligNom <> False Then
     
    Range("NomPlage").Select
        Selection.AutoFilter
        ActiveSheet.Range("NomPlage").AutoFilter Field:=1
     
      Range("LigNom").Select
     
            Unload Me
     
    Else
        MsgBox ("Le nom" & nom & " est introuvable")
     
    End If
     
    End Sub
    Cordialement

  2. #2
    Membre émérite Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Points : 2 439
    Points
    2 439
    Par défaut
    Bonjour jlduboc,

    Premièrement pour aider les utilisateurs a te lire et leurs donner plus de chance de t'aider, utilise les Balise de code (#)

    Apres voir lu rapidement ton code, il y a déjà quelque chose de pas logique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ligNom As Integer
    ligNom = False
    Range("LigNom").Select
    Que la variable soit de type Integer ou Booléen, Range n'a aucune change de fonctionner.
    Antony

    Mieux vaut ne rien dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.
    Gustave Parking


    Si le post vous est utile un petit fait toujours plaisir et pensez à passer en

    Et surtout -> Balise CODE

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire de contrats
    Inscrit en
    Octobre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de contrats
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour

    Effectivement mon écriture n'était pas correcte
    J'ai essayé autre chose

    J'ai matérialisé des étapes avec des messages Box pour visualiser les parties qui fonctionnent.
    et j'ai utlisé des feuilles de relai car je souhaite ultérieurement récupérer les lignes filtrées pour un 2ème niveau de filtre.

    Mon écriture ne fonctionne pas au niveau du filtre

    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
    Private Sub cmbFiltSecteur_Change()
     
    Sheets("Contacts").Select
     
    'Récupère le texte à trier dans la COMBO BOX
     
    Dim Sect As String
    Sect = usfRecherche.cmbFiltSecteur.Value
     
    'Copie le texte à trier dans la feuille "Critères" et dans la cellule A2
     
    Sheets("Critères").Cells(2, 1).Value = Sect
     
    'Affiche le texte saisi
     
    MsgBox Sect
     
    Dim i As String
     
    'Compte le nombre de lignes non vides
     
    i = Application.WorksheetFunction.CountA(Range("A:A"))
     
    'Affiche le nombre de cellules non vides
     
    MsgBox i
     
    'Copie de la première ligne sur la feuille "Filtre"
     
    Sheets("Contacts").Select
    Range("A1").EntireRow.Select
    Selection.Copy
    Sheets("Filtre").Select
    Range("A1").Select
    ActiveSheet.Paste
     
    'Filtre
     
    With Worksheets("Contacts").Range("NomPlage").AdvancedFilter Action:=xlFilterCopy,
         CriteriaRange:=Sheets("Critères").Range("A2"),
         CopyToRange:=Sheets("Filtre").Cells, Unique:=False
     
    End With
     
    End Sub
    Voila je n'ai pas beaucoup d'expérience en programmation VBA, cette application que je souhaite réaliser sera pour moi la dernière, je la transmettrai à mes successeurs.

    Cordialement

  4. #4
    Membre émérite Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Points : 2 439
    Points
    2 439
    Par défaut
    Bonjour jlduboc,

    Voilà un code qui devrait faire ton bonheur :
    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
    Private Sub cmbFiltSecteur_Change()
     
    If usfRecherche.cmbFiltSecteur.Value = "" Then
        'rien
    Else
        Dim Sect As String
        Sect = usfRecherche.cmbFiltSecteur.Value
     
        Sheets("Critères").Cells(2, 1).Value = Sect
     
        Dim i As String
        i = Application.WorksheetFunction.CountA(Range("A:A"))
     
        Sheets("Filtre").Select
        Range(Cells(2, 1), Cells(Application.Rows.Count, 2)).ClearContents
     
        Sheets("Contacts").Range("A1:B4").AdvancedFilter _
            Action:=xlFilterCopy, _
            CriteriaRange:=Sheets("Critères").Range("A1:A2"), _
            CopyToRange:=Range("A1:B2")
    End If
     
    End Sub
    Tu as juste à adapter à ta base Contacts car ici je ne prends que 2 colonnes.
    La ligne CopyToRange:=Range("A1:B2") correspond a la ligne d'en-tête qui doit être présente sur la ligne 1 de l'onglet Filtre
    Antony

    Mieux vaut ne rien dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.
    Gustave Parking


    Si le post vous est utile un petit fait toujours plaisir et pensez à passer en

    Et surtout -> Balise CODE

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire de contrats
    Inscrit en
    Octobre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de contrats
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2011
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par antonysansh Voir le message
    Bonjour jlduboc,

    Voilà un code qui devrait faire ton bonheur :
    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
    Private Sub cmbFiltSecteur_Change()
     
    If usfRecherche.cmbFiltSecteur.Value = "" Then
        'rien
    Else
        Dim Sect As String
        Sect = usfRecherche.cmbFiltSecteur.Value
     
        Sheets("Critères").Cells(2, 1).Value = Sect
     
        Dim i As String
        i = Application.WorksheetFunction.CountA(Range("A:A"))
     
        Sheets("Filtre").Select
        Range(Cells(2, 1), Cells(Application.Rows.Count, 2)).ClearContents
     
        Sheets("Contacts").Range("A1:B4").AdvancedFilter _
            Action:=xlFilterCopy, _
            CriteriaRange:=Sheets("Critères").Range("A1:A2"), _
            CopyToRange:=Range("A1:B2")
    End If
     
    End Sub
    Tu as juste à adapter à ta base Contacts car ici je ne prends que 2 colonnes.
    La ligne CopyToRange:=Range("A1:B2") correspond a la ligne d'en-tête qui doit être présente sur la ligne 1 de l'onglet Filtre

    Bonjour

    L'écriture proposée ne fait que copier la ligne de titre sur la feuille "Filtre" mais ne copie pas les lignes que je veux filtrer.

    Cordialement

  6. #6
    Membre émérite Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Points : 2 439
    Points
    2 439
    Par défaut
    Bonjour jlduboc,

    Tu dois adapter à ta base car là c'est juste un exemple d'utilisation.
    Dans l'exemple je ne prends que 2 colonnes et suppose que ton ComboBox est une valeur de la première colonne si ce n'est pas le cas tu ne filtre effectivement sur rien.

    Voilà un très bon tuto de ce site pour t'aiguiller : tutoriel advancedfilter

    Tu peux aussi mettre ton fichier a disposition pour que j'adapte à ta base et commentant au mieux le code.
    Antony

    Mieux vaut ne rien dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.
    Gustave Parking


    Si le post vous est utile un petit fait toujours plaisir et pensez à passer en

    Et surtout -> Balise CODE

Discussions similaires

  1. Filtrer via une combo box
    Par lefabe dans le forum IHM
    Réponses: 2
    Dernier message: 25/09/2013, 15h33
  2. Griser un champ à partir d'une combo-box (options-collection)
    Par volundr dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 19/04/2010, 15h34
  3. Réponses: 2
    Dernier message: 20/09/2009, 18h12
  4. Filtrer un datagrid à partir d'une texte box
    Par Pwouaro dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/07/2008, 16h26
  5. Modif d'un ini dans une combo box
    Par Julien.alkaza dans le forum C++Builder
    Réponses: 5
    Dernier message: 03/04/2005, 23h39

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