XL 2010 Imprimer en plusieurs PDF l’onglet Excel actif à chaque saut de page

jeanmi

XLDnaute Occasionnel
Bonjour,

Les actions souhaitées : imprimer en PDF l’onglet actif dans plusieurs fichiers à chaque saut de page, dans un répertoire défini

J’ai essayé ce code : Ça marche bien mais il n'y a que l’onglet entier

Code:
Sheets(1).ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\HP\Documents\02-BON DE LIVRAISON CITERNE\"  & Sheets(1).Name & "_" & "Equipe_1" & ".pdf"

J’ai essayé ce code : ça marche bien pour mes trois sauts de page mais je ne choisis pas l’emplacement de la sauvegarde

Code:
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate  :=True, IgnorePrintAreas:=False
ActiveWindow.SelectedSheets.PrintOut From:=2, To:=2, Copies:=1, Collate :=True, IgnorePrintAreas:=False
ActiveWindow.SelectedSheets.PrintOut From:=3, To:=3, Copies:=1, Collate :=True, IgnorePrintAreas:=False

Comment combiner les deux codes en un ou un autre code pour réaliser la fonction souhaitée ?

Merci de votre aide.

Cordialement
 
Solution
re
Merci @kik29
sinon sans le pdfcreator
il y a 4 lignes a adapter a ta convenance
VB:
Sub test()
    Dim cel As Range, i&, AddR$, tabloRange, feuille As Worksheet, chemin$, plage As Range, col&, lignefin&, partName$
    '**************************************************************
    'dans cet encart tu dois adapter  a ta convenance!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Set feuille = Sheets(1)    ' ici on determine la feuille
    Set plage = feuille.[A1:F31]    'ici on determine la plage complete  à imprimer !!!!!!!!!!!
    chemin = Environ("userprofile") & "\desktop\"    ' adapter le chemin du dossier ici <<< Attention!!!!doit toujour terminer par un "\"
    partName = "mondocument-page-"  ' ca ca sera le debut du nom des pdf  à...

jeanmi

XLDnaute Occasionnel
re
bonjour
on peut si je ne me trompe pas exporter un classeur , une feuille , ou une plage en pdf
parti de là te reste plus qu'a déterminer les areas en fonction des sauts de page et d'exporter les areas(plage) en pdf
;)
Bonjour,

Merci pour la réponse mais j'ai rien compris à celle-ci. j'utilise des codes mais ne les comprend pas pour ça.
ce que je cherche c'est de l'aide sur le code à utiliser pour effectuer l'action souhaité, comme définie dans ma question.

Cordialement
 

patricktoulon

XLDnaute Barbatruc
re
je viens de t'expliquer comment il faut faire
tu a une plage a imprimer
cette plage a des saut de lignes
il te faut donc détecter les sauts de ligne pour déterminer les SUB plage dans cette plage
une fois que tu a toute ces sub plage tu les exporte une à une avec expote As avec un chemin et nom que tu veux

fait une recherche sur hpagebreak
tu a moult exemple ici pour les trouver dans une simple boucle
 

Wayki

XLDnaute Impliqué
Salut,
ce qu'il te dit c'est que si tu exporte ton onglet en pdf, tu aura forcément que tout ton onglet en 1 pdf :
Sheets(1).ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\HP\Documents\02-BON DE LIVRAISON CITERNE\" & Sheets(1).Name & "_" & "Equipe_1.pdf"
Remplace Sheets(1) par worksheets(1).range([la plage que tu veux, style "A1:B4"]).
3 codes nécessaires, pour tes 3 plages.
Il faut trouver 3 noms différents aussi, style "Equipe 1", "Equipe 2", "Equipe 3", car le code écraserait le fichier déjà présent sous le même nom.
Glisse un fichier su tu ne comprends pas, que l'on puisse t'aider.
A +
 

kiki29

XLDnaute Barbatruc
Salut, à lire et appliquer

Pourquoi faire simple quand on peut faire compliqué ....

ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, PrintToFile:=True, PrToFileName:="Essai_01.ps", Collate:=True, IgnorePrintAreas:=False

Le fichier généré est un PostScript ( *.ps ) qui sera à convertir en pdf.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
demonstration
ma plage a imprimer j'ai mis une bordue rouge pour qu'on les voit sur la capture
exemple
1629876039436.png


maintenant une simple boucle pour determiner les plage a exporter
VB:
Sub test()
Dim cel As Range, i As Long, lesAdresses$
Set plage = [A1:F31]
lesAdresses = plage.Cells(1).Address(0, 0) & ":"
For i = 1 To Sheets(1).HPageBreaks.Count
Set cel = Sheets(1).HPageBreaks.Item(i).Location


