Assemblage de classeur excel

Résolu
Bonjour,

Je débute sur VBA et je souhaite pouvoir assembler plusieurs classeurs EXCEL pour créer un document au format PDF mais je souhaite aussi garder ce même document dans une version facilement modifiable (un classeur EXCEL final par exemple).

Je réalise déjà une opération similaire avec des documents WORD où je transfère l'ensemble des documents sources dans un dossier avant de lancer un document WORD dans lequel se trouve une macro qui effectue l'assemblage.

Je pensais donc rassembler les différentes sources EXCEL dans un autre dossier, et de la faire l'assemblage. Cela je pense déjà pouvoir le faire par moi même.

J'ai trouvé plusieurs tuto pour assembler deux classeurs mais cela ne correspond pas à ce que je veux faire.

Je souhaite pouvoir assembler tout les documents TYPE EXCEL contenue dans le dossier mais dans un ordre défini.

Pour les documents WORD que j'assemble déjà, il suffi de les numéroter au moment du transfert et cela fonctionne, je pense donc pouvoir faire la même chose pendant le transfert des documents EXCEL.

Je ne trouve pas de code permettant de s'approcher de se fonctionnement.
Si vous avez des idées je suis preneur merci d'avance.

Je me tourne vers vous car c'est vous qui m'avais permis de mettre le document WORD final en PDF dans ce projet.

Cordialement

Configuration: Windows / Edge 18.18362

