Sub Macro1()
Dim MaPlage As Range 'déclare la variable
Dim PL() As Range 'déclare la variable PL (PLages)
Dim NZ As Integer 'déclare la variable NZ (Nombre de Zones)
Dim NP As Range 'déclare la variable NP (Nouvelle Plage)
Set MaPlage = Sheets("Feuil1").UsedRange.SpecialCells(xlCellTypeVisible) 'définit la variable MaPlage
NZ = MaPlage.Areas.Count 'définit le nombre de zones NZ de la plage MaPlage
If MaPlage.Areas.Count = 1 Then 'condition : si une seule zone
'redéfinit la plage MaPlage sans la première ligne
Set MaPlage = MaPlage.Offset(1, 0).Resize(MaPlage.Rows.Count - 1, MaPlage.Columns.Count)
Else 'sinon
For I = 1 To NZ 'bouble sur toutes les zones
ReDim Preserve PL(1 To I) 'redimensionne le tableau des plage PL
Set PL(I) = MaPlage.Areas(I) 'définit la zone PL(I) de la boucle
Next I 'prochaine zone de la boucle
'redéfinit la première zone sans la première ligne
Set PL(1) = PL(1).Offset(1, 0).Resize(PL(1).Rows.Count - 1, PL(1).Columns.Count)
For I = 1 To NZ 'boucle sur toute les zones
'définit la nouvelle plage NP par union des zones
If NP Is Nothing Then Set NP = PL(I) Else Set NP = Application.Union(NP, PL(I))
Next I 'prichane zone de la boucle
Set MaPlage = NP 'redéfinit la plage MaPlage
End If 'fin de la condition
MaPlage.Select 'sélectionne la plage MaPlage
End Sub[\code]