Impression d'un TCD avec code VBA
bonjour à tous,
Toujours sur mon petit programme.
je n'ai trouvé, ni sur le site ni ailleurs, la meilleure façon de lancer L'impression d'un TCD à partir d'un contrôle sur userform.
j'ai écrit le code ci-dessous qui donne satisfaction mais je ne suis pas certain que ce soit la meilleure façon de procéder.
Le TCD comprend un colonne année (filtre), une colonne facture et d'autres colonnes de produits divers composant une facture.
le nombre de colonnes produits peut donc varier d'une année sur l'autre.
D'où la formule 800/vcol qui résulte du constat suivant:
Pour maximiser l’occupation sur largeur feuille A4 - portrait, j'ai recherché sur une année comprenant 11 colonnes et une autre comprenant 17 colonnes le zoom idéal. j'en ai déduit la formule.
la variable vAnnee est la sélection sur listbox de l'année à imprimer.
la variable n_annee est déclarée hors du code ci-dessous.
Y a-t-il des instructions existantes permettant ce traitement de manière plus simple et élégante ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| Sheets("Synthèse").Select 'c'est la feuille contenant le TCD
'Masque la colonne "A" vide (Le TCD commence colonne "B")
'permet un meilleur centrage à l'impression
Columns("A:A").Select
Selection.EntireColumn.Hidden = True
'sélectionne la date souhaitée du filtre ( dates réintroduites plus bas avant de sortir)
' toutes les dates sont masquées avant sélection de la date à imprimer
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Années")
n_annee = 2012 'initialisation à la première année du TCD
Do While n_annee <= Year(Date)
.PivotItems(CStr(n_annee)).Visible = False
n_annee = n_annee + 1
Loop
.PivotItems(CStr(vAnnee)).Visible = True
End With
'détermine le nombre de colonne (variable suivant les années)
Range("b6").Select
ActiveCell.End(xlToRight).Select
vcol = ActiveCell.Column
'impression des 3 lignes d'entête du TCD
With ActiveSheet.PageSetup
.PrintTitleRows = "$4:$6"
.PrintTitleColumns = ""
.Zoom = Int(800 / vcol) ' formule pour prendre en compte le nombre de colonne
End With
FrmEncoder.Hide 'masque le formulaire
Application.PrintCommunication = True
Application.Dialogs(xlDialogPrintPreview).Show ' appercu avant impression
Application.ScreenUpdating = False
reponse = MsgBox("Voulez-vous imprimer l'aperçu ?", vbYesNo + vbQuestion, "impression")
If reponse = vbYes Then
ActiveSheet.PrintOut
End If
'resélectionne toutes les années avant la sortie (indispensable pour le test plus haut)
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Années")
n_annee = 2012
Do While n_annee <= Year(Date)
If .PivotItems(CStr(n_annee)).Visible = False Then
.PivotItems(CStr(n_annee)).Visible = True
End If
n_annee = n_annee + 1
Loop
.PivotItems(CStr(vAnnee)).Visible = True
End With
'affiche la colonne "A" pour un meilleur centrage à l'écran (lecture)
Columns("A:A").Select
Selection.EntireColumn.Hidden = False |
merci de votre contribution.
cordialement.