Filtrer Listbox par combobox

Bonjour a tous,

J'ai alimente mes listbox et combobox.

Sur les combobox 27 a 30, je souhaite filtrer ma listbox. les combobox sont indépendantes les unes aux autres, c'est juste pour de l'information.Elles sont aussi independantes par rapport aux choix des listbox 1 a 16.

Pouvez vous m'aider ? je ferais pour les combobox 28/29 et 30

@+

Re,

J'ai essaye ce code pour afficher les résultats de ma Listbox20 dans mes combobox et textbox, mais aucun résultat visible.

Private Sub ListBox20_Click()
Me.ComboBox1.Value = ListBox20.List(ListBox20.ListIndex, 0)
Me.ComboBox2.Value = ListBox20.List(ListBox20.ListIndex, 1)
End Sub

Pouvez-vous me guider ?

@+

edit modo : merci de mettre vos code entre balises en utilisant l'icone </> dans la barre de menu. J'ai corrigé sur ce post

Re,

J'ai aussi essaye cela:

Function extract_data_in_listbox()
Dim row_number As Integer
For row_number = 0 To ListBox20.ListCount
If (ListBox20.Selected(row_number) = True) Then
ComboBox1 = ListBox20.List(row_number, 0)
ComboBox2 = ListBox20.List(row_number, 1)
ComboBox3 = ListBox20.List(row_number, 2)
ComboBox4 = ListBox20.List(row_number, 3)
ComboBox5 = ListBox20.List(row_number, 4)
ComboBox6 = ListBox20.List(row_number, 5)
ComboBox7 = ListBox20.List(row_number, 6)
ComboBox8 = ListBox20.List(row_number, 7)
ComboBox9 = ListBox20.List(row_number, 8)
ComboBox10 = ListBox20.List(row_number, 9)
ComboBox11 = ListBox20.List(row_number, 10)
ComboBox12 = ListBox20.List(row_number, 11)
ComboBox13 = ListBox20.List(row_number, 12)
ComboBox14 = ListBox20.List(row_number, 13)
ComboBox15 = ListBox20.List(row_number, 14)
ComboBox16 = ListBox20.List(row_number, 15)
ComboBox17 = ListBox20.List(row_number, 16)
ComboBox18 = ListBox20.List(row_number, 17)
ComboBox19 = ListBox20.List(row_number, 18)
ComboBox20 = ListBox20.List(row_number, 19)
ComboBox21 = ListBox20.List(row_number, 20)
ComboBox22 = ListBox20.List(row_number, 21)
ComboBox23 = ListBox20.List(row_number, 22)
ComboBox24 = ListBox20.List(row_number, 23)
ComboBox25 = ListBox20.List(row_number, 24)
ComboBox26 = ListBox20.List(row_number, 25)
TextBox26 = ListBox20.List(row_number, 26)
TextBox27 = ListBox20.List(row_number, 27)
TextBox28 = ListBox20.List(row_number, 28)
TextBox29 = ListBox20.List(row_number, 29)
TextBox30 = ListBox20.List(row_number, 30)
End If
Next row_number
End Function

Private Sub ListBox20_Click ()

Call extract_data_in_listbox

End Sub

Rien non plus ....

?

Help,

@+

Bonjour

Je ne vois pas ce que vous cherchez à faire par le click dans la listbox. Les combos sont chargées à l'ouverture de l'USF

Par contre l'USF se charge avec une lenteur.... waouh

Crdlt

Re,

Merci du coup de main ce matin.

Je souhaite que les combobox aient 2 fonctions:

- que l'on puisse voir le résultat du clic sur une des lignes de la ListBox 20

- L'alimentation des combobox permettra de choisir les valeurs pour ajout d'une nouvelle ligne, les paramètres sont deja alimentes par Combobox, plus facile que d'ecrire la valeur avec une erreur.

En espérant avoir été clair dans mes explications,

@+

re

- Cliquez sur la listbox20 puis allez dans les propriétés de la listbox
- modifiez la propriété "multiselect" et mettez lui la valeur (fmmultiselectsingle)

Cordialement

NB : sinon des fois pourquoi vous faites intervenir la fonction doublons alors que votre tableau contient des valeurs uniques ?

