Sub test()
Dim x As Byte 'déclare la variable x (incrément de checkbox)
Dim i As Byte, j As Byte 'déclare les variables i et j (incrément d'élément de checkbox)
Dim temp As String 'déclare la variable temp (variable TEMPoraire)
Me.Lst_Projets.Clear 'vide la listbox
For x = 1 To 3 'boucle 1 : sur les 3 checkboxes
If UserForm1.Controls("CheckBox" & x).Value = True Then 'condition : si la checkbox est cochée
For Each c In Range("Projets") 'boucle 2 : sur toutes les cellules de la plage "Projets"
'si la valeur de cellule de la colonne "état" est identique au texte de la checkbox, ajoute la cellule à la listbox
If c.Offset(0, 5).Value = UserForm1.Controls("CheckBox" & x).Caption Then UserForm1.Lst_Projets.AddItem c.Value
Next c 'prochaine cellule de la boucle 2
End If 'fin de la condition
Next x 'prochaine checkbox de de boucle 1
With UserForm1.Lst_Projets 'prend en compte la listbox
If .ListCount > 0 Then 'condition 1 : si la listbox contient au moins un élément
For i = 0 To .ListCount - 1 'boucle 1 : sur tous les éléments de la listbox
For j = 0 To .ListCount - 1 'boucle 2 : sur tous les éléments de la listbox
If .List(i) < .List(j) Then 'condition 2 : si l'élément de la boucle 1 est inférieur à l'élément de la boucle 2
temp = .List(i) 'place l'élément de la boucle 1 dans une variable temporaire
.List(i) = .List(j) 'récupère l'élément de la boucle 2
.List(j) = temp 'récupère l'élément de la boucle 1
End If 'fin de la condition 2
Next j 'prochain élément de la boucle 2
Next i 'prochain élément de la boucle 1
End If 'fin de la condition 1
End With 'fin de la prise en compte de la listbox
End Sub