Macro excel: exporter en pdf à chaque saut de page

Fermé
hogun06 Messages postés 4 Date d'inscription dimanche 23 février 2014 Statut Membre Dernière intervention 26 février 2014 - 23 févr. 2014 à 22:24
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 26 févr. 2014 à 21:32
Bonjour,

Bonjour,

J'ai besoin d'un coup de main pour écrire une macro pour créer un pdf à chaque saut de page à partir d'un fichier Excel.

J'ai un fichier Excel sur lequel je fait un sous total en fonction de la colonne B avec un saut de page à chaque changement de valeur (pour l'instant j'ai réussi à faire ma macro).

Le fichier en question peut contenir jusqu'à plus de 3000 lignes, avec sur ma fameuse colonne B une liste de noms, chaque nom s'étend sur une 40aine de lignes en moyenne.
Ça se présente donc sous la forme:

NomA
NomA
NomB
NomB
NomB
etc...

Comment puis-je faire pour exporter chaque page ainsi créé vers un fichier pdf (avec si possible un nom en fonction de la valeur se trouvant dans la colonne B) ?


Merci pour votre aide.

A voir également:

5 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
24 févr. 2014 à 09:53
Bonjour,

Comme tu pratiques vba, je te donne la séquence pour sauvegarder ta page en PDF :

Dim rep As String
    rep = "ton répertoire\"
    Range("A1:I5").Copy     ' page à sélectionner
    Workbooks.Add
    ActiveSheet.Paste
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=rep & [B1].Value & ".PDF", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    ActiveWorkbook.Close SaveChanges:=False

Tu remplace B1 par la cellule concernée dans ta page.
0
hogun06 Messages postés 4 Date d'inscription dimanche 23 février 2014 Statut Membre Dernière intervention 26 février 2014
24 févr. 2014 à 16:42
Bonjour gbinforme et merci pour ta réponse.

Malheureusement cela ne sera pas suffisant pour ce que je cherche à faire car je dois faire cette extraction pour chacune de pages ainsi générées (et pas seulement à la fois).

De plus l'idée de créer une nouvelle feuille excel à chaque fois puis la refermer risque de rendre la macro trop lourde pour être intéressante non?

N'y a t'il pas moyen de créer une boucle pour cela (là on dépasse mes compétences en vba).
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
24 févr. 2014 à 18:05
Bonjour hogun06,

l'idée de créer une nouvelle feuille excel à chaque fois puis la refermer risque de rendre la macro trop lourde
Tu veux créer un PDF par page, comment veux-tu le faire sans en générer la structure ?
Cette feuille ne sert que de support à la sauvegarde du PDF, si tu as une idée plus lumineuse, je veux bien t'aider à la coder.
Ta centaine de PDF que tu veux créer est-elle dans le même répertoire que ton classeur ?

N'y a t'il pas moyen de créer une boucle pour cela
Bien sûr qu'il faut créer une boucle, mais pour cela il faut avoir la connaissance de la structure de tes données.
Si tu pouvais nous mettre un exemple de classeur avec la structure des données, sans éléments personnels mais avec ta macro actuelle, se serait plus facile de t'aider.
Pour communiquer ton classeur tu le télécharges sur https://www.cjoint.com/ et tu mets ici le lien obtenu.
0
hogun06 Messages postés 4 Date d'inscription dimanche 23 février 2014 Statut Membre Dernière intervention 26 février 2014
24 févr. 2014 à 22:34
Bonsoir gbinforme, désolé soirée chargée d'où la réponse tardive.

En fait pour créer ma "structure" de pages j'utilise l'instruction "Pagebreaks=true" dans ma fonction de sous-total (issu d'un enregistrement de macro).

Tu verras dans le fichier joint: https://www.cjoint.com/?DBywCYxkO5t

J'ai simplifié au maximum en ne prenant que 3-4 noms (et modifiant les infos) histoire de pouvoir travailler sur un fichier plus "léger" que celui d'origine. Ca me permet de faire des tests sans risquer perdre des données.

J'y ai mis deux macros:

la première qui me fait mes sous-totaux comme indiqué plus haut dans le topic.

Une seconde où j'ai tenté une boucle (je débute en vba alors ne sois pas trop regardant sur la qualité du code...) mais j'échoue lamentablement à afficher mon sous-total dedans (probablement une déclaration qui m'échappe).

Encore un grand merci de t'être penché sur mon problème.
Si tu as d'autres questions n'hésites pas.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
25 févr. 2014 à 10:28
Merci du classeur, je te fais cela pour demain car je m'absente.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
25 févr. 2014 à 23:48
Bonjour,

Je t'ai laissé tes macros et avec celle qui fonctionnait j'ai rajouté :
- la saisie de la date choisie (à saisir comme date : j/m/aa)
- la sélection du répertoire des PDF
(tu peux le créer avec la fenêtre : nouveau dossier)
- la création des PDF sélectionnés avec le titre pour chacun, le nom de la colonne B et la mise en page paysage ligne complète
- un bouton pour lancer la macro

https://www.cjoint.com/c/DBzxJyvmpbR

Ton classeur test est parfaitement constitué puisque l'on peut tester 2 dates et 1 ou 3 PDF.

Bon test
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hogun06 Messages postés 4 Date d'inscription dimanche 23 février 2014 Statut Membre Dernière intervention 26 février 2014
26 févr. 2014 à 12:19
Bonjour,


merci pour ta macro je n'en demandais pas tant...
Je mets en test tout cela et je repasse sur ce topic si jamais j'ai besoin d'un ajustement.

Encore merci pour cet énorme coup de main.
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 712
26 févr. 2014 à 21:32
Bonsoir,

Tu peux accélérer un peu en rajoutant cette ligne en gras après tes 2 delete :
                       .Rows(i).Delete
Exit For
Cela évite de tout parcourir alors que tu n'as qu'un total.
Bons tests.
0