J'ai essaye cela aussi mais rien

Private Sub ListBox20_Click()

   Me.ComboBox1 = Me.ListBox20
   Me.ComboBox2 = Me.ListBox20.Column(1)
   Me.ComboBox1.SetFocus

End Sub

Un As, merci Dan.

Je me suis taper 3 codes, alors que la fonction était simple.

Pour répondre a votre question:

NB : sinon des fois pourquoi vous faites intervenir la fonction doublons alors que votre tableau contient des valeurs uniques ?

Dans mon vrai tableau, avec les vraies valeurs, j'ai plein de doublon. Je n'ai pas mis dans le tableau que vous avez les vraies valeurs.

Une autre question, je souhaite, dans ma Listbox referencer la ligne ColumnHeads, je mis en True, mais aucune visibilite des informations sur cette ligne dans ma Listbox. Avez-vous une idee ?


Merci encore,


@+

Dans mon vrai tableau, avec les vraies valeurs, j'ai plein de doublon. Je n'ai pas mis dans le tableau que vous avez les vraies valeurs.

Il faut déterminer les colonnes où vous avez des doublons. Si je regarde la colonne 1, c'est une numéro unique non?

Une autre question, je souhaite, dans ma Listbox referencer la ligne ColumnHeads, je mis en True, mais aucune visibilite des informations sur cette ligne dans ma Listbox. Avez-vous une idee ?

cette fonctionnalité n'est disponible qu'en utilisant la propriété rowssource, ce que je vous déconseille d'ailleurs vu les soucis qu'elle peut apporter avec VBA.
Dans votre cas le mieux est de rajouter les titres au dessus de votre listbox. Cela va vous poser souci car vous importez beaucoup de colonnes. A voir si c'est nécessaire d'avoir toutes ces colonnes
L'autre solution si vous êtes sous excel Windows uniquement, c'est utiliser la listview mais là autant dire que vous devrez recommencer pas mal de codes.

Crdlt

Dan,

Merci pour vos conseils avises.

J'avais prévu une fois le formulaire ListBox effectuée de faire aussi celui avec ListView.

Oui, la colonne sera avec un numéro unique. A ce sujet il ne met pas la bonne valeur BT..... mais me met un chiffre décrémente de -1par rapport a la vraie valeur de la ligne.

Sur cette COMBOBOX1, quand j'ajouterais une nouvelle ligne je souhaite qu'il prenne la valeur BT0000x +1 par rapport a la dernière valeur la plus forte de cette colonne.

Je vais enlever les 27 dernière colonne ...

@+

Oui, la colonne sera avec un numéro unique. A ce sujet il ne met pas la bonne valeur BT..... mais me met un chiffre décrémente de -1par rapport a la vraie valeur de la ligne.

Alors dans votre procédure Initialize, le chargement de cette combobox peut se faire simplement avec cette unique ligne

Me.ComboBox5.List = Sheets("DATABASE").ListObjects(1).ListColumns(1).DataBodyRange.Value

au lieu de

Set d = CreateObject("scripting.dictionary")
....
Me.ComboBox5.List = liste_triée_sans_doublons(d.keys)

Sur cette COMBOBOX1, quand j'ajouterais une nouvelle ligne je souhaite qu'il prenne la valeur BT0000x +1 par rapport a la dernière valeur la plus forte de cette colonne.

C'est combobox5 non ?
Vous allez utiliser quel bouton ? Insert ?

C'est combobox1.

Je vais utiliser le bouton "INSERT" pour ajouter une ligne.

J'ai modifie le chargement des colonnes de la ListBox a 4.

@+

Je me suis trompe, il y aura aussi des doublons dans la premiere colonne ...

heu avant de continuer vous avez plein de fils ouverts sur le sujet avec des tas de fichiers

Je me trompe là ou les demandes sont différentes ?
C'est juste que je vois le nom identique de votre fichier

Ce serait peut être bien d'aller cloturer voire de supprimer les fichiers si le fil est terminé sans réponse

Les demandes etaient differentes, oui.

Cdlt

Les demandes etaient differentes, oui.

Les fils sont toujours ouverts pour vous ou pas ?


