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 : 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
merci de votre contribution.

cordialement.