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 :

Filtrer une ListBox selon la valeur d'une ComboBox [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Filtrer une ListBox selon la valeur d'une ComboBox
    Bonjour à toutes et à tous,

    Débutant en VBA, ce forum m'a jusqu'à maintenant très bien renseigné. J'en suis à la dernière étape de mon projet mais là je butte sur ce bout de code que j'ai récupéré mais n'arrive pas à adapter.


    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
    Private Sub ComboBox1_Click()
    Dim i As Long
     
    With ComboBox1
        For i = 1 To 9
            Controls("textbox" & i) = Cells(.List(.ListIndex, 1), i)
        Next i
    End With
    End Sub
     
    Private Sub AfficherLaListeButton_Click()
    Sheets("Base de Données").Select
    Dim i As Long
    With ComboBox1
        .Clear
        For i = 2 To Range("a65536").End(xlUp).Row
            .AddItem Cells(i, 4)
            .List(.ListCount - 1, 1) = i
        Next i
    End With
    ComboBox1.Visible = True
    End Sub
     
    Private Sub Userform_Initialize()
    Dim i As Long
     
    With ComboBox1
        .ColumnCount = 1
        .ColumnWidths = "10;0"
    End With
    End Sub
    Ce code affiche entre autre une liste de clients dans la ComboBox et un numéro de devis dans Textbox1 -> jusque là tout va bien

    Or après plusieurs essais je m'aperçois que si un client demande 2 devis par exemple, le premier devis uniquement est renvoyé -> j'aimerais donc pouvoir remplacer la Textbox1 par une ListBox pour pouvoir filtrer.

    J'ai un autre soucis par rapport à ce code : les informations renvoyées dans les Textbox sont celles des colonnes A,B,C etc. dans l'ordre. Or j'aimerais pouvoir choisir de n'afficher que certaines informations (A, C,D) par exemple.

    Voilà plusieurs heures que je cherche une solution à ces problèmes mais sans succès. Quelqu'un aurait il une idée s'il vous plaît ? J'imagine que cela n'a rien de compliqué mais là j'avoue être dépassé.

    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Ci-joint une proposition (en utilisant un filtre automatique)
    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
    62
    63
    64
    65
    66
    67
    'à l'Initialise de l'usf on définit et on cache la Combo et la ListBox
    'le nombre de colonnes peut être fait en dur dans proprieté
    Private Sub Userform_Initialize()
    Dim i As Long
     
    With Me.ComboBox1
        .ColumnCount = 1
        .Visible = False
    End With
    With Me.ListBox1
        .ColumnCount = 3
        .ColumnWidths = "20;100;50"
        .Visible = False
    End With
    End Sub
     
    'Au Clique, on remplit la Combo sans doublons et on l'affiche
    Private Sub AfficherLaListeButton_Click()
    Dim LastLig As Long, i As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Base de Données")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        Me.ComboBox1.Clear
        For i = 2 To LastLig
            If .Range("A" & i) <> "" Then
                Me.ComboBox1 = .Range("A" & i)
                If Me.ComboBox1.ListIndex = -1 Then Me.ComboBox1.AddItem .Range("A" & i)
            End If
        Next i
    End With
    With Me.ComboBox1
        .Visible = True
        .ListIndex = -1
    End With
    End Sub
     
    'Si on choisit un item de notre Combo, on remplit la listeBox des données de la colonne A, C et D
    'de la feuille base de donnée en utilisant un filtre automatique
    Private Sub ComboBox1_Change()
    Dim LastLig As Long
    Dim Code As String
    Dim c As Range
     
    Application.ScreenUpdating = False
    With Me.ListBox1
        .Clear
        .Visible = False
    End With
    Code = Me.ComboBox1.Value
    If Me.ComboBox1.ListIndex > -1 Then
        With Worksheets("Base de Données")
            .AutoFilterMode = False
            LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
            .Range("A1:A" & LastLig).AutoFilter Field:=1, Criteria1:=Code
            For Each c In .Range("A2:A" & LastLig).SpecialCells(xlCellTypeVisible)
                With Me.ListBox1
                    .AddItem c
                    .List(.ListCount - 1, 1) = c.Offset(0, 2)
                    .List(.ListCount - 1, 2) = c.Offset(0, 3)
                End With
            Next c
            Me.ListBox1.Visible = True
            .AutoFilterMode = False
        End With
    End If
    End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Novembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Novembre 2011
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Bonsoir Mercatog,

    Merci pour votre réponse rapide. Un simple copier/coller dans mon userform et tout fonctionne

    Si seulement je comprenais la moitié de votre code maintenant ... je ne voudrais pas vous déranger alors je vais chercher par moi-même dans les rubriques de ce site mais bravo en tous cas et merci, merci beaucoup.

    Bonne soirée

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

Discussions similaires

  1. [Toutes versions] Extraire une valeur d'une ListBox pour l'afficher dans une cellule
    Par stid59 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/04/2009, 22h05
  2. Réponses: 0
    Dernier message: 25/02/2008, 15h31
  3. Afficher Une Liste Selon La Valeur D'une Cellule
    Par Kevin_18 dans le forum Excel
    Réponses: 10
    Dernier message: 02/07/2007, 19h22
  4. Réponses: 4
    Dernier message: 23/04/2007, 14h01
  5. Réponses: 5
    Dernier message: 28/08/2006, 18h11

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