Re,
Essaie comme ça :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PL As Range 'déclare la variable PL (PLage)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim NC As Integer 'déclare la variable NC (Nombre de Colonnes)
Dim PAS As Range 'déclare la variable PAS (Plage À Supprimer)
Dim I As Integer 'déclare la variable I (Incrément)
Set O = Worksheets("Feuil3") 'définit l'onglet O
Set PAS = O.Range("A1") 'initialise la plage à supprimer PAS
Set PL = O.Range("B4").CurrentRegion 'définit la plage PL
Set PL = PL.Offset(2, 10).Resize(PL.Rows.Count - 2, PL.Columns.Count - 10) 'redéfinit la plage PL (sans les en-têtes)
NL = PL.Rows.Count 'définit le nombre de lignes NL de la plage PL
NC = PL.Columns.Count 'définit le nombre de colonnes NC de la plage PL
For I = 1 To NL 'boucle sur toutes les lignes I de PL
'si la ligne contient NC cellules vides, redéfinit la plage à supprimer PAS
If Application.WorksheetFunction.CountBlank(PL.Rows(I)) = NC Then Set PAS = IIf(PAS.Cells.Count = 1, O.Rows(I + 5), Application.Union(PAS, O.Rows(I + 5)))
Next I 'prochaine ligne de la boucle
PAS.Delete 'supprime la plage PAS
NL = PL.Rows.Count 'redéfinit le nombre de lignes NL de la plage PL
Set PAS = O.Range("A1") 'réinitialise la plage PAS
For I = 1 To NC 'boucle sur toutes les colonnes I de PL
'si la colonne contient NL cellules vides, redéfinit la plage à supprimer PAS
If Application.WorksheetFunction.CountBlank(PL.Columns(I)) = NL Then Set PAS = IIf(PAS.Cells.Count = 1, O.Columns(I + 11), Application.Union(PAS, O.Columns(I + 11)))
Next I 'prochaine ligne de la boucle
PAS.Delete 'supprime la plage PAS
End Sub