Private Sub CommandButton1_Click()
Dim c As Object 'déclare la variable c (onglet Choix)
Dim r As Object 'déclare la variable r (onglet Résiltats)
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLAGE)
Dim pspl As Range 'déclare la variable pspl (Plage Sans Première Ligne)
Dim ctrl As Control 'déclare la variable ctrl (ConTRôLe)
Dim col As Byte 'déclare la variable col (COLonne)
Dim test As Boolean 'déclare la variable test
Set c = Sheets("Choix") 'définit l'onglet c
Set r = Sheets("Résultats") 'définit l'onglet r
r.Range("A6").CurrentRegion.Clear 'efface les éventuelles anciennes données de l'onglet r
r.Range("I1:I3").Clear 'efface les références de la recherche
dl = c.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 c
Set pl = c.Range("A3:T" & dl) 'définit la plage pl
Set pspl = c.Range("A4:T" & dl) 'définit la plage pspl (Plage pl Sans la Première Ligne)
For Each ctrl In Me.Controls 'boucle sur tous les contrôles de l'UserForm
If TypeOf ctrl Is msforms.OptionButton Then 'condition 1 : si le contrôle est un bouton d'option
If ctrl = True Then 'condition 2 : si le bouton est coché
col = CByte(ctrl.Tag) 'récupère la colonne dans la propriété "Tag" du contrôle
test = True 'définit la variable test
r.Range("I1") = ctrl.Caption 'place l'aptitude en I1 de l'onglet r
Exit For 'sort de la boucle
End If 'fin de la condition 2
End If 'fin de la condition 1
Next ctrl 'prochain contrôle de la boucle
If c.FilterMode = True Then pl.AutoFilter 'si la plage pl est en mode filtre automatique, supprime le filtre automatique
If test = True Then pl.AutoFilter Field:=col, Criteria1:="X" 'filtre la plage par rapport au X dans la colonne col
If Me.ComboBox1.Value <> "" Then 'condition : si la ComboBox1 n'est pas vide
pl.AutoFilter Field:=3, Criteria1:=Me.ComboBox1.Value 'filtre la plage pl par rapport au groupe
r.Range("I2").Value = Me.ComboBox1.Value 'place le groupe en I2 de l'onglet r
End If 'fin de la condition
If Me.ComboBox2.Value <> "" Then 'condition si la ComboBox2 n'est pas vide
Select Case Me.ComboBox2.Value 'agit en fonction de la valeur de la ComboBox2
Case "Petite Taille" 'cas "Petite Taille"
col = 18 'définit la colonne col
r.Range("I3").Value = "Petite Taille" 'place la taille en I3 de l'onglet r
Case "Moyenne Taille" 'cas "Moyenne Taille"
col = 19 'définit la colonne col
r.Range("I3").Value = "Moyenne Taille" 'place la taille en I3 de l'onglet r
Case "GrandeTaille" 'cas "GrandeTaille" (il n'y a pas d'espace ?)
col = 20 'définit la colonne col
r.Range("I3").Value = "Grande Taille" 'place la taille en I3 de l'onglet r
End Select 'fin de l'action en fonction de ...
pl.AutoFilter Field:=col, Criteria1:="X" 'filtre par rapport au X dans la colonne col
End If 'fin de la condition
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante
'copie les coloones A à C de la plage pspl visible dans A6 de l'onglet r (génère une erreur si la plage pspl visible est vide)
Application.Intersect(pspl.SpecialCells(xlCellTypeVisible), c.Columns("A:C")).Copy r.Range("A6")
If Err <> 0 Then MsgBox "Aucune chien trouvé avec ces critères" 'si une erreur a été générée, message
pl.AutoFilter 'supprime le filtre automatique
r.Select 'sélectionne l'onglet r
test = False 'initialise la variable test
End Sub