Liaison de 3 filtres Combobox

Bonjour à tous

j'ai encore besoin de votre aide sur un sujet de filtres :

Situation actuelle : Dans mon fichier actuel sur le macro " Modfier" , l'utilisateur sélectionne le client puis le projet correspondant à ce client choisi. Suite à cette sélections les informations liés à ce client s'affiche donc il peut modifier ou compléter.

Mon objectif : J'aimerai que l'utilisateur puisse choisir le client, puis le responsable des ventes (Sales) , et enfin sur le combox "project ya uniquement les projets liés a ce client et au responsable de vente choisi qui s'affiche.

Sur mon fichier le responsable des ventes (sales) est aujourd'hui en txtbox

Pour résumer aujourd'hui j'ai deux filtres liés j'aimerai passer à trois filtres si possible.

Merci d'avance de votre aide.

Divya

17test.xlsm (160.77 Ko)

Bonjour,

Si j'ai bien compris ta demande, on part de l'USF Trackinlist2 ou pas ?

Si oui, il faudrait en premier lieu déplacer ta liste de "Sales manager" dans la feuille Code

C'est pas bon de mettre les liste l'une en dessous des autres surtout si tu dois ajouter dans le futur

Exemple, mettre les Sales manager en colonne C. Possible ou pas ?

Ensuite créer une combobox qui reprend la liste des sales manager pour faire le choix

Ok pour ces modif ?

A te relire

Oui pour l'USF "trackinglist 2"

J'ai fais les modifs .

( j'ai pris note pr les tableaux t'as raison je vais faire le nécessaire)

Merci encore de ton aide

17test-v2.xlsm (164.55 Ko)

Bonjnour Kitoune, Dan, bonjour le forum,

@Dan ! Bonjour, quelle surprise de te voir ici...

@Kitoune

Arf ! Ma réponse concerne ton premier fichier exemple... Je viens de découvrir que tu en avais mis un second...

J'ai donc remplacé la textbox cmdsales par une combobox que j'ai nommé aussi cmbsales et modifié le code :

Private O As Object 'déclare la variable O (Onglet)
Private TC As Variant 'déclare la variable TC (Tableau de Cellules)
Private Sub Userform_Initialize() 'à l'intitialisation de l'Userform
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim DC As Object 'déclare la variable DC (Disctionnaire Customer)
Dim DSM As Object 'déclare la variable DSM (Dictionnaire Sales Manager)
Dim DP As Object 'déclare la variable DP (Dictionnaire Project)
Dim I As Integer 'déclare la variable I (Incrément)

Set O = Sheets("TRACKING LIST ") 'définit l'onglet O
DL = O.Range("A1").End(xlDown).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet O
TC = O.Range("A1:Y" & DL) 'définit le tableau de cellules TC
Set DC = CreateObject("Scripting.Dictionary") 'définit le dictionnaire DC
Set DSM = CreateObject("Scripting.Dictionary") 'définit le dictionnaire DSM
Set DP = CreateObject("Scripting.Dictionary") 'définit le dictionnaire DP
For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes du tableau de cellules TC en partant de la seconde
    DC(TC(I, 4)) = "" 'alimente le dictionnaire DC
    DSM(TC(I, 7)) = "" 'alimente le dictionnaire DSM
    DP(TC(I, 6)) = "" 'alimente le dictionnaire DP
Next I 'priochaine ligne de la boucle
cmbcustomer.List = DC.keys 'alimente la combobox "cmbcustomer" avec les éléments du dictionnaire DC sans les doublons
cmbsales.List = DSM.keys 'alimente la combobox "cmbsales" avec les éléments du dictionnaire DSM sans les doublons
ComboBoxRef.List = DP.keys 'alimente la combobox "ComboBoxRef" avec les éléments du dictionnaire DP sans les doublons

cbbp.RowSource = ("CODE!Tableau9")
cbbp.ListIndex = -1
cbdec.RowSource = ("CODE!Tableau10")                 'cherche les infos depuis la feuille excel pour mettre sur le formulaire'
cbdec.ListIndex = -1
cbnobid.RowSource = ("CODE!Tableau8")
cbnobid.ListIndex = -1
bp.RowSource = ("CODE!Tableau2")
bp.ListIndex = -1
offer.RowSource = ("CODE!Tableau9")
offer.ListIndex = -1
reasons.RowSource = ("CODE!Tableau13")
reasons.ListIndex = -1
proposal.RowSource = ("CODE!Tableau11")
proposal.ListIndex = -1
cblessons.RowSource = ("CODE!Tableau1")
cblessons.ListIndex = -1
End Sub
Private Sub cmbcustomer_Change() 'au changement dans la combobox "cmbcustomer"
Dim D As Object 'déclare la variable D (Dictionnaire)