Oui, la colonne sera avec un numéro unique. A ce sujet il ne met pas la bonne valeur BT..... mais me met un chiffre décrémente de -1par rapport a la vraie valeur de la ligne.
Sur cette COMBOBOX1, quand j'ajouterais une nouvelle ligne je souhaite qu'il prenne la valeur BT0000x +1 par rapport a la dernière valeur la plus forte de cette colonne.

Donc vous pouvez utiliser la ligne que je vous ai donnée dans la sub initialize


Votre code simplifié ...

Private Sub ListBox20_Click()
Dim i As Byte

With Me
    For i = 1 To 26
        .Controls("ComboBox" & i).Text = .ListBox20.List(.ListBox20.ListIndex, i - 1)
    Next i

    For i = 26 To 30
        .Controls("TextBox" & i) = .ListBox20.List(.ListBox20.ListIndex, i - 1)
    Next i
    .ComboBox1.SetFocus
End With
End sub

J'ai modifie le chargement des colonnes de la ListBox a 4.

Non. Vous avez simplement fait en sorte que les infos soient masquées. Mettre la largeur de colonne à 0 ne veut pas dire que l'info ne se trouve pas dans la listbox.

Et à ce sujet,:
- la ligne colvisu..... ne sert à rien vous pouvez la supprimer
- For i = 1 To UBound(TblBD): TblBD(i, NbCol + 1) = i: Next i ne sert pas --> à vérifier

La sub initialize devrait être bien plus simple. Dans un autre fil BrunoM45 vous a fait des commentaires à ce sujet. Evitez de trop compliquer car avec excel on a vite une usine à gaz.

Oui Dan avec plaisir, c'est toujours ouvert !

Je vais appliquer vos correctifs et je vous tiens au courant, merci encore!

J'ai effectue vos correctifs, tout est opérationnel !

Semaine prochaine je m'attaque aux lignes de code pour charger les 3 images et un lien hypertext pour le champ technical report.

Bon Week end.

A la semaine prochaine si cela vous dit ... ?

Merci pour tout !

@+

Re

A la relecture votre sub initialize comme ceci

Private Sub UserForm_Initialize()
Dim j As Byte
Dim d
Dim i As Long

NomTableau = "Tableau1"
NbCol = Range(NomTableau).ListObject.ListColumns.Count
TblBD = Range(NomTableau).Resize(, NbCol + 1).Value

For j = 1 To 2
    Set d = CreateObject("scripting.dictionary")
    d.CompareMode = vbTextCompare
    For i = LBound(TblBD) To UBound(TblBD)
        d(TblBD(i, j + 4)) = vbNullString
    Next i
    Me.Controls("ChoixListBox" & j).List = liste_triée_sans_doublons(d.keys)
Next j

For j = 3 To 16
    Set d = CreateObject("scripting.dictionary")
    d.CompareMode = vbTextCompare
    For i = LBound(TblBD) To UBound(TblBD)
        d(TblBD(i, j + 7)) = vbNullString
    Next i
    Me.Controls("ChoixListBox" & j).List = liste_triée_sans_doublons(d.keys)
Next j

For j = 1 To 30
    Set d = CreateObject("scripting.dictionary")
    d.CompareMode = vbTextCompare
    For i = LBound(TblBD) To UBound(TblBD)
        Select Case j
            Case 29, 30: d(TblBD(i, j - 26)) = vbNullString
            Case Else: d(TblBD(i, j)) = vbNullString
        End Select
    Next i
    Me.Controls("ComboBox" & j).List = liste_triée_sans_doublons(d.keys)
Next j

With Me.ListBox20
    .ColumnCount = 31 'à par nbcol sir c'est tout le tableau qui est à prendre dans la listbox
    .List = TblBD
    .ColumnWidths = "75;200;75;75;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0"
End With
End Sub

J'ai vraiment l'impression que vous venez d'un tableau normal et que vous êtes passé au format structuré ensuite

Bonjour Dan,

Merci d’avoir pris de votre temps pour optimiser mes lignes de codes. Je ferais les correctifs Lundi prochain.

Cdlt

@+

Rechercher des sujets similaires à "filtrer listbox combobox"