Je ne comprends pas bien le format du tableau, mais je tente de répondre à la question
(Pourquoi séparer les lignes horaires du "tableau " une ligne sur 2?)
Voici le code modifié que je propose :
(Les modifications sont encadrées par des lignes de commentaires avec des signes =)
Cordialement
Sub caseminutes()
Dim j As Long, k As Long
Dim ShDef As Worksheet, ShProc As Worksheet
Dim DerlDef As Long, PremlDef As Long, DerlProc As Long
Dim Dat As Date
'Dim Num As String
'========================
Dim Machine As String
'========================
Set ShProc = Sheets("hd")
Set ShDef = Sheets("Tableau")
'========================
'Le nom de machine est écrit dans la cellule D1
' ce sont les 3 derniers caractères du contenu de la cellule
Machine = LCase(Right(ShDef.Cells(1, 4), 3))
'========================
'========================
'La première ligne a prendre en compte n'est-elle pas invariablement la ligne 2
'et non pas definie comme tel : PremlDef = ShDef.Cells(Rows.Count, 4).End(xlUp).Row + 1
PremlDef = 2
DerlDef = ShDef.Cells(Rows.Count, 1).End(xlUp).Row
'========================
'========================
'Effacement du résultat précédent, sinon les cellules marquées d'un 1
's'additionnent au fur et à mesure de l'exécution de la macro
For j = PremlDef To DerlDef
ShDef.Cells(j, 4) = ""
Next
'========================
'========================
DerlProc = ShProc.Cells(Rows.Count, 1).End(xlUp).Row
'========================
For j = PremlDef To DerlDef
If ShDef.Cells(j, 1) <> "" Then
Dat = ShDef.Cells(j, 3)
'========================
' For k = 2 To ShProc.Cells(Rows.Count, 1).End(xlUp).Row
For k = 2 To DerlProc
'========================
'========================
'Dans la page hd le numéro de machine est en colonne 6
If LCase(ShProc.Cells(k, 6)) = Machine Then
'========================
If Dat > ShProc.Cells(k, 1) And Dat < ShProc.Cells(k, 2) Then
ShDef.Cells(j, 4) = ShProc.Cells(k, 10)
End If
'========================
Exit For
'========================
'========================
End If
'========================
Next
End If
Next
Set ShDef = Nothing
Set ShProc = Nothing
End Sub