Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/11/2011, 13h11   #1
Invité régulier
 
Homme Jérôme
Responsable de compte
Inscription : novembre 2011
Messages : 12
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Localisation : France, Aube (Champagne Ardenne)

Informations professionnelles :
Activité : Responsable de compte

Informations forums :
Inscription : novembre 2011
Messages : 12
Points : 8
Points : 8
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 :
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
Jeromeric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 14h24   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour
Ci-joint une proposition (en utilisant un filtre automatique)
Code :
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
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/11/2011, 23h38   #3
Invité régulier
 
Homme Jérôme
Responsable de compte
Inscription : novembre 2011
Messages : 12
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Localisation : France, Aube (Champagne Ardenne)

Informations professionnelles :
Activité : Responsable de compte

Informations forums :
Inscription : novembre 2011
Messages : 12
Points : 8
Points : 8
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
Jeromeric est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h33.


 
 
 
 
Partenaires

Hébergement Web