Private Sub Worksheet_Change(ByVal Target As Range)
Dim PL As Range 'déclare la variable PL (PLage)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim TXT As String 'déclare la variable TXT (TeXTe)
Set PL = Range("C1:" & Cells(1, Application.Columns.Count).Address(0, 0)).EntireColumn 'définit la palge PL
If Target.Row = 1 Then Exit Sub 'si le changement a lieu dans la ligne 1, sort de la procédure
If Application.Intersect(Target, PL) Is Nothing Then Exit Sub 'si le changement à lieu ailleurs que dans la palge PL, sort de la procédure
LI = Target.Row 'définit la ligne LI
For Each CEL In Application.Intersect(PL, Rows(LI)) 'bouce sur toutes les cellules de la ligne LI
'si la cellule vaut "x" ou "X", définit le texte TXT
If UCase(CEL.Value) = "X" Then TXT = IIf(TXT = "", Cells(1, CEL.Column), TXT & ", " & Cells(1, CEL.Column))
Next CEL 'prochaine cellule de la boucle
Cells(LI, 2).Value = TXT 'place le texte TXT dans la cellule en colonne B de la ligne LI
End Sub