Voici un procédure qui devrait faire ce que tu souhaite, à placer dans le module de la feuille concernée (raccourci pour y accéder : clic droit sur l'onglet de la feuille, et Visualiser le code dans le menu contextuel).
Private Sub Worksheet_Change(ByVal Target As Range)
Dim h
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Me.Range("G6:G372")) Is Nothing Then
On Error GoTo erreur
Application.EnableEvents = False
If Target > 1 Then
Target.ClearContents
Else
If Target.Offset(, -2) <> "" Then
h = Target.Offset(, -2) + 1 / 24
If CSng(Target) < h Then Target = h
Else
Target.ClearContents
End If
End If
Application.EnableEvents = True
End If
Exit Sub
erreur:
Target.ClearContents
Application.EnableEvents = True
End Sub
Comme tu peux voir, c'est un peu moins simple qu'avec une formule (du moins pour s'assurer une maîtrise satisfaisante de l'opération.
La procédure ci-dessus prend en compte presque tous les cas de figure :
D'abord, elle est cadrée sur la plage en G que tu as indiquée, elle ne s'appliquera pas ailleurs.
Dans le cas prévu par ta demande, si tu tapes une heure en G, l'écart avec la valeur de E sur la même ligne est évalué, s'il est inférieur à une heure la valeur saisie sera modifiée de façon que l'écart corresponde à une heure, sinon elle est maintenue.
Maintenant, si tu saisis une valeur ne correspondant pas à une valeur horaire simple, nombre supérieur à 1 ou texte, la saisie sera effacée.
Si en colonne E, la cellule est vide, la saisie sera également effacée. De même si en E se trouve du texte.
Cela bloque donc presque toutes les saisies non conformes possibles. Presque, car cela ne bloquera pas la sasie si E contient une valeur numérique ne correspondant pas à une heure...
Rappel que l'heure est une valeur numérique de même type que la date, la partie entière représentant une date ou un nombre de jours, la partie décimale l'heure (fraction de jour).
Cordialement.