Assemblage de classeur excel

Résolu
jujuetd63 -  
 jujuetd63 -
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. jujuetd63
     
    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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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. jujuetd63
     
    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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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. jujuetd63
     
    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. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. jujuetd63
     
    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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
  6. jujuetd63
     
    ok merci

    je vais tester différentes combinaisons de documents.
    0
  7. jujuetd63
     
    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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      peut-être simplement:
      Workbooks.Open Filename:= repertoire + "\" + nf
      0
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
  8. jujuetd63
     
    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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
  9. jujuetd63
     
    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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        ou 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
  10. jujuetd63
     
    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
  11. jujuetd63
     
    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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Relis-toi!

      ce n'est pas:

      IncludeDocProperies:=True, _


      mais

      IncludeDocProperties:=True, _


      il manque le t

      il faut être minutieux en programmation!
      0
  12. jujuetd63
     
    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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      peux-tu alors marquer la discussion comme résolue?
      0