IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Exportation Excel vers PDF en VBA [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre expert

    Développeur NTIC
    Inscrit en
    Janvier 2011
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Développeur NTIC
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 670
    Points : 3 942
    Points
    3 942
    Par défaut Exportation Excel vers PDF en VBA
    Bonjour, je dois me mettre à VBA pour ma boîte, seulement, je n'en ai jamais fait ...

    J'ai un document contenant plusieurs feuilles qui contiennent elles mêmes plusieurs pages.
    On me demande la possibilité d'imprimer plusieurs pages de plusieurs feuilles les unes à la suite des autres.
    Par exemple : Feuille 1 page 8, puis feuille 3 page 27, puis feuille 512 page 1, etc

    J'e me suis servi de l'excellent Tutoriel trouvé sur votre site ici : http://heureuxoli.developpez.com/office/word/doc2pdf/

    J'ai donc importé le formulaire fourni par PDFCreator, puis j'ai coché la référence PDF Creator, ensuite j'ai créé mon bouton et inséré le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Load frmPDFCreator
    frmPDFCreator.Show
    Donc voilà, le formulaire se charge mais j'aimerais offrir la possibilité d'imprimer telle ou telle page en particulier d'une feuille en particulier (en fait c'est un seul document éclaté en plusieurs feuilles excel ...) et je n'ai strictement aucune idée d'où partir mis à part que je vais travailler sur la partie suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    If OptionButton2.Value = True Then
      With PDFCreator1
       .cOption("UseAutosave") = 1
       .cOption("UseAutosaveDirectory") = 1
       .cOption("AutosaveDirectory") = ActiveWorkbook.Path
       Debug.Print outName & "-" & ActiveSheet.Name
       .cOption("AutosaveFilename") = outName & "-" & ActiveSheet.Name
       .cOption("AutosaveFormat") = 0                            ' 0 = PDF
       .cClearCache
      End With
      ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator"
      Do Until PDFCreator1.cCountOfPrintjobs = 1
       DoEvents
       Sleep 1000
      Loop
      Sleep 1000
      PDFCreator1.cPrinterStop = False
     End If
    .

    Merci à ceux qui sauront m'aiguiller.

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, à partir de la version 2007 Office intègre en natif le format PDF, donc l'usage de PdfCreator ou autre devient souvent inutile, cependant tu peux jeter un œil sur http://www.developpez.net/forums/d43...bat-distiller/ à tout hasard ( en bas du Post #1 )

    Un exemple très sommaire, à toi de l'adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Option Explicit
     
    Sub Tst()
    Dim Ar(2) As String
     
        Ar(0) = Feuil1.Name
        Ar(1) = Feuil2.Name
        Ar(2) = Feuil3.Name
        Application.ScreenUpdating = False
        Sheets(Ar).Select
     
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & "Essai.pdf" _
            , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
            :=False, OpenAfterPublish:=False
     
        Sheets("Feuil1").Select
        Application.ScreenUpdating = True
    End Sub

  3. #3
    Membre expert

    Développeur NTIC
    Inscrit en
    Janvier 2011
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Développeur NTIC
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 670
    Points : 3 942
    Points
    3 942
    Par défaut
    Merci Philippe, mais je n'y comprends vraiment rien du tout ...

    Ce que je voudrais en fait c'est que quand j'appuie sur un bouton (en l'occurrence le bouton du mois de mars par exemple (je vais faire un bouton par mois)). Il imprime certaines pages de certaines feuilles, pas les feuilles complètes.

    Par exemple :


    On commence à la feuille 1 page 1 2 3

    On passe à la feuille 2 pages 3 5 7

    On passe à la feuille 5 pages 7 9 3

    On passe à la feuille 1 page 8 5 3

    Je ne vois absolument pas comment faire.

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, l'exemple sous entend que la mise en page et donc la zone à imprimer pour chaque feuille a été sélectionnée avant de lancer l'impression Pdf

  5. #5
    Membre expert

    Développeur NTIC
    Inscrit en
    Janvier 2011
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Développeur NTIC
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 670
    Points : 3 942
    Points
    3 942
    Par défaut
    Le fonctionnement voulu nécessite une impression automatique et non une impression par sélection (si c'est ce que tu veux dire par "l'exemple sous entend que la mise en page et donc la zone à imprimer pour chaque feuille a été sélectionnée avant de lancer l'impression Pdf").

  6. #6
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, as-tu seulement essayé le code fourni ?
    De tout façon il faut que la mise en page ait été faite pour toutes les feuilles avant de lancer une impression, ensuite il y a des choses du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.PageSetup.PrintArea = "$A$1:$G$33"

  7. #7
    Membre expert

    Développeur NTIC
    Inscrit en
    Janvier 2011
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Développeur NTIC
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 670
    Points : 3 942
    Points
    3 942
    Par défaut
    Je n'ai pas encore testé je te redirai ça lundi si jamais je galère, merci pour tout en tous cas.

  8. #8
    Membre expert

    Développeur NTIC
    Inscrit en
    Janvier 2011
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Développeur NTIC
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 670
    Points : 3 942
    Points
    3 942
    Par défaut
    Je viens d'essayer. Cela fonctionne seulement il me sort les deux feuilles telles qu'elles l'une à la suite de l'autre et non en forme.
    Dans mon fonctionnement je ne veux pas de sélection. Je voudrais que tout soit fait automatiquement.

    En gros la personne appuie sur un bouton
    la macro sélectionne feuil2 page1
    puis feuil2 page 2
    puis feuil2 page 3
    (et ainsi de suite pour toutes mes pages)
    Puis elle colle les pages les unes à la suite des autres et ensuite exporte tout ça en pdf.
    C'est possible sans intervention de l'utilisateur ou il faut obligatoirement que l'utilisateur intervienne pour l'impression?

  9. #9
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, bis repetita : l'impression dépend de la mise en page effectuée avant l'impression ,si cette mise en page n'a pas été effectuée ( choix des pages à imprimer, format etc ) l'impression se fera avec une mise en page par défaut

  10. #10
    Membre expert

    Développeur NTIC
    Inscrit en
    Janvier 2011
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Développeur NTIC
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 670
    Points : 3 942
    Points
    3 942
    Par défaut
    Si j'ai bien compris cette mise en page s'effectue au sein de la page elle même (et non dans la macro comme je voulais le faire).

    Seulement, je ne comprends pas comment je peux faire pour imprimer certaines zones et non d'autres via la mise en page (je peux sélectionner certaines zones de ma feuille grâce aux numéros de cellulles et de colonnes pour les imprimer, mais comment faire pour savoir que ça sera la première zone à imprimer, puis la deuxième (car il me faut les pages dans un ordre précis)), passer à ma deuxième feuille, imprimer certaines pages de cette deuxième feuille, puis repasser à la première feuille, imprimer, puis repasser à la deuxième, etc, etc.

    Ma mise en page c'est un croisement feuille1, feuille2, feuille1, feuille2, etc.

    Je ne sais pas si je suis très clair dans ce que j'exprime.

  11. #11
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    re, pour cela tu as l'enregistreur de macros, voir exemple plus haut

  12. #12
    Membre expert

    Développeur NTIC
    Inscrit en
    Janvier 2011
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Développeur NTIC
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 670
    Points : 3 942
    Points
    3 942
    Par défaut
    J'ai enregistré les zones à imprimer.

    Mais je ne vois même pas quelle forme de code utiliser, ni où se place ActiveSheet.PageSetup.PrintArea ...

    C'est la première fois que je fais du VBA (et à mon avis la dernière est pas loin).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub ImpressionJanvier()
        Dim Ar(1) As String
        Dim Impression(11) As String
     
        Impression(0) = "$A$1:$G$164"
        Impression(1) = "$A$2:$A$X40"
        Impression(2) = ""
        Impression(3) = ""
        Impression(4) = ""
        Impression(5) = ""
        Impression(6) = ""
        Impression(7) = ""
        Impression(8) = ""
        Impression(9) = ""
        Impression(10) = ""
        Impression(11) = ""
     
     
        Ar(0) = "entête bilans janvier"
        Ar(1) = "bilans janvier"
        Application.ScreenUpdating = False
     
        Sheets(Ar).Select
     
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & "Bilan.pdf" _
            , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
            :=False, OpenAfterPublish:=True
     
    End Sub
    Pour l'instant j'en suis "là", soit nul part.

    Le tableau Impression va me servir à mettre les zones à imprimer.

    Bon vu que j'ai pas trouvé comment faire autrement je vais générer un pdf par zone d'impression.

    J'ai donc ce code ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub ImpressionJanvier()
        Dim Feuille As String
        Dim Impression(1 To 12) As String
        Dim i As Integer
     
        Impression(1) = "$A$2:$G$164"   'pages 1 à 3 feuille entête
     
        Impression(2) = "$A$2:$AX$40"   'pages 1 à 3 feuille bilans
        Impression(3) = "$A$41:$BO$80"   'pages 5 à 8 feuille bilans
        Impression(4) = "$A$81$AX$120"   'pages 9 à 11 feuille bilans
        Impression(5) = "$A$120$AX$156"   'pages 13 à 15 feuille bilans
     
        Impression(6) = "$A$165$G$219"   'page 4 feuille entête
        Impression(7) = "$H$57$N$164"   'pages 6 à 7 feuille entête
     
        Impression(8) = "$A$11$BO$80"   'pages 5 à 8 feuille bilans
     
        Impression(9) = "$H$165$N$219"   'page 8 feuille entête
        Impression(10) = "$O$57$U$164"   'pages 10 à 11 feuille entête
     
        Impression(11) = "$A$81$AX$120"   'pages 9 à 11 feuille bilans
        Impression(12) = "$A$120$AX$156"   'pages 13 à 15 feuille bilans
     
     
        For i = 1 To 12
        If (Impression(i) = "$A$2:$G$164" Or Impression(i) = "$A$165$G$219" Or Impression(i) = "$H$57$N$164" Or Impression(i) = "$H$165$N$219" Or Impression(i) = "$O$57$U$164") Then
         Feuille = "entête bilans janvier"
        Else
         Feuille = "bilans janvier"
        End If
        Sheets(Feuille).PageSetup.PrintArea = Impression(i)
        Sheets(Feuille).ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & "Zone" & i & ".pdf" _
            , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
            :=False, OpenAfterPublish:=False
        Next i
     
     
     
     
    End Sub
    Seulement lors de la génération du pdf zone4 la macro plante, avec une erreur 1004, mes coordonnées sont pourtant bonnes.

    Erreur de gros noob j'ai zappé les : pour les zones de sélection.

    Par contre une piste pour les "fusionner" maintenant ?

  13. #13
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    re, le principe de la fusion est énoncé dans le code donné plus haut via
    avant le lancement de l'impression

  14. #14
    Membre expert

    Développeur NTIC
    Inscrit en
    Janvier 2011
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Développeur NTIC
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 670
    Points : 3 942
    Points
    3 942
    Par défaut
    Bon, finalement ça va pas le faire (il faut que la zone imprimable soit dynamique et retrouvée grâce au numéro des pages) de plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(MaFeuille).Select
    ne fusionne pas du tout les pdf, je vais passer par PDF Creator ça sera moins chiant et plus simple. Merci quand même.

  15. #15
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Re, effectivement cela ne fusionnera rien du tout comme expliqué plus haut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Ar(0) = Feuil1.Name
        Ar(1) = Feuil2.Name
        Ar(2) = Feuil3.Name
     
        Sheets(Ar).Select
        ActiveSheet.ExportAsFixedFormat .....

  16. #16
    Membre expert

    Développeur NTIC
    Inscrit en
    Janvier 2011
    Messages
    1 670
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Développeur NTIC
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 670
    Points : 3 942
    Points
    3 942
    Par défaut
    Je suis toujours à la recherche d'une personne pouvant m'aider avec PDFCreator et VBA, ce que je veux faire étant impossible via le code de kiki29. Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Mise en page excel vers PDF en VBA
    Par shakapouet dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/06/2017, 11h42
  2. Exportation Excel vers PPT avec VBA
    Par ikramea dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/12/2011, 18h36
  3. [WD16] Export Excel vers PDF
    Par fcsamplus dans le forum WinDev
    Réponses: 2
    Dernier message: 28/07/2011, 13h51
  4. [VBA]excel vers pdf
    Par Oussbaba au rhum dans le forum Macros et VBA Excel
    Réponses: 28
    Dernier message: 16/10/2007, 13h05
  5. [VBA-Word] Exportation Excel vers Word
    Par le_sonic dans le forum VBA Word
    Réponses: 6
    Dernier message: 20/12/2006, 17h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo