Macro excel: exporter en pdf à chaque saut de page

hogun06 Messages postés 4 Statut Membre -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
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.

5 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  2. hogun06 Messages postés 4 Statut Membre
     
    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
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      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
  3. hogun06 Messages postés 4 Statut Membre
     
    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
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Merci du classeur, je te fais cela pour demain car je m'absente.
      0
  4. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. hogun06 Messages postés 4 Statut Membre
     
    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
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      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