Private O As Worksheet 'déclare la variable O (Onglet)
Private DL As Integer 'déclare la variable DL (Dernière Ligne)
Private PL As Range 'déclare la variable PL (PLage)
Private PLV As Range 'déclare la variable PLV (PLage Visible)
Private Sub UserForm_Initialize()
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Set O = Worksheets("Trav") 'définit l'onglet O
If O.FilterMode = True Then O.Range("A2").AutoFilter 'si l'onglet est filtrée, supprime le filtre
Me.ListBox1.ColumnCount = 6 'définit le nombre de colonne de la ListBox1 (6 colonnes de 0 à 5)
Me.ListBox1.ColumnWidths = "55 pt;55 pt;55 pt;55 pt;55 pt;0 pt" 'définit la largeur des colonnes de la Listbox1 ( la dernière =0 est cachée)
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O
Set PL = O.Range("A3:A" & DL) 'définit la plage PL
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For Each CEL In PL.Offset(0, 10) 'boucle sur toutes les cellule CEL de la plage PL décalée de 10 colonnes à droite (=colonne K)
D(CEL.Value) = "" 'alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle
Me.ComboBox1.List = D.keys 'récupère la liste des éléments du dictionnaire sans doublon
End Sub
Private Sub ComboBox1_Click()
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim I As Byte 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
O.Range("A2").AutoFilter 11, ComboBox1.Value 'filtre la colonne K de l'onglet O avec la valeur de la ComboBox1 comme critère
Set PL = PL.Offset(0, 2) 'redéfinit la plage PL (colonne C)
Set PLV = PL.SpecialCells(xlCellTypeVisible) 'définit la plage PLV (cellules visibles de la palge PL)
For Each CEL In PLV 'boucle 1 : sur toutes les cellules CEL de la plage PLV
With Me.ListBox1 'prend en compte la ListBox1
.AddItem CEL.Value 'ajoute la valeur de la cellue CEL à la ListBox1 (colonne 0)
For I = 1 To 4 'boucle 2: sur les colonnes 1 à 4 de la ListBox1
Select Case I 'agit en fonction de I
Case 1, 2, 3 'cas où I vaut 1, 2 et 3
J = I + 3 'définit la variable J
Case 4 'cas où I vaut 4
J = I + 7 'définit la variable J
End Select 'fin de l'action en fonction de I
.Column(I, .ListCount - 1) = O.Cells(CEL.Row, J) 'rajoute dans la colonne I de la Listox1 les données en vert
Next I 'prochaine colonne de la boucle 2
.Column(5, .ListCount - 1) = CEL.Row 'rajoute dans la colonne 5 (cachée) de la ListBox1 le numéro de ligne (pourra te servir ultérieurement***)
End With 'fin de la prise en compte de la ListBox1
Next CEL 'prochaine cellule de la boucle 1
Me.TextBox1.Value = Me.ListBox1.ListCount 'rajoute dans le TextBox1 le nombre d'éléments de la ListBox1
Me.ComboBox1.RemoveItem (Me.ComboBox1.ListIndex) 'supprime de la ComboBox1 l'élément sélectionné
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 'au double-clic dans la ListBox1***
Dim LI As Integer 'déclare la variable LI (LIgne)
With Me.ListBox1 'prend en compte la ListBox1
LI = .Column(5, .ListIndex) 'récupère la ligne de l'élément double-cliqué
End With 'fin de la prise en compte de la ListBox1
O.Range("A2").AutoFilter 'supprime le filtre
O.Cells(LI, 1).Resize(1, 11).Select 'sélectionne la ligne de l'élément double-cliqué
Unload Me 'vide et ferme l'UserForm
End Sub
Private Sub CommandButton2_Click() 'bouton "Exit"
If O.FilterMode = True Then O.Range("A2").AutoFilter 'si l'onglet est filtrée, supprime le filtre
Unload Me 'vide et ferme l'UserFomr
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'à la fermeture par la croix
If O.FilterMode = True Then O.Range("A2").AutoFilter 'si l'onglet est filtrée, supprime le filtre
End Sub