XL 2013 Erreur VBA 1004 Impression zone d'impression tableau

Helios77

XLDnaute Nouveau
Bonjour
Je souhaite automatiser l'impression d'un tableau de taille variable. Si j'ai déjà réussi à le mettre en page automatiquement en revanche je rencontre un souci pour définir la zone d'impression. J'ai utilisé l'enregistreur de macros qui m'a donné ce code :
Sub Macro1()
ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1
Range("Tableau1[[#Headers],[N°]]").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
ActiveSheet.PageSetup.PrintArea = "Tableau1[[#Tout];[N°]:[Fin]]"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1
ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=2
End Sub

Mais lors de son exécution j'ai un plantage sur la commande de définition de la zone d'impression , cette ligne => ActiveSheet.PageSetup.PrintArea = "Tableau1[[#Tout];[N°]:[Fin]]"
Erreur 1004.
J'avoue ne pas en comprendre la signification ni la raison.
Merci de votre aide.
Helios
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Un petit fichier test serait le bienvenu, cela aiderait. ;)

Mettez le code entre balise </> ( à droite de l'icone GIF ) c'est plus lisible.

Un PJ j'ai créé un tableau et je veux imprimer que les colonnes de Debut à Fin. Avec ce code :
VB:
Sub DefZoneImpression()
    ActiveWorkbook.Names.Add Name:="Zone", RefersToR1C1:="=Tableau1[[#All],[Debut]:[Fin]]"
    Application.Goto Reference:="Zone"
    ActiveSheet.PageSetup.PrintArea = "Zone"    ' Défini la zone d'impression
    [A1].Select
    ActiveWindow.SelectedSheets.PrintPreview    ' Aperçu pour impression, juste pour le test
End Sub
L'aperçu avant impression est juste là pour la démonstration.
 

Pièces jointes

  • Classeur1.xlsm
    16.9 KB · Affichages: 1

Helios77

XLDnaute Nouveau
Bonjour,
Un petit fichier test serait le bienvenu, cela aiderait. ;)

Mettez le code entre balise </> ( à droite de l'icone GIF ) c'est plus lisible.

Un PJ j'ai créé un tableau et je veux imprimer que les colonnes de Debut à Fin. Avec ce code :
VB:
Sub DefZoneImpression()
    ActiveWorkbook.Names.Add Name:="Zone", RefersToR1C1:="=Tableau1[[#All],[Debut]:[Fin]]"
    Application.Goto Reference:="Zone"
    ActiveSheet.PageSetup.PrintArea = "Zone"    ' Défini la zone d'impression
    [A1].Select
    ActiveWindow.SelectedSheets.PrintPreview    ' Aperçu pour impression, juste pour le test
End Sub
L'aperçu avant impression est juste là pour la démonstration.
Bonjour,
Ci-joint la trame de mon fichier et le PDF que je souhaite en extraire.
J'ai tenté d'ajouter ton code mais il n'en veut pas.
Le but... regrouper certaines colonnes (mode plan) puis sortir un document PDF tel que ci-joint.
Merci encore de ton aide.
Helios
 

Pièces jointes

  • Formations.pdf
    410.9 KB · Affichages: 4
  • Formations.xlsm
    41.8 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Exact, sorry. :)
En PJ un essai en changeant la méthode et en créant une feuille temporaire. C'est à mon avis plus simple et plus souple, avec :
VB:
Sub CreerPDF()
    Application.ScreenUpdating = False
    Sheets.Add.Name = "Temp"                    ' Création d'une feuille Temp
    With Sheets("Base de Données")              ' Copy du tableau Base de données dans Temp
        DL = .[C10000].End(xlUp).Row
        .Range("C10:T" & DL).Copy
    End With
    Sheets("Temp").[A1]
    ActiveSheet.Paste
    Columns("D:G").Delete Shift:=xlToLeft       ' Suppression des colonnes inutiles
    Columns("F:G").Delete Shift:=xlToLeft
    Columns("H:I").Delete Shift:=xlToLeft
    Columns.AutoFit                             ' Ajustement largeur de colonnes
    Columns("B:B").ColumnWidth = 25
    Columns("C:C").ColumnWidth = 25
    Columns("I:I").ColumnWidth = 15.57
    With ActiveSheet.PageSetup                  ' Mode Paysage
        .Orientation = xlLandscape
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    Application.DisplayAlerts = False
    fName = CurDir & "\" & "Formations.pdf"     ' Enregistrement de la feuille en pdf
    Sheets("Temp").ExportAsFixedFormat Type:=xlTypePDF, Filename:=fName, Quality:=xlQualityStandard _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    Sheets("Temp").Delete                       ' Suppression de la feuille Temp
    Application.DisplayAlerts = True
    MsgBox "Fichier pdf créé : " & fName
End Sub
 

Pièces jointes

  • Formations.xlsm
    42.8 KB · Affichages: 1

Helios77

