[COLOR="Red"]Sub DecalerCellules()
Dim lig As Long, n1 As Byte, n2 As Byte, col As Byte
Dim cel As Range, plage As Range, ref As Range, coljour As Byte
Dim tablo, i As Byte
Application.ScreenUpdating = False
tablo = Array("TOTO1", "TOTO2") 'nombre de feuilles étudiées limité à 255, sinon => i As Integer
For i = 0 To UBound(tablo)
With Sheets(tablo(i))[/COLOR]
For lig = 10 To .Range("A65536").End(xlUp).Row 'ou : For lig = 10 To 24
For n1 = 1 To 7
For n2 = 1 To 3
col = 5 * n1 + n2 - 4
Set cel = .Cells(lig, col)
'---traitement des jours vides
If n2 = 1 Then
Set plage = cel.Resize(, 4) 'plage du jour
If Application.CountA(plage) = 0 Then
Set ref = .Range(cel, .Cells(lig, "AI")).Find("*", LookIn:=xlFormulas)
If ref Is Nothing Then GoTo 2 'passe à la ligne suivante
coljour = ref.Column - (ref.Column Mod 5) + 2 '1ère colonne du jour non vide trouvé
Set ref = .Cells(lig, coljour).Resize(, 4) 'plage du jour non vide trouvé
plage = ref.Value
ref = ""
End If
End If
'---traitement des cellules vides
If IsEmpty(cel) Then
Set ref = .Range(cel, .Cells(lig, 5 * n1)).Find("*", LookIn:=xlFormulas)
If ref Is Nothing Then GoTo 1 'passe au jour suivant
cel = ref
ref = ""
End If
Next n2
1 Next n1
2 Next lig
End With
[COLOR="red"]Next i
End Sub[/COLOR]