Option Explicit
Private pl As Range 'déclare la variable pl (PLage)
Private cel As Range 'déclare la variable cel (CELlule)
Private dico As Object 'déclare la variable dico (DICiOnnaire)
Private temp As Variant 'déclare la variable temp (TEMPoraire)
Private li As Integer 'déclare la variable li (LIgne)
Private Sub UserForm_initialize() 'à l'initialisation de l'UserForm
Set dico = CreateObject("Scripting.Dictionary") 'définit le dictionnaire dico
With Sheets("bdprojet") 'prend en compte l'onglet "bdprojet"
Set pl = .Range("D4:D" & .Cells(Application.Rows.Count, 2).End(xlUp).Row) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellule éditées cel de la plage pl
dico(cel.Value) = "" 'alimente le dictionnaire dico
Next cel 'prochaine cellule cel de la boucle
End With 'fin de la prise en compte de l'onglet "bdcontact"
temp = dico.keys 'récupère les éléments du dictionnaire sans doublon
'Call tri(temp, LBound(temp, 1), UBound(temp, 1)) 'classement par ordre croissant
mdrprojet.List = temp 'alimente la combobox "Type de projet" par la liste sans doublon
End Sub
Private Sub mdrprojet_Change() 'au changement dans la combobox "Type de projet"
Me.mdrphase.Clear 'vide la combobox "Phase"
Me.Listactivite.Clear 'vide la listbox "Activité"
Set dico = CreateObject("Scripting.Dictionary") 'définit le dictionnaire dico
For Each cel In pl 'boucle sur toutes les cellule éditées cel de la plage pl
'si la valeur de la cellule cel est égale à la valeur de la combobox "Type de projet", alimente le dictionnaire dico
If cel.Value = Me.mdrprojet.Value Then dico(cel.Offset(0, 2).Value) = ""
Next cel 'prochaine cellule cel de la boucle
temp = dico.keys 'récupère les éléments du dictionnaire sans doublon
'Call tri(temp, LBound(temp, 1), UBound(temp, 1)) 'classement par ordre croissant
mdrprojet.List = temp 'alimente la combobox "Projet" par la liste sans doublon
End Sub
Private Sub mdrphase_Change() 'au changement dans la combobox "Phase"
Me.Listactivite.Clear 'vide la listbox "Activite"
If Me.mdrprojet.Value <> "" Then 'condition 1 : si la combobox "Type de projet" n'est pas vide
For Each cel In pl 'boucle sur toutes les cellule éditées cel de la plage pl
'condition 2 : si le type de contact et le nom de la société coïncident avec les comboboxes mdrtype et mdrsociete
If cel.Value = Me.mdrprojet.Value And cel.Offset(0, 2).Value = Me.mdrphase Then
li = cel.Row 'définit la ligne li
With Me.Listactivite 'prend en compte la listbox "Activite"
.AddItem (cel.Offset(0, 3).Value) 'ajoute le nom à la listbox
.Column(1, .ListCount - 1) = li 'récupère le numéro de ligne
End With 'fin dela prise en compte le la listbox "Nom"
End If 'fin de la condition 2
Next cel 'prochaine cellule cel de la boucle
End If 'fin de la condition 1
End Sub
Private Sub Listactivite_Click() 'au clic dans la listbox "Activite"
With Me.Listactivite 'prend en compte la listbox "activite"
If .Value = "" Then Exit Sub 'si le clic est fait sur une valeur vide'sort de la procédure
li = Me.Listactivite.Column(1, .ListIndex) 'récupère le numéro de ligne li
End With 'fin de la prise en compte de la listbox "Nom"
'récupère les valeurs de l'onglet "bdprojet"
End Sub