Filtrer une listbox déjà remplie avec une Combobox

Bonjour le forum,

Je fais une fois de plus appel a vous pour votre aide qui est toujours au top.

J'ai une listeBox2 qui est rempli à l'aide d'un filtre dans une autre listebox1.

J'aimerais que la listbox2 soit encore filtrée à l'aide d'une combobox "Fournisseur" afin de faire un filtre selon le fournisseur.

Est-ce possible ?

Plus facile a comprendre en ouvrant mon fichier Excel.

8forum.xlsm (60.34 Ko)

Bonjour,

Il y a un truc qui m'intrigue dans votre fichier. Les codes sont pratiquement identiques à ceux trouvés dans le fichier au départ de ce fil --> https://forum.excel-pratique.com/s/goto/1136359

Du coup, juste pour comprendre, je me demande si jess1970 = lcn ? ou concidence ?

A moins que fichier vienne du site Boisgontier ?

Bonjour Dan,

C'est vrai qu'il ressemble beaucoup.
Il ne vient pas de chez Boisgontier. Je l'avais créer avec l'aide d'un collègue qui si connais beaucoup plus que moi, mais maintenant, il est a la retraite.

Du coup, je cherche dans mes bouquins et les forum.

C'est vrai qu'il ressemble beaucoup.

Bah plutôt oui d'autant que celui dans l'autre fil venait du site en question

Pour votre demande :
1. Vous avez uniquement trois fournisseurs ou vous pouvez en avoir plus ?. Car si c'est le cas, il faudrait en tenir compte au chargement de l'USF

2. A quoi correspondent les listbox1 et listbox2. Listbox 1 = LB_Liste_ST ?

Pour le moment, il y en a que trois fournisseurs, mais ça peut changer...

ListBox1 importe les données de la feuille "BD" quand je sélectionne une ligne dans cette list, ça rempli la list2 avec les détails et quand je sélectionne une ligne de cette deuxième list, les détail apparaissent sur les textBox et les label qui représentent les données sur les images(que vous ne voyer pas).

Le nom "LB_Liste_ST" ListBox Sous-Traitants" est l'ancien nom, il faut que je le change.

C'est déjà un fichier que j' utilise, mais avec des modifications pour en faire un nouveau.

1. Votre projet semble avoir par un mot de passe
Si je vais dans l'éditeur VBA -> propriétés.on demande un mot de passe. Quel est-il ?
Car sans le connaitre je ne peux rien faire


quand je sélectionne une ligne dans cette list, ça rempli la list2 avec les détails

Donc si on sélectionne "Vis réglable" la listbox LB_Liste_Contact prend les détails de la feuille Détails mais en fonction du fournisseur ?

La feuille BD sert aux commandes ? la feuille Détails contient un numéro d'article que l'on ne retrouve pas en feuille BD. Normal ?

Désolé mais j'essaie de comprendre le fonctionnement votre fichier.

Merci de passer du temps pour moi

Curieux le mot de passe, je l'ai retiré, mais c'est 1407 si jamais.

"Donc si on sélectionne "Vis réglable" la listbox LB_Liste_Contact prend les détails de la feuille Détails mais en fonction du fournisseur ?"

Non justement pas, il prend tout avec les 3 fournisseurs, c'est pour cela que j’aimerais choisir le fournisseur qui convient le mieux.

La feuille BD sert a avoir la liste du matériel ainsi que pour positionner dans les label des détails

2023 04 23 185928

Ok pour le mot de passe
Merci des explications. Très claires.

Je regarde cela.

Rem : c'est juste une pensée mais en voyant le chargement de la listbox1, je me demande pourquoi vous ne chargez pas l'USF depuis la feuille Details sachant que l'article existe bien puisque vous avez un fournisseur. Vous pourriez avoir un article qui existe dans la feuille BD et pas dans la feuille Détails car pas de fournisseur.

J'ai censuré le nom des fournisseur, mais au hasard. Alors c'est possible que les données soient incohérentes.

De plus, avec le premier filtre (par exemple "vis réglable") les 3 fournisseurs en possèdent

Ok. Mais la combo1 doit uniquement charger les fournisseurs connus pour l'article choisi dans la listbox1. Juste ?

Exact

Bonjour,

