Bonjour à toutes et à tous,
je bute sur un problème de destination d'impression : ça marche quand j'imprime sur papier ou dans un fichier .pdf, mais pas quand je veux afficher le résultat à l'écran …
En pièce jointe un fichier avec des données fictives. Le nombre de feuilles est ici volontairement limité, la réalité est tout autre mais pour des questions d'upload et didactiques, pas besoin de davantage pour comprendre.
Il est clair que le nombre de feuilles est variable ainsi que leur nom respectif, c'est pourquoi je passe par un array et non pas par une sélection des feuilles existantes dans le présent fichier, appelé à changer en permanence.
Mon problème
Quand je veux faire un aperçu des feuilles concernées (PrintPreview), seule la première s'affiche … alors qu'il y en a bien d'autres
Quelqu'un a-t-il une idée de la raison pour laquelle le case 2 ne fonctionne pas ?
D'avance, merci
je bute sur un problème de destination d'impression : ça marche quand j'imprime sur papier ou dans un fichier .pdf, mais pas quand je veux afficher le résultat à l'écran …
En pièce jointe un fichier avec des données fictives. Le nombre de feuilles est ici volontairement limité, la réalité est tout autre mais pour des questions d'upload et didactiques, pas besoin de davantage pour comprendre.
Il est clair que le nombre de feuilles est variable ainsi que leur nom respectif, c'est pourquoi je passe par un array et non pas par une sélection des feuilles existantes dans le présent fichier, appelé à changer en permanence.
Mon problème
Quand je veux faire un aperçu des feuilles concernées (PrintPreview), seule la première s'affiche … alors qu'il y en a bien d'autres
Quelqu'un a-t-il une idée de la raison pour laquelle le case 2 ne fonctionne pas ?
D'avance, merci
Code:
Option Explicit
Sub Mode_impression()
Application.ScreenUpdating = False
Dim Destination_impression As Variant
Dim sh As Long ' Nombre de feuilles
Dim arrTabs
Dim compteur As Integer
Dim n As Integer
n = Sheets.Count - 1
ReDim arrTabs(n)
Destination_impression = Empty
' L'utilisateur est questionné sur la destination
Do Until Destination_impression = 1 Or Destination_impression = 2 Or Destination_impression = 3
Destination_impression = Application.InputBox("Quel type d'impression voulez-vous ?" _
+ vbCrLf + vbCrLf + "1 = Papier, 2 = Ecran, 3 = Créer un fichier pdf", _
"Faites votre choix", "3", Type:=1)
Loop
For sh = 1 To Sheets.Count ' On balaie les feuilles du fichier
Sheets(sh).Activate
' on restreint aux feuilles visibles avec TCD
If ActiveSheet.PivotTables.Count > 0 And ActiveSheet.Visible = True Then
With ActiveSheet.PageSetup ' on définit la zone d'impression
.PrintArea = ActiveSheet.PivotTables("Tableau croisé dynamique1").TableRange2.Address
End With
' Le nom de la feuille active est copié dans l'array
arrTabs(compteur) = Sheets(sh).Name
compteur = compteur + 1 ' on incrémente
Else
n = n - 1
ReDim Preserve arrTabs(n)
End If
Next ' on passe à la feuille suivante
If arrTabs(0) <> "" Then
' --- Traitement des options d'impression
Select Case Destination_impression
Case 1 ' impression papier
ThisWorkbook.Worksheets(arrTabs).PrintOut
Case 2 ' impression écran
ThisWorkbook.Worksheets(arrTabs).PrintPreview
Case 3 ' impression dans un fichier .pdf
Application.ScreenUpdating = False
ThisWorkbook.Worksheets(arrTabs).Copy
With ActiveWorkbook
.ExportAsFixedFormat _
Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\FichierTexte.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
.Close False
End With
Application.ScreenUpdating = True
End Select
End If
On Error GoTo 0
End Sub