Bonjour,
Plusieurs optimisations sont possibles, comme l'a soulevé Bizzarre le select est a éviter.
De meme la lecture répétée des valeurs dans Excel, les types non déclarés, les .Value au lieu de .Value2 etc. Il y a beaucoup de possibilités.
Cependant un fichier d'exemple serait apprécié, notamment pour tester les solutions.
Ci-après une proposition, mais probablement a ajuster faute de test
Sub a()
Application.ScreenUpdating = False
Dim F1 As Worksheet
Set F1 = Worksheets("Planning")
Dim plage As Range
Set plage = F1.Range("H17:CQ71")
Dim plageValues As Variant
plageValues = plage.Value2
Dim plageCheck As Range
With F1
plageCheck = .Range(.Cells(3, 2), .Cells(50, 2))
End With
Dim plageCheckVals As Variant
plageCheckVals = plageCheck.Value2
Dim rowI As Long, colI As Long, checkI As Long
For rowI = LBound(plageValues, 1) To UBound(plageValues, 1)
For colI = LBound(plageValues, 2) To UBound(plageValues, 2)
For checkI = 3 To 50
If plageValues(rowI, colI) = plageCheckVals(checkI) Then
With plage(rowI, colI)
.Interior.color = plageCheck(checkI, 1).Interior.color
.Font.color = plageCheck(checkI, 1).Font.color
End With
End If
Next checkI
Next colI
Next rowI
' For z = 3 To 50
' For Each cell In plage
' cell.Select
' If cell.Value2 = F1.Cells(z, 2).Value2 Then
' cell.Interior.color = F1.Cells(z, 2).Interior.color
' End If
' If cell.Value2 = Cells(z, 2).Value2 Then
' cell.Font.color = F1.Cells(z, 2).Font.color
' End If
' Next cell
' Next z
Application.ScreenUpdating = True
End Sub