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 ?
merci de votre contribution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
cordialement.
Partager