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