lesAdresses = lesAdresses & cel.Offset(-1).Address(0, 0) & vbCrLf & cel.Address(0, 0) & ":"
Next i
MsgBox "Les plage a exporter sont :" & vbCrLf & lesAdresses & plage.Cells(plage.Cells.Count).Address(0, 0)
End Sub
démonstration
on voit bien les addres de plage a exporter dans le message
il te suffira de spliter la variable "lesadresses" et d'exporter en boucle
1629876218635.png


et voila pas besoins d'aller chercher pdf créaror et autre truc qu'il faut installer
 

patricktoulon

XLDnaute Barbatruc
tiens je suis allé jusqu'au bout de mon idée selon la plage demontrée dans mes precédents messages
VB:
Sub test()
Dim cel As Range, i&, AddR$, tabloRange, feuille As Worksheet, chemin$
Set feuille = Sheets(1)
Set plage = feuille.[A1:F31] 'determiner la plage complete  à imprimer ici!!!
AddR = plage.Cells(1).Address(0, 0) & ":"
For i = 1 To feuille.HPageBreaks.Count
Set cel = feuille.HPageBreaks.Item(i).Location
AddR = AddR & "F" & cel.Offset(-1).Row & vbCrLf & cel.Address(0, 0) & ":"
Next i
AddR = AddR & plage.Cells(plage.Cells.Count).Address(0, 0)
tabloRange = Split(AddR, vbCrLf)
For i = LBound(tabloRange) To UBound(tabloRange)
chemin = Environ("userprofile") & "\desktop\mondocument-page-" & i & ".pdf"
feuille.Range(tabloRange(i)).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
       chemin, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Next

MsgBox "Les plages " & vbCrLf & AddR & vbCrLf & "ont été imprimé en pdf sur le bureau"
End Sub
j'ai bien mes 4 pdf sur le bureau
1629878636365.png
 

jeanmi

XLDnaute Occasionnel
bonjour à tous et merci pour vos réponses, je vais regarder plus en détail.

Mais ...

si j'utilise le code tous simple ci dessous, objet de ma question initiale :

VB:
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate  :=True, IgnorePrintAreas:=False

ça marche bien, est la mise en page est conservée, mais je voulais y ajouter l'emplacement de stockage en plus : c'est pas possible ?

cordialement
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
non car tu utilise une imprimante virtuelle PDF celle de W10 peut être ou une autre
et le chemin se code dans la fenêtre (config)de cette imprimante virtuelle
a ce jour je n'ai rien trouvé de concluant pour programmer a partir de VBA la config de l'imprimante pdf windows 10 sauf avec librairie UIautomationclient et c'est une vrai torture
donc la réponse est non pas avec cette méthode
 

jeanmi

XLDnaute Occasionnel
re
non car tu utilise une imprimante virtuelle PDF celle de W10 peut être ou une autre
et le chemin se code dans la fenêtre (config)de cette imprimante virtuelle
a ce jour je n'ai rien trouvé de concluant pour programmer a partir de VBA la config de l'imprimante pdf windows 10 sauf avec librairie UIautomationclient et c'est une vrai torture
donc la réponse est non pas avec cette méthode
Cette réponse à le mérite d'être claire et précise. merci beaucoup
je vais donc tester ta proposition dès cette après midi et je revient pour la suite.

merci encore
cordialement
 

jeanmi

XLDnaute Occasionnel
Salut, à lire et appliquer

Pourquoi faire simple quand on peut faire compliqué ....

ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, PrintToFile:=True, PrToFileName:="Essai_01.ps", Collate:=True, IgnorePrintAreas:=False

Le fichier généré est un PostScript ( *.ps ) qui sera à convertir en pdf.
Merci pour cette réponse. ou sera stocké le fichier ?
Peut-on définir un chemin ?
peut-on renommer de ps en pdf depuis le code ?

Merci pour les réponses.

Cordialement
 

jeanmi

XLDnaute Occasionnel
re
ben non il te faut le convertisseur
on en est donc au même point
soit tu exporte comme je te l'ai montrer soit tu instal un pdf creator ou autre logiciel PDF capable de convertir les ".ps"
fait comme je te dis et tout ira bien ;)
re
j'ai pdf creator 8 sur mon PC.
Dans les menus de Excel ou Word je voix PDF creato 7 mais il ne fonctionne pas, il semble qu'il manque .dll. bon j'ai pas trouvé comment faire.
As tu une piste pour ce Pb. ?
 

Discussions similaires

Statistiques des forums

Discussions
314 708
Messages
2 112 097
Membres
111 416
dernier inscrit
philipperoy83