Sub Imprimer()
Dim plage As Range, r As Range, masque As Range, masque1 As Range
Set plage = Intersect([4:65536], ActiveSheet.UsedRange)
If plage Is Nothing Then Exit Sub
Set masque = [A:D]
For Each r In plage.Columns
If Application.Count(r) + Application.CountIf(r, "?*") = 0 _
Then Set masque = Union(masque, r)
Next
For Each r In Intersect([I:I], plage)
If r = "" Then _
Set masque1 = Union(IIf(masque1 Is Nothing, r, masque1), r)
Next
masque.EntireColumn.Hidden = True
If Not masque1 Is Nothing Then masque1.EntireRow.Hidden = True
ActiveSheet.PrintPreview 'pour tester
'ActiveSheet.PrintOut 'neutralisé pour tester
Columns.Hidden = False
Rows.Hidden = False
End Sub