Votre colonne R où vous mentionnez ligne est utilisée pour repérer la ligne utilisée. En gros cela remplace un numéro de ref. Juste ?

Quel sera le nom des LB_Liste_ST et LB_Liste_Contact ? Listbox1 et Listbox2 ?

Oui, juste la colonne R est la pour numéroter mes lignes.
Pour le nom des LB, je ferais le changement. C'est gentil, mais je suis géné par le travail que cela vous demande

Ok.

La difficulté est que vous avez une listbox qui contient plus de 10 colonnes et que lors de la sélection de votre combo, le code doit être adapté
Là vous auriez pu utiliser une listview en lieu et place les codes sont assez différents et la listview n'est utilisable que sous excel windows (impossible sous excel MAC)

Je travail sous Window, donc si vous penser que ça peut marcher avec Listview, vous pouvez faire le changement

Hum...avec la listview il faut refaire l'USF et les codes. Long travail...

Alors non, j'abuse trop. Si vous arrivez avec la Listbox, c'est OK pour moi

Ok. Voici les étapes à suivre pour remplacer vos codes :

1. Au dessus de vos codes, mettez ceci en lieu et place de ce que vous avez actuellement

Option Compare Text
Option Explicit
Dim f1 As Worksheet, f2 As Worksheet
Dim ligArt As Integer
Dim choix()

2. Sub initialize (code pour l'instant mais cela pourrait changer plus tard).

Private Sub UserForm_Initialize()
Dim tablo As Collection
Dim cel As Range
Dim tb As ListObject
Dim item

Set f1 = Sheets("bd")
Set tb = f1.ListObjects(1)

With Me
    .LB_Liste_ST.List = tb.DataBodyRange.Value
    .LB_Liste_Contact.ColumnCount = 13 'nb colonnes de la listbox2
    .LB_Liste_Contact.ColumnWidths = "50;50;50;50;50;50;50;50;50;50;50;50;50" 'nb colonnes visibles
End With

'------------------------sera peut être replacée ailleurs plus tard
Dim i As Integer, k As Integer
Dim TblTmp

TblTmp = tb.DataBodyRange.Value
For i = LBound(TblTmp) To UBound(TblTmp)
    ReDim Preserve choix(1 To i)
    For k = LBound(TblTmp) To UBound(TblTmp, 2)
       choix(i) = choix(i) & TblTmp(i, k) & "*"
    Next k
Next i
End Sub

3. Sub LB_Liste_ST, : remplacez votre code par celui ci-dessous

Private Sub LB_Liste_ST_Click()
Dim tablo As Collection
Dim cel As Range
Dim tb As ListObject
Dim item

Me.DESIGNATION.Value = Me.LB_Liste_ST.List(LB_Liste_ST.ListIndex, 0)

'------------------------
Set f2 = Sheets("Détails")
Set tb = f2.ListObjects(1)
Set tablo = New Collection

Me.ComboBox1.Clear

Call efface

On Error Resume Next
With ThisWorkbook
    For Each cel In tb.ListColumns(2).DataBodyRange
        If cel.Offset(0, -1) = Me.DESIGNATION.Value Then
            tablo.Add cel.Value, CStr(cel.Value)
        End If
    Next cel
End With
On Error GoTo 0

For Each item In tablo
    Me.ComboBox1.AddItem item
Next item
End Sub

Faites déjà un test là dessus. Cela concerne le chargement de l'USF et de la combo en fonction de la listbox1

NB : je pense que vous devriez déjà penser à changer le nom de vos listbox....


EDIT : ajoutez aussi ce code

Private Sub efface()
Dim i As Byte
With Me
    .REF = vbNullString
    .TB_Nom_Contact = vbNullString
    For i = 0 To .LB_Liste_Contact.ColumnCount - 1
        .Controls("Textbox" & i + 50) = vbNullString
    Next i
End With
End Sub

J'ai fait les changement, et pour le moment, tout va bien

J'ai fait les changement, et pour le moment,

Ok mais j'ai fait un changement dans mon post précédent sur la sub LB_Liste_click
Rajoutez aussi la procédure que j'ai mis dans mon post sous EDIT

Refaites un test et dites moi si ok

Désolé...

Rechercher des sujets similaires à "filtrer listbox deja remplie combobox"