13 réponses

  1. Si je comprend bien ce qui est écrit dans le document du lien il faut que le document actif soit celui qui reçoit le contenu des autres documents.

    Dans mon cas le classeur EXCEL actif est l'interface d'assemblage.

    Le document assemblé est à créer de toute pièce à chaque utilisation de l'interface.

    Je ne peux donc pas utiliser le document actif comme dans le code que vous m' avez envoyer.

    Comment est il possible de modifier ce code pour le faire fonctionner sans le document actif?

    Si il faut un document support je peux en créer un ( je ne sais pas encore comment).
    J'utilise une méthode similaire pour l'assemblage des documents WORD.
    0
    1. Contributeur
      bonjour, il est possible de modifier ce code, en remplaçant la ligne
      Set classeurMaitre = ActiveWorkbook
      par la création d'un document Excel.
      par exemple:
      dim classeurMaitre as workbook
      Set classeurMaitre= Workbooks.Add 
      ' le reste du boulot
      classeurMaitre.SaveAs Filename:= thisworkbook.path + "\Assemble.xlsx" 
      0
  2. désolé mais je ne vois pas où mettre les quatre ligne de code que tu m'a donné dans le code suivant:
    Sub consolide()
      ' Ce classeur et les classeurs à consolider sont dans le même répertoire
      répertoire = ThisWorkbook.Path
      Set classeurMaitre = ActiveWorkbook
      sup
      compteur = 1
      nf = Dir(répertoire & "\*.xls") ' premier fichier
      Do While nf <> ""
        If nf <> classeurMaitre.Name Then
          Workbooks.Open Filename:=nf
          For k = 1 To Sheets.Count
            Sheets(k).Copy After:=classeurMaitre.Sheets(classeurMaitre.Sheets.Count)
            classeurMaitre.Sheets(classeurMaitre.Sheets.Count).Name = "Mapage" & compteur
            compteur = compteur + 1
          Next k
          Workbooks(nf).Close False
        End If
        nf = Dir
        Loop
    End Sub 
    
    Sub sup()
      Application.DisplayAlerts = False
      If Sheets.Count > 1 Then
        Sheets("Accueil").Move before:=Sheets(1)
        Sheets(2).Select
        For i = 2 To Sheets.Count
          ActiveSheet.Delete
        Next i
      End If
    End Sub
    


    Code donné par cs_le piver
    et que veut dire ".ADD"
    0
    1. Contributeur
      il faudrait quand même avoir les bases!

      https://www.excel-plus.fr/vba/demvba/gerer-les-classeurs-en-vba/

      Le code que t'a donné yg_be est facile à mettre en place. Cela saute aux yeux.

      il faudra aussi modifier cette ligne car tu n'auras que les classeurs 2003!

       nf = Dir(répertoire & "\*.xls") ' premier fichier


      @+ Le Pivert
      0
  3. je suis désolé si mon niveau est bas mais on me demande de faire se travail car personne n'a travailler sur VBA et que j'ai vu VBA lors d'une formation en automatisme il y a 4 ans maintenant pendant 3 jours. Je n'ai manipulé que des informations provenant de différentes page d' un même classeur.

    Aujourd'hui et avec l'aide de différents forums comme celui ci, j'ai créé une interface qui assemble des documents WORD et le met en PDF.

    Je ne souhaite pas vous faire perdre votre temps, je vous remercie pour votre aide et je vais essayer ce que vous m'avez fourni.
    0
  4. c'est la ligne:

    classeurMaitre.SaveAs Filename:= thisworkbook.path + "\Assemble.xlsx"

    qui me pose problème.
    je ne sais pas où la mettre.
    je comprend qu'elle enregistre le document dans le répertoire où se trouve le classeur actif mais est il le document final ou le document support pour l'assemblage.
    0
    1. Contributeur
      Cette ligne de code te permet d'enregistrer le classeur que tu as crée. Il faut donc la mettre à la fin.

      Tel qui est fait l'enregistrement se fait dans le même dossier que le classeur contenant les macros avec comme nom:
      Assemble.xlsx
      c'est un classeur xlsx donc ne contenant pas de macro
      0
  5. ok merci

    je vais tester différentes combinaisons de documents.
    0
    1. bonjour,
      Après plusieurs tests j'ai une erreur au niveau de la ligne :

      Workbooks.Open Filename:=nf

      dans le code suivant:
      Sub assembmodbus()
      Call entete
      Call ensmodbus1
      Call ensmodbus2
      Call ensmodbus3
      Call ensmodbus4
      Call ensmodbus5
      Call ensmodbus6
      Call ensmodbus7
      Call ensmodbus8
      Call ensmodbus9
      Call ensmodbus10
      Call ensmodbus11
      Call ensmodbus12
      Call ensmodbus13
      Call ensmodbus14
      Call ensmodbus15
      Call ensmodbus16
      Call ensmodbus17
      Call ensmodbus18
      Call ensmodbus19
      Call ensmodbus20
      
        ' Ce classeur et les classeurs ? consolider sont dans le m?me r?pertoire
        r?pertoire = "D:\COMPTE.R\test macro\assemblagemodbus"
        Dim classeurMaitre As Workbook
      Set classeurMaitre = Workbooks.Add
      
        sup
        compteur = 1
        nf = Dir(r?pertoire & "\*.xlsx") ' premier fichier
        Do While nf <> ""
          If nf <> classeurMaitre.Name Then
            Workbooks.Open Filename:=nf
            For k = 1 To Sheets.Count
              Sheets(k).Copy After:=classeurMaitre.Sheets(classeurMaitre.Sheets.Count)
              classeurMaitre.Sheets(classeurMaitre.Sheets.Count).Name = "ModBus" & compteur
              compteur = compteur + 1
            Next k
           
      Workbooks(nf).Close False
          End If
          nf = Dir
          Loop
          classeurMaitre.SaveAs Filename:="D:\COMPTE.R\test macro\final" & "\DocModbusFinal.xlsx"
          Call savePDFmodbus
      End Sub
      
      Sub sup()
        Application.DisplayAlerts = False
        If Sheets.Count > 1 Then
          Sheets("Accueil").Move Before:=Sheets(1)
          Sheets(2).Select
          For i = 2 To Sheets.Count
            ActiveSheet.Delete
          Next i
        End If
      End Sub


      Je rassemble grâce au "call" les documents EXCEL dans un dossier "assemblagemodbus"
      puis je dois les assembler.

      Je reçois l'erreur 1004: "nous ne trouvons pas 00_entete.xlsx".

      je pensais qu'à la ligne "r?pertoire = "D:\COMPTE.R\test macro\assemblagemodbus"

      j'indiquais le dossier où le document d'assemblage et les documents à assembler se trouvaient.

      Comme puis je sélectionner le dossier où se trouve mes document à assembler?

      Cordialement
      0
      1. Contributeur
        peut-être simplement:
        Workbooks.Open Filename:= repertoire + "\" + nf
        0
      2. Contributeur
        A rectifier:

        r?pertoire = "D:\COMPTE.R\test macro\assemblagemodbus\"' il manquait \


        pour voir si c'est le bon fichier mettre ceci:

         If nf <> classeurMaitre.Name Then
              MsgBox nf
        Workbooks.Open Filename:=nf


        Il serait préférable de faire:

        Sub assembmodbus()
        Call entete
        Call ensmodbus1
        Call ensmodbus2
        Call ensmodbus3
        Call ensmodbus4
        Call ensmodbus5
        Call ensmodbus6
        Call ensmodbus7
        Call ensmodbus8
        Call ensmodbus9
        Call ensmodbus10
        Call ensmodbus11
        Call ensmodbus12
        Call ensmodbus13
        Call ensmodbus14
        Call ensmodbus15
        Call ensmodbus16
        Call ensmodbus17
        Call ensmodbus18
        Call ensmodbus19
        Call ensmodbus20
        End Sub
        
        Sub savepdf()
          ' Ce classeur et les classeurs ? consolider sont dans le m?me r?pertoire
          r?pertoire = "D:\COMPTE.R\test macro\assemblagemodbus"
          Dim classeurMaitre As Workbook
        Set classeurMaitre = Workbooks.Add
        
        'lasuite
        


        @+ Le Pivert
        0
    2. merci cela fonctionne.

      Autre question, j' ai un code qui me permet de convertir un document WORD en PDF.

      j'ai voulu l'adapter pour convertir le document EXCEL final créé avec le code du poste au dessus mais cela ne fonctionne pas.
      voici le code pour WORD:
      Sub savePDF()
      Dim docWord As Word.Document
      Dim appWord As Word.Application
      Dim fic_doc As String
      Dim cheminpdf As String
      
      Set appWord = New Word.Application
      appWord.Visible = True
      fic_doc = Range("h4").Value
      
      'Ouverture du document principal Word
      Set docWord = appWord.Documents.Open(fic_doc)
      cheminpdf = Replace(fic_doc, "docx", "pdf")
      
          'enregistre en pdf dans le dossier en cours
      docWord.ExportAsFixedFormat outputFileName:=cheminpdf, _
      exportFormat:=wdExportFormatPDF
      'Fermeture du document Word
      docWord.Close False
      appWord.Quit
      End Sub


      Et voici le code modifier pour EXCEL
      Sub savePDFmodbus()
      Dim docexcel As Workbook
      Dim appexcel As Workbook.Application
      Dim chemin As String
      Dim cheminpdf As String
      
      Set appexcel = New Workbooks.Application
      appexcel.Visible = True
      chemin = Range("h5").Value
      
      'Ouverture du document principal excel
      Set docexcel = Workbooks.Documents.Open(chemin)
      cheminpdf = Replace(chemin, "xlsx", "pdf")
      
          'enregistre en pdf dans le dossier en cours
      docexcel.ExportAsFixedFormat outputFileName:=cheminpdf, _
      exportFormat:=wdExportFormatPDF
      'Fermeture du document Word
      docexcel.Close False
      appexcel.Quit
      End Sub


      l'erreur que j'ai, est au niveau de la déclaration de la variable "Dim appexcel As Workbook.Application"
      0
      1. Contributeur
        avant tout, comme d'habitude, as-tu enregistré dans Excel une macro qui te montrait comment créer un pdf à partir d'un classeur ouvert?
        ensuite, je pense que tu vas chercher beaucoup trop loin, puisque tu as la variable classeurMaitre, qui te permet d'accéder au document.
        0
    3. non pour une raison que j'ignore je n'arrive pas à enregistrer de macro quand je créer un pdf en manuel.

      j' ai réussi pour d'autres fonctionnalités mais pour celle ci cela ne fonctionne pas la macro est vide.
      de plus le classeur à convertir est fermé et enregistré dans un dossier diffèrent de l'interface EXCEL qui est ouverte.
      0
      1. Contributeur
        Comme ceci:

        Sub CreerPDF()
            Dim sRep As String
            Dim sFilename As String
            Sheets.Select 'sélection de toutes les feuilles
            sRep = ThisWorkbook.Path & "\"
            sFilename = ThisWorkbook.Name
            sFilename = Left(sFilename, InStr(1, sFilename, ".")) & "pdf"
            ActiveSheet.ExportAsFixedFormat _
                    Type:=xlTypePDF, _
                    Filename:=sRep & sFilename, _
                    Quality:=xlQualityStandard, _
                    IncludeDocProperties:=True, _
                    IgnorePrintAreas:=False, _
                    OpenAfterPublish:=True
                    MsgBox "Enregistrer en PDF dans le même dossier que ce classeur", vbInformation, "Enregistrement en PDF"
        End Sub
        
        


        C'est une macro à mettre dans le classeur assemblé!!!

        @+ Le Pivert
        0
      2. Contributeur
        @cs_Le Pivertou peut-être:
        classeurMaitre.SaveAs Filename:="D:\COMPTE.R\test macro\final" & "\DocModbusFinal.xlsx"
        sFilename = "D:\COMPTE.R\test macro\final" & "\DocModbusFinal.pdf"
        classeurMaitre.ExportAsFixedFormat
                    Type:=xlTypePDF, _
                    Filename:=sRep & sFilename, _
                    Quality:=xlQualityStandard, _
                    IncludeDocProperties:=True, _
                    IgnorePrintAreas:=False, _
                    OpenAfterPublish:=True
        0
    4. bonjour

      je teste depuis ce matin le code ci dessus mais j'ai une erreur de compilation.

      "attendu: identificateur"

      sur les lignes suivantes:
       Type:=xlTypePDF, _
          Filename:=sRep & sFilename, _
          Quality:=xlQualityStandard, _
          IncludeDocProperies:=True, _
          IgnorePrintAreas:=False, _
          OpenAfterPublish:=True


      J'ai vérifié la syntaxe, elle semble ok.
      Je ne comprend pas le problème même avec l'aide.
      0
      1. désolé
        je viens de trouver mon erreur.

        J'ai une erreur de compilation sur la ligne:

        "IncludeDocProperies:=True, _"

        Argument nommé introuvable

        Faut il une référence spéciale?
        j'ai essayé sans cette ligne le document semble se créer mais je ne peu pas l'ouvrir.
        0
        1. Contributeur
          Relis-toi!

          ce n'est pas:

          IncludeDocProperies:=True, _


          mais

          IncludeDocProperties:=True, _


          il manque le t

          il faut être minutieux en programmation!
          0
      2. merci du conseil mais cela fait 4 h que je lis des ligne de code et je commence à vers trouble .

        Cela fonctionne encore merci pour votre aide à tous.
        0
        1. Contributeur
          peux-tu alors marquer la discussion comme résolue?
          0

      Discussions similaires

      etiquette pour dos classeur

      2 réponses