Sub Imprimer()
Dim T As Range, rc&, i&, dat, coll As New Collection, P As Range, j&
Set T = [Tableau3] 'tableau structuré
rc = T.Rows.Count
Application.ScreenUpdating = False
For i = 1 To rc
If Not T.Rows(i).Hidden Then 'lignes visibles
dat = T(i, 2)
On Error Resume Next
coll.Add dat, CStr(dat)
If Err = 0 Then
Set P = T.Rows(i)
For j = i + 1 To rc
If Not T.Rows(j).Hidden Then If T(j, 2) = dat Then Set P = Union(P, T.Rows(j))
Next j
T.Parent.PageSetup.PrintArea = P.Address 'zone d'impression
'T.Parent.PrintOut ' pour imprimer
T.Parent.PrintPreview 'aperçu
End If
End If
Next i
T.Parent.PageSetup.PrintArea = ""
End Sub
Sub Fichier_PDF()
Dim t0, T As Range, rc&, i&, dat, coll As New Collection, P As Range, j&, n&
t0 = Timer
Set T = [Tableau3] 'tableau structuré
rc = T.Rows.Count
Application.ScreenUpdating = False
Workbooks.Add 'classeur vierge auxiliaire qui devient le fichier actif
For i = 1 To rc
If Not T.Rows(i).Hidden Then 'lignes visibles
dat = T(i, 2)
On Error Resume Next
coll.Add dat, CStr(dat)
If Err = 0 Then
Set P = T.Rows(i)
For j = i + 1 To rc
If Not T.Rows(j).Hidden Then If T(j, 2) = dat Then Set P = Union(P, T.Rows(j))
Next j
n = n + 1
With Sheets.Add(, Sheets(Sheets.Count), 1) 'ajoute une feuille
.Name = "Page" & n
T.Rows(0).Copy .Cells(1)
For j = 1 To .UsedRange.Columns.Count: .Columns(j).ColumnWidth = T(1, j).ColumnWidth: Next j 'largeurs des colonnes
P.Copy
.Cells(2, 1).PasteSpecial xlPasteValues 'collage spécial
.Cells(2, 1).PasteSpecial xlPasteFormats
.UsedRange.RowHeight = 30 'hauteur des lignes
With .PageSetup
.PrintTitleRows = "$1:$1"
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1 '1 page en largeur
.FitToPagesTall = 2 '2 pages en hauteur
End With
End With
End If
End If
Next i
Sheets("Page1").Select
For i = 2 To n: Sheets("Page" & i).Select False: Next i 'sélection multiple
ActiveSheet.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\Fichier PDF.pdf" 'création du PDF
ActiveWorkbook.Close False 'fermeture du classeur auxiliaire
MsgBox "Fichier PDF de " & n & " page" & IIf(n > 1, "s", "") & " créé en " & Format(Timer - t0, "0.00 \sec")
End Sub