Bonjour,
Une piste à améliorer !
A mettre dans le module de la feuille "Data" :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Dim Cel As Range
Dim Erreur As Boolean
Dim I As Integer
If Target.Count > 1 Then Exit Sub
If Target.Column <> 2 And Target.Column <> 4 And Target.Column <> 5 Then Exit Sub
Select Case Target.Column
Case 2, 5
If Not IsDate(Target.Value) Then Erreur = True
If Cells(Target.Row, 5).Value <= Cells(Target.Row, 2).Value Then Erreur = True
If Cells(Target.Row, 5).Value - Cells(Target.Row, 2).Value > 1 / 24 * 3 Then Erreur = True
Case 4
With Worksheets("Code"): Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With
Set Cel = Plage.Find(Target.Value, , xlValues, xlWhole)
If Cel Is Nothing Then Erreur = True
End Select
If Cells(Target.Row, 1).Value = "" And Cells(Target.Row, 2).Value = "" _
And Cells(Target.Row, 3).Value = "" And Cells(Target.Row, 4).Value = "" _
And Cells(Target.Row, 5).Value = "" Then Erreur = False
With Range(Cells(Target.Row, 1), Cells(Target.Row, 5))
If Erreur = True Then .Interior.ColorIndex = 3 Else .Interior.ColorIndex = 0
End With
End Sub