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
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
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 SubPrivate 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 SubPrivate 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 SubPrivate 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 SubPrivate Sub Effacer_Click()
Unload Me 'Creation nouvelle offre en effacant les anciens donnés'
TrackingList2.Show
End SubPrivate Sub quitter_Click()
Me.Hide 'quitter l'userform'
Unload Me ' ' vide les controles
End SubPrivate 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 SubPrivate Sub cmdnouveau_Click()
Unload Me 'Creation nouvelle offre en effacant les anciens donnés'
TrackingList2.Show
End SubMerci 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
Résolu :
en remplçant l'ancien code DL par le nouveau:
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row