XLDnaute Nouveau
Re,
Exact, sorry. :)
En PJ un essai en changeant la méthode et en créant une feuille temporaire. C'est à mon avis plus simple et plus souple, avec :
VB:
Sub CreerPDF()
    Application.ScreenUpdating = False
    Sheets.Add.Name = "Temp"                    ' Création d'une feuille Temp
    With Sheets("Base de Données")              ' Copy du tableau Base de données dans Temp
        DL = .[C10000].End(xlUp).Row
        .Range("C10:T" & DL).Copy
    End With
    Sheets("Temp").[A1]
    ActiveSheet.Paste
    Columns("D:G").Delete Shift:=xlToLeft       ' Suppression des colonnes inutiles
    Columns("F:G").Delete Shift:=xlToLeft
    Columns("H:I").Delete Shift:=xlToLeft
    Columns.AutoFit                             ' Ajustement largeur de colonnes
    Columns("B:B").ColumnWidth = 25
    Columns("C:C").ColumnWidth = 25
    Columns("I:I").ColumnWidth = 15.57
    With ActiveSheet.PageSetup                  ' Mode Paysage
        .Orientation = xlLandscape
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    Application.DisplayAlerts = False
    fName = CurDir & "\" & "Formations.pdf"     ' Enregistrement de la feuille en pdf
    Sheets("Temp").ExportAsFixedFormat Type:=xlTypePDF, Filename:=fName, Quality:=xlQualityStandard _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    Sheets("Temp").Delete                       ' Suppression de la feuille Temp
    Application.DisplayAlerts = True
    MsgBox "Fichier pdf créé : " & fName
End Sub
Merci pour cette proposition qui fonctionne en effet. Mon souci est que je l'exclue pas que les groupes de colonnes changent dans le temps, raison pour laquelle je préfèrerais un traitement sur la même feuille. MAis ce que tu me proposes m'apporte d'autres réponses (création automatique) du fichier PDF qui vont m'aider pour la suite.

Helios
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Mon souci est que je l'exclue pas que les groupes
Il vous suffit de travailler sur la feuille Temp.
Peut être cela sera plus facile puisque vous pouvez supprimer tot ce que vous voulez puisque cette feuille sera supprimée à la fin.

Cependant une autre approche, il suffit de masquer ce qu'on ne veut pas voir dans le pdf, avec :
Code:
Sub CreerPDF()
    ColonnesMasquées = "F:I,L:M,P:Q,U:AC"                   ' Chaine à modifier pour masquage
    Application.ScreenUpdating = False
    Rows("1:9").EntireRow.Hidden = True                     ' Masquege lignes 1..9
    Range(ColonnesMasquées).EntireColumn.Hidden = True      ' Masquege colonnes
    With ActiveSheet.PageSetup                              ' Mode Paysage
        .Orientation = xlLandscape
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    Application.DisplayAlerts = False
    fName = CurDir & "\" & "Formations.pdf"                 ' Enregistrement de la feuille en pdf
    Sheets("Base de Données").ExportAsFixedFormat Type:=xlTypePDF, Filename:=fName, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    Application.DisplayAlerts = True
    Rows("1:9").EntireRow.Hidden = False                     ' Démasquege lignes 1..9
    Range(ColonnesMasquées).EntireColumn.Hidden = False    ' Démasquege colonnes
    MsgBox "Fichier pdf créé : " & fName
End Sub
Il suffit de changer la chaine ColonnesMasquées pour modifier l'affichage dans le pdf.
 

Pièces jointes

  • Formations V2.xlsm
    40.6 KB · Affichages: 0

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Et si ce système vous plait, on peut le rendre plus pratique en générant N fichiers à la suite, avec par exemple :
VB:
Sub GenereDocuments()
    CreerPDF "Formations_Doc1.pdf", "F:I,L:M,P:Q,U:AC"
    CreerPDF "Formations_Doc2.pdf", "F:H,L:AC"
    CreerPDF "Formations_Doc3.pdf", "C:D,F:H,L:AC"
    MsgBox "Fichier pdf générés."
End Sub
Chaque ligne généré son propre document avec ces propres colonnes masquées.
 

Pièces jointes

  • Formations V3.xlsm
    43.2 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonsoir à tous,

Une solution un peu plus simple :
VB:
Sub PDF()
With [Tableau1].ListObject.Range
    Union(.Columns(4).Resize(, 4), .Columns(10).Resize(, 2), .Columns(14).Resize(, 2), .Columns(19).Resize(, 9)).EntireColumn.Hidden = True
    .Parent.PageSetup.PrintArea = .Address
    .Parent.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\Formations.pdf"
    .EntireColumn.Hidden = False
End With
MsgBox "Le fichier PDF a été créé"
End Sub
A+
 

Pièces jointes

  • Formations.xlsm
    42.5 KB · Affichages: 3

Helios77

XLDnaute Nouveau
Bonsoir à tous,

Une solution un peu plus simple :
VB:
Sub PDF()
With [Tableau1].ListObject.Range
    Union(.Columns(4).Resize(, 4), .Columns(10).Resize(, 2), .Columns(14).Resize(, 2), .Columns(19).Resize(, 9)).EntireColumn.Hidden = True
    .Parent.PageSetup.PrintArea = .Address
    .Parent.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\Formations.pdf"
    .EntireColumn.Hidden = False
End With
MsgBox "Le fichier PDF a été créé"
End Sub
A+
Hello Job.. C'est exactement ce que je voulais. Et la dernière proposition de Sylmanu est toute aussi intéressante... Merci !!
La solution d'une feuilles temporaire ne me convient pas car, la suppression de colonnes avant l'impression génère des erreurs par l'absence de cellules de calcul.
À moi désormais de mettre en oeuvre vos travaux.
Mercii encore
Helios
 

Helios77

XLDnaute Nouveau
Re bonjour Job,
Je dois être un peu C... mais j'aimerais pouvoir changer les colonnes à afficher dans le fichier PDF... J'ai essayé de comprendre ton code et en particulier .... columns(4).Resize(, 4), .Columns(10).Resize(, 2)... mais je ne comprends pas la corrélation entre le fichier excel et le fichier PDF. Peux tu m'expliquer comment faire pour adapter stp.
Merci
 

Discussions similaires

Statistiques des forums

Discussions
314 485
Messages
2 110 101
Membres
110 663
dernier inscrit
ToussaintBug