Private Sub Worksheet_Change(ByVal Target As Range)
Dim U As Object 'déclare la variable U (onglet Untel)
Dim DLU As Integer 'déclare la variable DLU (Dernière Ligne de l'onglet Untel)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim R As Range 'déclare la variable R (Recherche)
Dim PLU As Range 'déclare la variable PLU (PLage de l'onglet Untel)
Set U = Sheets("untel") 'définit l'onglet U
DLU = U.Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée DLU de la colonne 2 (=B) de l'onglet U
DL = Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 2 (=B) de cet onglet
Set PL = Range("C4:C" & DL) 'définit la palge PL
'si le changement a lieu ailleurs que dans la plage PL, sort de la procédure
If Application.Intersect(Target, PL) Is Nothing Then Exit Sub
'définit la recherche R (Recherche le "nom" correspondant à la cellule modifiée dans la ligne 4 de l'onglet U)
Set R = U.Rows(4).Find(Target.Offset(0, -1).Value, , xlValues, xlWhole)
If Not R Is Nothing Then
Set PLU = U.Range(U.Cells(5, R.Column), U.Cells(DLU, R.Column))
Else
MsgBox "le " & Target.Offset(0, -1).Value & " n'existe pas !": Exit Sub 'message'sort de la procédure
End If
If Target.Value = "absent" Then 'consition 1 : si la cellule editée vaut "absent"
PLU.Value = "absent"
Else 'sinon
'ici le code pour si différent de "absent" que tu n'as pas précisé, je propose d'effacer ce qu'il y a marqué, tu recfifieras
PLU.ClearContents
End If 'fin de la condition 2
End Sub