Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
If Target.Address <> "$J$24" Then Exit Sub 'si le changement a lieu ailleurs qu'en J24, sort de la procédure
Range("I25:I31").ClearContents 'efface d'éventuelles anciennes données dans la plage I25:I31
If Target.Value = "" Then Exit Sub 'si J24 est effacée, sort de la procédure
COL = Range("J11:L11").Find(Target.Value, , xlValues, xlWhole).Column 'définit la colonne COL
For Each CEL In Range(Cells(12, COL), Cells(19, COL)) 'boucle sur les cellules des lignes 12 à 19 de la colonne COL
If CEL.Value = True Then 'condition : si la valeur de la cellule est "Vrai"
'définit la cellule de destination DEST (I25 si I25 est vide, sinon la première ligne vide de la colonne I)
Set DEST = IIf(Range("I25").Value = "", Range("I25"), Cells(Application.Rows.Count, 9).End(xlUp).Offset(1, 0))
'la cellule de destination DEST prend la valeur de la cellule dans la même ligne que CEL, colonne 9 (=I)
DEST.Value = Cells(CEL.Row, 9).Value
End If 'fin de la condition
Next CEL 'prochaine cellule de la boucle
End Sub