Calcul des heures avec pause déjeuner de 45 min au minimum

Bonjour,

J'essaye de faire en sorte que si on modifie la plage de fin de matinée ou de début d'après midi, l'heure de début d'après-midi soit automatiquement modifiée si la différence des deux est inférieurs à 45 min, mais j'ai des problèmes de range. (La méthode 'Range' de l'objet '_Worksheet' a échoué)

J'ai créé des plages nommées, AMFin pour la colonne de la fin de matinée, et PMDebut pour le début de l'après midi.

Je suis obligé d'appeler les range MyRange ? Le problème vient du fait que je crée deux Range ?

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False
Dim AMFin As Range
Set AMFin = Range("Suivi horaires CDD.xlsm!AMFin")
Dim PMDebut As Range
Set PMDebut = Range("Suivi horaires CDD.xlsm!PMDebut")

If Not Intersect(Target, AMFin, PMDebut) Is Nothing Then
    If PMDebut - AMFin < 0.75 Then
        PMDebut = AMFin + 0.75
    End If
End If

Application.ScreenUpdating = True
End Sub

Je ne comprends pas très bien ce qu'il faut que je modifie.

Merci de votre aide :)

Julien

Bonjour,

Un test

Merci de votre réponse, Il n'y a effectivement plus d'erreur, mais du coup, je me rends compte que mon code ne fonctionne pas.

J'ai essayé de modifier la valeur des 3/4 d'h par rapport à une journée (0.03125 au lieu de 0.75), mais pas de changements.

J'imagine que c'est ma fonction qui écrit la bonne heure qui est incorrecte, vue que je fais mon calcul sur des Range au final, ça me semble mauvais.

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False
Dim AMFin As Range
Set AMFin = Range("AMFin")
Dim PMDebut As Range
Set PMDebut = Range("PMDebut")

If Not Intersect(Target, AMFin, PMDebut) Is Nothing Then
    If PMDebut - AMFin < 0.03125 Then
        PMDebut.Value = AMFin + 0.03125
    End If
End If

Application.ScreenUpdating = True
End Sub

Re,

Teste comme ceci

Ah oui c'est parfait avec Offset, je ne connaissais pas cette fonction, j'ai juste modifié un brin le code pour que ça colle exactement à ce que je voulais.

Merci beaucoup de ton aide précieuse :)

Si certains sont intéressés, vous trouverez le code et le fichier ci-dessous :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
  If Not Application.Intersect(Target, Range("F5:F90")) Is Nothing Then
    If Target.Offset(0, -2).Value = "" Then Exit Sub
    If Target.Value - Target.Offset(0, -2).Value < 0.03125 Then
      Target.Value = Target.Offset(0, -2).Value + 0.03125
    End If
  End If
    If Not Application.Intersect(Target, Range("D5:D90")) Is Nothing Then
    If Target.Offset(0, 2).Value = "" Then Exit Sub
    If Target.Offset(0, 2).Value - Target.Value < 0.03125 Then
      Target.Offset(0, 2) = Target.Value + 0.03125
    End If
  End If
Application.ScreenUpdating = True
End Sub
Rechercher des sujets similaires à "calcul heures pause dejeuner min minimum"