Imprimer toutes les feuilles visibles en PDF
Bonjour,
Tout est dans le titre.
Difficile de joindre le fichier excel car pas mal de choses confidentielles, j'en suis désolé.
Je souhaite donc exporter en pdf toutes les feuilles visibles (qui ne sont pas cachées).
Voici mon code actuel, qui bien sûr, n'exporte que la page "Intro"... Le but étant l'impression du classeur entier, avec les feuilles qui suivent... le nombre de feuilles varient en fonction des projets.
La feuille "Sommaire" est cachée le temps de l'export.
Sub exportpdf()
Sheets("SOMMAIRE").Visible = False
ChemindAcces = ThisWorkbook.Path
With Worksheets("Intro")
NomClient = "FI_" & .Range("K38") & ".pdf"
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NomClient
End With
Sheets("SOMMAIRE").Visible = True
Sheets("SOMMAIRE").Select
End Sub
J'imagine que tout se passe dans le "With Worksheets("Intro")"...
Je suis débutant en VBA, je pense que c'est pas grand chose mais si quelqu'un a la solution ça me branche carrément !
Merci !
Bonjour Tuttle,
Voici un exemple de ce que tu peux faire
Sub ExportPDF()
Dim Sht As Worksheet
Sheets("SOMMAIRE").Visible = False
ChemindAcces = ThisWorkbook.Path
'With Worksheets("Intro")
For Each Sht In ThisWorkbook.Sheets
If Sht.Visible = xlSheetVisible Then
NomClient = "FI_" & Sht.Range("K38") & ".pdf"
Sht.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NomClient & "_" & Sht.Name
End If
Next Sht
'End With
Sheets("SOMMAIRE").Visible = True
Sheets("SOMMAIRE").Select
End Sub
A+
Hey !
Merci pour ton aide.
Du coup, beh en fait ça n'a pas fonctionné (impression de toutes les feuilles et mise en page pas toujours au top contrairement à l'export "classique" d'excel.
En remettant mon code ou le tiens successivement, je ne trouve même plus le fichier généré depuis ce matin. Je regarde dans le dossier où se trouve mon fichier (comme avant de poster ce message), mais rien.
Another idea ?
Je viens d'éditer une version vidée de tout contenu.
La voici en PJ donc.
Merci !
Bonjour,
Un début de réponse à adapter.
Cdlt.
Sub ExportPDF()
Dim ws As Worksheet
Dim sPath As String, sFile As String
With ActiveWorkbook
.Sheets("SOMMAIRE").Visible = False
sPath = .Path & Application.PathSeparator
For Each ws In .Sheets
If ws.Visible = xlSheetVisible Then
sFile = sPath & ws.Cells(38, "K") & ".pdf"
ws.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sFile
End If
Next ws
With .Sheets("SOMMAIRE")
.Visible = True
.Activate
End With
End With
End Sub
C'est pas la première fois que j'ai cette erreur...
Bonne question... j'ai bêtement copié collé le code...
Dans mon code d'origine, il y a avait
With Worksheets("Intro")
Bon, je débute en VBA mais il n'y a pas de commande pour dire :
With Worksheets(toutes les feuilles).Visible
Question de gros débutant désolé pour ça
BrunoM45
Je viens de re-tester ta macro, tous les pdf s'impriment, mais page par page... alors que je souhaite le tout dans un seul pdf.
Bonjour Tuttle
Voici le code modifié et qui fonctionne en tout cas chez moi
Sub ExportPDF()
Dim CheminAcces As String
Dim Sht As Worksheet, sTab As String
Sheets("SOMMAIRE").Visible = False
CheminAcces = ThisWorkbook.Path & Application.PathSeparator
' Pour chaque feuille du classeur
For Each Sht In ThisWorkbook.Sheets
If Sht.Visible = xlSheetVisible Then
' Récupérer le nom du client dans la feuille Intro
If Sht.Name = "Intro" Then
NomClient = "FI_" & Sht.Range("K38") & ".pdf"
End If
' Sélectionner les feuilles à exporter
Sht.Select False
End If
Next Sht
' Export au format PDF
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CheminAcces & NomClient
' Revenir au sommaire
Sheets("SOMMAIRE").Visible = True
Sheets("SOMMAIRE").Select
End Sub
A+
Ca ne marche pas chez moi
J'ai modifié
Filename:=CheminAcces
en
Filename:=CheminAccess
et ça m'exporte bien un pdf.
Je peux dire avec grande fierté que c'est mon premier debuggage ????
Mais je n'ai que le pied de page d'imprimé sur toutes les feuilles. Sinon rien du tout...
J'ai empreinté le livre de Dominique Maniez qui s'appelle VBA Office 2010 qui m'a l'air pas mal pour apprendre. Je suis sur 2016 mais j'imagine que ça change pas grand chose.
Bonne journée !
Re,
Tuttle a écrit :Ca ne marche pas chez moi
J'ai modifié
Filename:=CheminAcces
en
Filename:=CheminAccess
et ça m'exporte bien un pdf.
Le problème est que si tu ne prends pas le code comme il t'est proposé, tu auras toujours des soucis
Tuttle a écrit :Je peux dire avec grande fierté que c'est mon premier debuggage ????
Bravo à toi
Tuttle a écrit :Mais je n'ai que le pied de page d'imprimé sur toutes les feuilles. Sinon rien du tout...
Le code ne fait pas la mise ne page de ta feuille, à regarder
Tuttle a écrit :J'ai empreinté le livre de Dominique Maniez qui s'appelle VBA Office 2010 qui m'a l'air pas mal pour apprendre. Je suis sur 2016 mais j'imagine que ça change pas grand chose.
Heuuuu comment dire
A+
Le problème est que si tu ne prends pas le code comme il t'est proposé, tu auras toujours des soucis
Ah non non non... j'ai fait un copié collé
Du coup, je vois pas comment ça a pu marcher chez toi si tu as fait un copié collé aussi
P.S. Toute la mise en page a déjà été faite... lorsque j'exporte de manière classique en pdf, ça fonctionne très bien (je suis juste obligé de cacher l'onglet sommaire à chaque export...)
Je vais essayer de renvoyer un fichier avec ton code, et deux ou trois onglets pour exemple.
Re,
Tuttle a écrit :Ah non non non... j'ai fait un copié collé
Regarde le code que tu as posté (sans rééditer le post hein !!!) Du coup, je vois pas comment ça a pu marcher chez toi si tu as fait un copié collé aussi
Et bien écoute je ne comprends pas que tu aies dû modifier
La variable qui contient le chemin d'accès est bien : CheminAcces
J'ai modifié quelque peu le code en même temps, car je ne vois pas pourquoi masquer la feuille SOMMAIRE
et il y a un "bug" effectivement lorsque l'on veut convertir une selection de feuilles en PDF
Sub ExportPDF()
Dim CheminAcces As String, NoPrint As String
Dim Sht As Worksheet, sTab As String
' Feuille(s) à ne pa simprimer
NoPrint = "SOMMAIRE"
' ICI la variable est bien CheminAcces
' Récupère le chemin d'accès avec le séparateur
CheminAcces = ThisWorkbook.Path & Application.PathSeparator
' Pour l'export en PDF via VBA
' on est apparemment obligé de sélectionner la Zone d'impression
'
' Pour chaque feuille du classeur
For Each Sht In ThisWorkbook.Sheets
' Si la feuille n'est pas dans la liste
If InStr(1, NoPrint, Sht.Name) = 0 Then
' On l'active
Sht.Activate
Sht.Range("Zone_d_impression").Select
End If
Next Sht
' Pour chaque feuille du classeur
For Each Sht In ThisWorkbook.Sheets
' Si la feuille n'est pas dans la liste
If InStr(1, NoPrint, Sht.Name) = 0 Then
' Récupérer le nom du client dans la feuille Intro
If Sht.Name = "Intro" Then
NomClient = "FI_" & Sht.Range("K38") & ".pdf"
End If
' Sélectionner les feuilles à exporter
Sht.Select False
End If
Next Sht
' ICI la variable est toujours CheminAcces
' Export au format PDF
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CheminAcces & NomClient, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
' Revenir au sommaire
Sheets("SOMMAIRE").Select
End Sub
A+
Hey !
Alors, j'utilise ce code qui marche quasiment à merveillle :
Sub FI_export_PDF_avec_visualisation()
'
' Test_export_pdf Macro
'
Sheets("SOMMAIRE").Visible = False
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:="FI_" & Sheets("EARF").Range("B3") & ".pdf" , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
Sheets("SOMMAIRE").Visible = True
Sheets("SOMMAIRE").Select
End Sub
Quasiment car je souhaiterais que l'export se fasse, par défaut, dans le même répertoire que le classeur. Ca doit être un chemin relatif j'imagine...
Je cache le sommaire car c'est là où se trouve le bouton pour déclancher la macro, et je ne souhaite pas avoir cette feuille sommaire dans mon export (puisque ce n'est pas réellement un sommaire en fait...). Du coup, comme je cache cette feuille, hop, elle ne s'imprime pas
La variable qui contient le chemin d'accès est bien : CheminAcces
Autant pour moi
Heuuuu comment dire
c'est comme lire un bouquin de mécanique sur une 2CV et avoir une Merco
eh ouais, je comprends. Cela dit, commençons modeste ! On verra si je tape dans les gros pavés d'ici quelques mois