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 :

Générer un PDF avec 2 pages de feuilles différentes et ne pas écraser fichier pdf si existant [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    En Recherche d'Emploi
    Inscrit en
    Mars 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : En Recherche d'Emploi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 42
    Points : 26
    Points
    26
    Par défaut Générer un PDF avec 2 pages de feuilles différentes et ne pas écraser fichier pdf si existant
    Bonsoir à tous,

    Je suis coincé avec une macro VBA qui me donne un fichier PDF d'une partie d'une première feuille. Cette macro fonctionne bien en l'état, excepté que je ne sais pas insérer un message d'erreur lorsque le fichier que j'essaie de générer existe déjà : 1er problème !

    Ensuite, j'ai cherché (sans succès) de mettre deux sélection de deux feuilles différentes dans le même PDF.

    J'ai bien le code qui permet d'avoir 2 pages dans le même PDF mais ce sont les pages complètes alors que j'essaie de mettre dans le PDF 2 sélections de page... mais je ne parviens à avoir le résultat...
    Je dois obtenir dans le même PDF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Sheets("DMI").Select
        Range("A15:H54").Select
        Sheets("DMI Accompagnement").Select
        Range("A15:J43").Select
    Mais c'est pas bon...


    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 DMI_DMI_Accompagnement()
        Dim sRep As String
        Dim sFilename As String
     
        Sheets(Array("DMI", "DMI Accompagnement")).Select
        Sheets("DMI").Select
        Range("A15:H54").Select
        Sheets("DMI Accompagnement").Select
        Range("A15:J43").Select
        sRep = "C:\Users\Joe\Desktop\"     ' Répertoire de sauvegarde (si non spécifié, répertoire actif par défaut)
        sFilename = ThisWorkbook.Name
        sFilename = "Douanes" & "-" & "DMI" & "-" & Worksheets("DMI").Range("B18").Value & "-" _
        & Worksheets("DMI").Range("C20").Value & "." & "pdf"
     
        Selection.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=sRep & sFilename, _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, _
                OpenAfterPublish:=True
     
        Sheets("DMI Accompagnement").Select
        Range("A6").Select
     
        Sheets("DMI").Select
        Range("A6").Select
     
    End Sub
    Systématiquement, je n'obtiens que la 2e page.

    Bon, je vais voir si la nuit porte conseil

    Bonne soirée,

    Joe

  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, via l'enregistreur de macros
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            "C:\.....\.....\Classeur1.pdf", Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
            False
    Voir en bas de ce post 1 Impression de certaines Feuilles d'un classeur via un tableau dans un seul Pdf résultant

    Sinon dans un autre contexte ( PDFCreator ) mais c'est transposable
    Voir exemple ici et la fonction RenommerFichierPDF(sChemin As String, sNomFichier As String) As String

    Bref les possibilités ne manquent pas, à toi de les adapter à ton contexte.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    En Recherche d'Emploi
    Inscrit en
    Mars 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : En Recherche d'Emploi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Salut Kiki29, bonjour le forum,

    Merci pour ta réponse. J'ai lu avec grand intérêt toutes les perspectives et dont je n'avais pas conscience...

    Malheureusement, le niveau est beaucoup trop complexe pour moi (étant non-informaticien et "petit" codeur autodidacte)

    Après (grosse) réflexion, j'ai adapté un bout de code trouvé sur un forum et que j'ai réussi à faire fonctionner en partie :
    - pdf enregistré au bon endroit avec le bon nom
    - message d'erreur ok si fichier existe déjà dans le répertoire
    - plage A15:H54 de la Feuil1 imprimée

    LOrsque j'essaie d'y ajouter la 2e plage de la Feuil2 = Je plante tout !

    Voici le code que j'ai à l'heure actuelle et qui fonctionne en partie (j'ai volontairement supprimé la 2e plage) pour pouvoir m'en servir même si ce n'est pas exactement ce que je recherche.
    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
    Sub DMI_Générer_PDF()
    ' Permet de générer une impression PDF d'une partie d'une feuille
    ' en sauvegardant le document .pdf avec un nom spécifique et dans répertoire déterminé
     
        Dim sRep As String                  ' Répertoire de sauvegarde
        Dim sFilename As String             ' Nom du fichier
     
        sRep = "C:\Users\Joe\Desktop\"                       ' Répertoire de sauvegarde (si non spécifié, répertoire actif par défaut)
        sFilename = "Douanes" & "-" & ActiveSheet.Name & "-" & Range("B18").Value & "-" & Range("C20") & "." & "pdf"      ' Nom du fichier
     
            ' Vérifier si un fichier portant ce nom existe
            If sRep = ("Douanes" & "-" & ActiveSheet.Name & "-" & Range("B18").Value & "-" & Range("C20").Value & "." & "pdf") <> "" Then
                 If MsgBox("Un fichier ayant ce nom " & sFilename & " existe " & _
                    "déjà dans ce répertoire " & sRep & "." & vbCrLf & _
                    "Désirez-vous l'écraser ? ", vbCritical + vbYesNo, "Attention !") = vbNo Then
                     sFilename = Application.InputBox("Donner lui un nouveau nom.")
                     If Format(sFilename) = False Then
                          MsgBox "Opération de la Création des fichiers PDF annulée."
                     Else
                 End If
             End If
        End If
     
    ' Impression PDF de la feuille "DMI"
        Range("A15:H54").Select
        Selection.ExportAsFixedFormat _
                         Type:=xlTypePDF, _
                         Filename:=sRep & sFilename, _
                         Quality:=xlQualityStandard, _
                         IncludeDocProperties:=True, _
                         IgnorePrintAreas:=False, _
                         OpenAfterPublish:=True
    End Sub
    Voilà, merci pour ton attention. Je vais continuer à chercher la solution.

    Bon week-end,

    Joe

  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, place le code dans un module standard, affecte un bouton à la procédure Test, fais la mise en page pour chaque feuille à imprimer

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Option Explicit
     
    Private Function RenommerFichier(sDossier As String, sNomFichier As String) As String
    Dim sNouveauNom As String
    Dim sPre As String
    Dim sExt As String
    Dim iExt As Long
    Dim i As Long, Pos As Long
    Dim FSO As Object
     
        Set FSO = CreateObject("Scripting.FileSystemObject")
        If FSO.FileExists(sDossier & "\" & sNomFichier) Then
            sNouveauNom = sNomFichier
            Pos = InStrRev(sNomFichier, ".")
            iExt = Len(sNomFichier) - Pos + 1
            If Pos > 0 Then
                sExt = Right$(sNomFichier, iExt)
                sPre = Left$(sNomFichier, Len(sNomFichier) - iExt)
            Else
                sExt = ""
                sPre = sNomFichier
            End If
     
            i = 0
            While FSO.FileExists(sDossier & "\" & sNouveauNom) 
                i = i + 1
                sNouveauNom = sPre & Chr(40) & Format(i, "000") & Chr(41) & sExt
            Wend
            sNomFichier = sNouveauNom
        End If
        Set FSO = Nothing
     
        RenommerFichier = sDossier & "\" & sNomFichier
    End Function
     
    Sub Test()
    Dim Ar(1) As String
    Dim sDossierPDF As String
    Dim sNomFichierPDF As String
    Dim sNomFichier As String
     
        sDossierPDF = ThisWorkbook.Path
        sNomFichierPDF = "Douanes" & "-" & Feuil1.Name & "-" & Feuil1.Range("B18").Value & "-" & Feuil1.Range("C20") & ".pdf"
     
        Ar(0) = "DMI"
        Ar(1) = "DMI Accompagnement"
     
        sNomFichier = RenommerFichier(sDossierPDF, sNomFichierPDF)
     
        Application.ScreenUpdating = False
        Sheets(Ar).Select
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                                        Filename:=sNomFichier, _
                                        Quality:=xlQualityStandard, _
                                        IncludeDocProperties:=True, _
                                        IgnorePrintAreas _
                                        :=False, OpenAfterPublish:=False
        Feuil1.Select
        Application.ScreenUpdating = true
    End Sub
    P.-S. :Tu n'es pas sur le bon forum, d'autre part le post multiple sur x forums n'encourage pas à t'aider, bien au contraire.
    Images attachées Images attachées  

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    En Recherche d'Emploi
    Inscrit en
    Mars 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : En Recherche d'Emploi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Bonjour Kiki29,

    Après avoir testé ça fonctionne très bien : Un grand merci.

    Pour le fait de poster sur x forums, c'est parce que, étant non informaticien, certaines explications peuvent être d'un niveau trop complexe et le fait d'avoir différents avis me permet souvent d'avoir une sorte de "vulgarisation" des informations à assimiler, et ça m'évite de "saouler" toujours la même personne qui n'est pas, bien évidemment, à ma "disposition". J'avoue, avec du recul, qu'étant moi-même un "Admin" de forum, c'est pas terrible comme comportement, même si je n'étais pas mal intentionné, alors je vais essayer de corriger ça

    Un très grand merci pour ton aide décisive.

    Bon dimanche,

    Joe

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

Discussions similaires

  1. Générer un PDF avec plusieurs pages
    Par hisoft dans le forum Débuter
    Réponses: 0
    Dernier message: 07/10/2011, 18h59
  2. Inclure un ps ou un pdf avec plusieurs pages
    Par Deallyra dans le forum Mise en forme
    Réponses: 3
    Dernier message: 14/03/2010, 15h22
  3. [2.2.0] PDF avec une page blanche à la fin
    Par hornex dans le forum BIRT
    Réponses: 3
    Dernier message: 26/11/2009, 16h16
  4. Générer un fichier PDF avec gtPDFEngine
    Par Gwenou dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/02/2009, 14h10
  5. PDF avec plusieurs pages de dessin
    Par gerard kester dans le forum Documents
    Réponses: 1
    Dernier message: 22/12/2007, 08h26

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