Bonjour,
Il y a plusieurs problèmes :
- Dans le cas où il y a plusieurs chargements pour une même immatriculation dans la même journée, la première ligne à respecter un temps de pesée inférieur à un temps de chargement + 3h est le premier chargement de la journée. Il faut donc ajouter une condition pour vérifier que l'horaire de pesée est SUPÉRIEUR à l'horaire de chargement ET INFÉRIEUR à l'horaire de chargement + 3h
- Le critère des 3h couvre parfois plusieurs chargements, je l'ai réduit à 2h (à voir si ça fonctionne toujours)
- Certaines lignes de la feuille 2 ne remplissent pas les critères car les heures contiennent aussi la date (lignes 7 à 9 de mémoire)
- J'ai réécrit le code pour gagner en clarté :
- -> C'est bien d'utiliser des instructions "With Sheets("Truc")...End With", encore faut-il en faire usage par la suite...
- -> Suppression des variables inutilisées (immatriculation, identification, LigMax)
- -> Regroupement des instructions pour éviter la redondance des "With...End With"
Voilà ce que je te propose :
Sub Programme()
Dim LigMax1 As Long, LigMax2 As Long
Dim WS2 As Worksheet
Set WS2 = Worksheets("Feuil2")
With Sheets("Feuil1")
LigMax1 = .Range("A" & Rows.Count).End(xlUp).Row
LigMax2 = WS2.Range("C" & Rows.Count).End(xlUp).Row
For i = 3 To LigMax1
For j = 3 To LigMax2
'Si même immatriculation, même date, et horaire pesée dans les 2 heures
If WS2.Cells(j, 2) = .Cells(i, 3) And WS2.Cells(j, 3) = .Cells(i, 1) And WS2.Cells(j, 4) > .Cells(i, 2) And WS2.Cells(j, 4) < .Cells(i, 2) + 2 / 24 Then
.Cells(i, 5) = WS2.Cells(j, 1) 'Copie Num Tag sur le suivi
.Cells(i, 7) = WS2.Cells(j, 6) 'Copie Poids Brut sur le suivi
.Cells(i, 8) = WS2.Cells(j, 5) 'Copie Tare sur suivi
.Cells(i, 6) = WS2.Cells(j, 4) 'Copie Heure de passage sur la bascule sur suivi
Exit For 'Abrège la boucle
ElseIf j = LigMax2 Then MsgBox "Aucune correspondance pour la ligne " & i
End If
Next j
Next i
End With
End Sub