Me.cmbsales.Clear 'vide la combobox "cmbsales"
Me.ComboBoxRef.Clear 'vide la combobox "ComboBoxRef"
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes du tableau de cellules TC en partant de la seconde
    'condition : si la valeur du tableau TC ligne : li, colonne : 4, est égale à la valeur de la combobox "cmbcustomer"
    If TC(I, 4) = Me.cmbcustomer.value Then
        Me.ComboBoxRef.AddItem TC(I, 6) 'ajoute la valeur du tableau TC ligne : I, colonne : 6, à la combobox ".ComboBoxRef"
        D(TC(I, 7)) = "" 'alimente le dictionnaire D
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
Me.cmbsales.List = D.keys 'alimente la combobox "cmbsales" avec les éléments du dictionnaire DSM sans les doublons
End Sub
Private Sub cmbsales_Change() 'au changement dans la combobox "cmbcustomer"
Me.ComboBoxRef.Clear 'vide la combobox "ComboBoxRef"
For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes du tableau de cellules TC en partant de la seconde
    'condition : si la valeur du tableau TC ligne : I, colonne : 4 est égale à la valeur de la combobox "cmbcustomer" et
    'si la valeur du tableau TC ligne : I, colonne : 7 est égale à la valeur de la combobox "cmbsales"
    If TC(I, 4) = Me.cmbcustomer.value And TC(I, 7) = Me.cmbsales.value Then
        Me.ComboBoxRef.AddItem TC(I, 6) 'ajoute la valeur du tableau TC ligne : I, colonne : 6, à la combobox "ComboBoxRef"
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub
Private Sub ComboBoxRef_Change() 'au changement dans la combobox "ComboBoxRef"
Dim LI As Integer 'déclare la variable LI (LIgne)

For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes du tableau de cellules TC en partant de la seconde
    'condition : si la valeur du tableau TC ligne : I, colonne : 4 est égale à la valeur de la combobox "cmbcustomer" et
    'si la valeur du tableau TC ligne : I, colonne : 7 est égale à la valeur de la combobox "cmbsales" et
    'si la valeur du tableau TC ligne : I, colonne : 6 est égale à la valeur de la combobox "ComboBoxRef" et
    If TC(I, 4) = Me.cmbcustomer.value And TC(I, 7) = Me.cmbsales.value And TC(I, 6) = Me.ComboBoxRef.value Then
        LI = I 'définit la ligne LI
        Exit For 'sort de la boucle
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle

project = O.Cells(LI, "H")
cbbp = O.Cells(LI, "I").value
turnover = O.Cells(LI, "J").value
cbdec = O.Cells(LI, "K").value
cbnobid = O.Cells(LI, "L").value
bp = O.Cells(LI, "M").value
dateBP = O.Cells(LI, "N").value
txtrevenue = O.Cells(LI, "O").value
txtbottom = O.Cells(LI, "P").value
txtcurrent = O.Cells(LI, "Q").value
offer = O.Cells(LI, "R").value
dateOR = O.Cells(LI, "S").value
proposal = O.Cells(LI, "T").value
txtrevenue2 = O.Cells(LI, "U").value
cblessons = O.Cells(LI, "V").value
txtdatelessons = O.Cells(LI, "W").value
reasons = O.Cells(LI, "X").value
comm = O.Cells(LI, "Y").value
End Sub
Private Sub Effacer_Click()
Unload Me                                        'Creation nouvelle offre en effacant les anciens donnés'
TrackingList2.Show
End Sub
Private Sub quitter_Click()
Me.Hide 'quitter l'userform'
Unload Me '  ' vide les controles
End Sub
Private Sub Enregistrer_Click()
lig = .Columns("F:F").Find(ComboBoxRef, LookIn:=xlValues).Row
O.Cells(lig, "G").value = cmbsales
O.Cells(lig, "H").value = project
O.Cells(lig, "I").value = cbbp
O.Cells(lig, "J").value = turnover
O.Cells(lig, "K").value = cbdec
O.Cells(lig, "L").value = cbnobid
O.Cells(lig, "M").value = bp
O.Cells(lig, "N").value = dateBP
O.Cells(lig, "O").value = txtrevenue
O.Cells(lig, "P").value = txtbottom
O.Cells(lig, "Q").value = txtcurrent
O.Cells(lig, "R").value = offer
O.Cells(lig, "S").value = dateOR
O.Cells(lig, "T").value = proposal
O.Cells(lig, "U").value = txtrevenue2
O.Cells(lig, "V").value = cblessons
O.Cells(lig, "W").value = txtdatelessons
O.Cells(lig, "X").value = reasons
O.Cells(lig, "Y").value = comm
End Sub
Private Sub cmdnouveau_Click()
Unload Me                                        'Creation nouvelle offre en effacant les anciens donnés'
TrackingList2.Show
End Sub

Merci bcp ThauThème c'est exactement ça!!!!

Merci aussi Dan

Bonjour ,

Je rouvre le sujet car le code marche nikel mais lorque je selectionne le "customer" puis le "sales" et enfin project.

Il ne m'affiche que les 6 premiers projets et non l'ensemble des projets liés au client et au responsable de vente.

Par exemple quand je fais le filtre basique sur excel je vais retrouver 6 projets liés au meme client et le mme responsable des ventes

L'userform "trackinglist2" m'affiche uniquement les 4 premiers..

Merci de votre aide

61test-v3.xlsm (165.09 Ko)

Résolu :

en remplçant l'ancien code DL par le nouveau:

DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row

Rechercher des sujets similaires à "liaison filtres combobox"