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 :

Fusion de plusieurs fichiers pdf à partir liste excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 50
    Par défaut Fusion de plusieurs fichiers pdf à partir liste excel
    Bonjour,

    Ca fait plusieurs jours que je cherche mais je ne trouve pas…de plus je débute en macro VBA.
    Je viens donc solliciter votre aide.

    A l’aide d’une macro, je souhaiterai fusionner des fichiers pdf 4 par 4 en un fichier pdf, à partir d’une liste excel.
    Soit à partir de la liste excel suivante:

    patient1_pdf1.pdf
    patient1_pdf2.pdf
    patient1_pdf3.pdf
    patient1_pdf4.pdf
    patient2_pdf1.pdf
    patient2_pdf2.pdf
    patient2_pdf3.pdf
    patient2_pdf4.pdf
    patient3_pdf1.pdf
    patient3_pdf2.pdf
    patient3_pdf3.pdf
    patient3_pdf4.pdf

    J’obtiendrai patient1.pdf, patient2.pdf, patient3.pdf…etc. avec patient1.pdf = fusion de patient1_pdf1.pdf et patient1_pdf2.pdf et patient1_pdf3.pdf et patient1_pdf4.pdf
    Dans l’exemple je n’ai reporté que 12 fichiers pdf à fusionner mais au final, j’en aurai environ 600.

    Sur le forum, j’ai trouvé le code suivant qui permet de fusionner en 1 fichier pdf tous les fichiers de la liste excel. Il me manque donc une boucle de 4 en 4 que je ne parviens pas à insérer.

    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
    Option Explicit
    Sub Tst_Fusion()
    Dim sDossierPDF As String
    Dim sDossierOut As String
    Dim sFichierFusion As String
     
        sDossierPDF = ThisWorkbook.Path & "\"
        sDossierOut = ThisWorkbook.Path & "\" & "Test" & "\"
        sFichierFusion = "Fusion.pdf"
     
        FusionPDFs sDossierPDF, sDossierOut, sFichierFusion
    End Sub
     
    Private Sub FusionPDFs(sPdfDir As String, _
                           sPdfOutDir As String, _
                           sFichierOut As String)
    Dim bFirst As Boolean
    Dim oPDDoc As Object
    Dim oTempPDDoc As Object
    Dim LastRow As Long
    Dim I As Long
    Dim sFichier As String
     
        bFirst = True
        LastRow = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
        ' Worksheets("PATIENT").Range("A2:E2").Copy Ws.Range("A1:E1")
     
        For I = 1 To LastRow
            sFichier = Feuil1.Range("A" & I)
            If bFirst Then
                bFirst = False
                Set oPDDoc = CreateObject("AcroExch.PDDoc")
                oPDDoc.Open sPdfDir & sFichier
            Else
                Set oTempPDDoc = CreateObject("AcroExch.PDDoc")
                oTempPDDoc.Open sPdfDir & "\" & sFichier
                oPDDoc.InsertPages oPDDoc.GetNumPages - 1, oTempPDDoc, 0, oTempPDDoc.GetNumPages, 1
                oTempPDDoc.Close
            End If
        Next I
     
        With oPDDoc
            .Save 1, sPdfOutDir & "\" & sFichierOut
            .Close
        End With
     
        Set oPDDoc = Nothing
        Set oTempPDDoc = Nothing
    End Sub

    Merci d’avance pour votre aide qui me sera très précieuse.

    aude_alti

  2. #2
    Membre expérimenté
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Par défaut
    Bonjour,

    Voila qui devrait répondre a tes attentes

    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
    Option Explicit
    Sub Tst_Fusion()
    Dim sDossierPDF As String
    Dim sDossierOut As String
    Dim sFichierFusion As String
     
        sDossierPDF = ThisWorkbook.Path & "\"
        sDossierOut = ThisWorkbook.Path & "\" & "Test" & "\"
        sFichierFusion = "Fusion.pdf"
     
        FusionPDFs sDossierPDF, sDossierOut, sFichierFusion
    End Sub
     
    Private Sub FusionPDFs(sPdfDir As String, _
                           sPdfOutDir As String, _
                           sFichierOut As String)
    Dim bFirst As Boolean
    Dim oPDDoc As Object
    Dim oTempPDDoc As Object
    Dim LastRow As Long
    Dim I As Long
    Dim sFichier As String
    Dim iLigne As Integer
    Dim iNoPatient As Integer
     
        bFirst = True
        LastRow = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
        iLigne = 1
        ' Worksheets("PATIENT").Range("A2:E2").Copy Ws.Range("A1:E1")
     
     
    While iLigne < LastRow
        iNoPatient = iNoPatient + 1
        For I = 0 To 3
            sFichier = Feuil1.Range("A" & iLigne + I)
            If bFirst Then
                bFirst = False
                Set oPDDoc = CreateObject("AcroExch.PDDoc")
                oPDDoc.Open sPdfDir & sFichier
            Else
                Set oTempPDDoc = CreateObject("AcroExch.PDDoc")
                oTempPDDoc.Open sPdfDir & "\" & sFichier
                oPDDoc.InsertPages oPDDoc.GetNumPages - 1, oTempPDDoc, 0, oTempPDDoc.GetNumPages, 1
                oTempPDDoc.Close
            End If
        Next I
     
        iLigne = iLigne + 4
     
        With oPDDoc
            .Save 1, sPdfOutDir & "\" & Left(sFichierOut, Len(sFichierOut) - 4) & iNoPatient & ".pdf"
            .Close
        End With
     
        Set oPDDoc = Nothing
        Set oTempPDDoc = Nothing
    Wend
     
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 50
    Par défaut
    Merci Guiiand pour ta réponse, je la teste et reviens vers toi

    Par contre, une chose me chagrine, mon fichier final Fusion.pdf va être écrasé à chaque fois par le nouveau pdf créé. Il faudrai donc que je fasse une boucle avec iNoPatient?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Par défaut
    Regarde juste au dessous du while, iNoPatient s’incrémente a chaque boucle de 4 i.

    Donc normalement, il y aura bien un pdf différent a chaque fois.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 50
    Par défaut
    Guiiand, oui en effet, j'ai bien un premier fichier Fusion1.pdf , par contre ça ne marche que si j'ai 5 pdf dans ma liste, au delà ça buggue et je n'ai pas de Fusion1.pdf. Aurais-tu une idée?

    Et je complique un peu la donne , je souhaiterai que mon fichier de sorti, au lieu de s'appeler Fusion1, s'appelle 'les 9 premiers caractères' de patient1_pdf1.pdf, puis Fusion2.pdf s'appelle patient2_pdf1.pdf..etc.
    (car en fait 'patient1' de fichier patient1_pdf1.pdf est une chaîne de 9 chiffres)

    Merci encore à toi,

    aude_alti

  6. #6
    Membre expérimenté
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Par défaut
    Re

    voici la modif pour les noms des Pdf.

    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
    Sub Tst_Fusion()
    Dim sDossierPDF As String
    Dim sDossierOut As String
    Dim sFichierFusion As String
     
        sDossierPDF = ThisWorkbook.Path & "\"
        sDossierOut = ThisWorkbook.Path & "\" & "Test" & "\"
        sFichierFusion = "Fusion.pdf"
     
        FusionPDFs sDossierPDF, sDossierOut, sFichierFusion
    End Sub
     
    Private Sub FusionPDFs(sPdfDir As String, _
                           sPdfOutDir As String, _
                           sFichierOut As String)
    Dim bFirst As Boolean
    Dim oPDDoc As Object
    Dim oTempPDDoc As Object
    Dim LastRow As Long
    Dim I As Long
    Dim sFichier As String
    Dim iLigne As Integer
    Dim iNoPatient As Integer
    Dim NomNouveauFichier As String
     
        bFirst = True
        LastRow = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
        iLigne = 1
     
    While iLigne < LastRow
        iNoPatient = iNoPatient + 1
        For I = 0 To 3
            sFichier = Feuil1.Range("A" & iLigne + I)
            If bFirst Then
                bFirst = False
                Set oPDDoc = CreateObject("AcroExch.PDDoc")
                oPDDoc.Open sPdfDir & sFichier
            Else
                Set oTempPDDoc = CreateObject("AcroExch.PDDoc")
                oTempPDDoc.Open sPdfDir & "\" & sFichier
                oPDDoc.InsertPages oPDDoc.GetNumPages - 1, oTempPDDoc, 0, oTempPDDoc.GetNumPages, 1
                oTempPDDoc.Close
            End If
        Next I
     
        'J'ai mis iNoPatient devant pour eviter d'ecraser le patient1_pdf1.pdf original
        NomNouveauFichier = iNoPatient & Feuil1.Range("A" & iLigne)
        iLigne = iLigne + 4
     
        With oPDDoc
            .Save 1, sPdfOutDir & "\" & NomNouveauFichier
            .Close
        End With
     
        Set oPDDoc = Nothing
        Set oTempPDDoc = Nothing
    Wend
     
    End Sub
    Par contre je ne vois pas pourquoi ca bloque à 5 pdf. pourrais tu executer la macro pas a pas et me dire qu est ce qui ne va pas ? Car la je ne vois pas.

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

Discussions similaires

  1. Fusion de plusieurs fichiers excel
    Par Nanty dans le forum VBA Access
    Réponses: 8
    Dernier message: 06/01/2011, 16h35
  2. Macro Ouverture de plusieurs fichiers PDF à partir d'un fichier Excel ?
    Par Mounamidou dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/12/2009, 18h53
  3. Fusion de plusieurs fichiers Excel
    Par AJemni dans le forum Windows Forms
    Réponses: 4
    Dernier message: 05/10/2009, 08h02
  4. [XL-2007] ouvrir un fichier PDF à partir d'une liste
    Par croky23 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/09/2009, 15h53
  5. fusion de plusieurs fichiers excel
    Par mas128 dans le forum Excel
    Réponses: 5
    Dernier message: 31/01/2008, 17h23

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