Sub verif()
Dim sh15 As Worksheet, sh3 As Worksheet
Dim TabD, TabP, i As Long, j As Long, N As Long, T0 As Single
Dim Dico As New Scripting.Dictionary
T0 = Timer
Application.ScreenUpdating = False
Set sh3 = Workbooks("d.xlsm").Sheets("feuil1")
Set sh15 = Workbooks("p.xlsm").Sheets("feuil1")
'lecture des valeurs des deux tableaux
TabD = sh3.Range("D1:G" & sh3.Range("D" & Rows.Count).End(xlUp).Row)
TabP = sh15.Range("A1:U" & sh15.Range("A" & Rows.Count).End(xlUp).Row)
'Construction du DICO de référence (valeurs du fichier p.xlsm)
'5 triplets par ligne du fichier p.xlsm
N = UBound(TabP)
For i = 2 To N
For j = 5 To 21 Step 4
Dico(TabP(i, 1) & "]" & TabP(i, 3) & "]" & TabP(i, j)) = ""
Next j
Next i
'Boucle de coloriage
N = UBound(TabD)
For i = 2 To UBound(TabD)
If Dico.Exists(TabD(i, 1) & "]" & TabD(i, 2) & "]" & TabD(i, 4)) Then
sh3.Range("D" & i & ":G" & i).Interior.Color = xlNone
Else
sh3.Range("D" & i & ":G" & i).Interior.Color = RGB(255, 128, 128)
End If
Next i
Application.ScreenUpdating = True
Application.Goto sh15.Range("a1"), True
MsgBox Format(Timer - T0, "0.000 s")
End Sub