Combobox dépendantes
Bonjour à tous,
Étant débutant dans le VBA, mais grâce à l'aide de votre forum j'ai pu avancer sur ma macro, mais la je bloque depuis quelques jours.
Je vous explique :
Pour mon entreprise, je dois effectuer une macro qui permet à des managers de voir des informations.
J'ai donc créer un formulaire de recherche :
Hors lorsque je sélectionne un manager, je voudrais que le choix des agents se réduit, afin que le manager ne voit que ses agents, et pareil pour le stage, je voudrais que le manager voit que les stages de l'agent qu'il a sélectionné.
Ainsi une fois ces 3 combobox remplie que ça m'affiche dans la textbox seulement les dates disponibles pour le stage demandé.
Les informations concernant le manager, l'agent et le stage sont dans un classeur nommé "Besoin"
Les informations concernant la date et le stage est répété aussi dans un classeur nommé "Session"
Mon code à l'heure d'aujourd'hui me permet pas de réduire les choix possibles dans les combobox
Voici le code :
Private Sub Quitter_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Me.ComboBox1.Clear
Dim F As Worksheet
Set F = Sheets("Besoin")
Set mondico = CreateObject("Scripting.Dictionary")
a = F.Range("D2:D" & F.[D65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
For i = LBound(a) To UBound(a)
If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
Next i
'--avec tri
temp = mondico.keys
Call Tri(temp, LBound(temp), UBound(temp))
Me.ComboBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
G = gauc: d = droi
Do
Do While a(G) < ref: G = G + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If G <= d Then
temp = a(G): a(G) = a(d): a(d) = temp
G = G + 1: d = d - 1
End If
Loop While G <= d
If G < droi Then Call Tri(a, G, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
Private Sub ComboBox1_Change()
Dim F As Worksheet
Dim n As Variant
Dico_2:
Set F = Sheets("Besoin")
Set mondico = CreateObject("Scripting.Dictionary")
a = F.Range("B2:B" & F.[B65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
For i = LBound(a) To UBound(a)
If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
Next i
'--avec tri
temp = mondico.keys
Call Tri(temp, LBound(temp), UBound(temp))
Me.ComboBox2.List = temp
End SubEn espérant que vous pussiez m'aide;
Bien cordialement
Salut tabernake,
Dans l'évènement change de ta Combobox de sélection du Manager, il faut faire quelque chose du genre :
If Combobox_manager.value ="Benoît Brisfer" then
Combobox_agent.RowSource = "U5:U8"
Else if Combobox_manager.value ="Tonton Placide" then
Combobox_agent.RowSource = "U9:U12"
End ifEn ayant au préalablement rendu non sélectionnable ta Combobox agents.
Il faut savoir qu'il y a d'autre moyen d'alimenter une Combobox qu'avec RowSource.
En espérant t'avoir aidé,
Bonne journée,
Baboutz
Bonjour à toi Baboutz
Alors malheuresement le problème n'est pas si simple (je m'excuse pour le manque e précision), alors en faite les donnés change chaque semaine, c'est à dire que le manager peut voir en semaine 41 l'agent x et y, et en semaine 42 voir l'agent x et z.
Ces donnés de besoin comporte environ 12000 lignes et les sessions environ 70
Donc il me faut un moyen d'aller chercher les informations quelques soit la variable donné dans la combobox1 (Combobox manager)
Bonjour tabernake,
D'accord, mais c'est précisé dans le tableau ça non ? Que S41, le manager à agent x et y et que S42 y et z ?
Dans ce cas, tu récupères le N° de la semaine en cours en VBA avec Format(Date, "WW") puis tu fais un .find pour chercher dans le tableau de ta feuille Excel le N° de la semaine afin de récupère la plage des agents à renseigner !