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
A voir également:

13 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Bonjour,

Tu peux t'inspirer de cela:

http://boisgontierjacques.free.fr/pages_site/GestionOnglets.htm#OngletsClasseursRepertoire

Il faut bien entendu qu'ils soient dans le même répertoire et dans l'ordre que toi est le seul a savoir!


0
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Ce n'est pas une question de temps mais de compréhension::

Quand je lis:

désolé mais je ne vois pas où mettre les quatre ligne de code que tu m'a donné dans le code suivant:

https://forums.commentcamarche.net/forum/affich-36676544-assemblage-de-classeur-excel#3

regarde ce post attentivement tout est dit!

@+ Le Pivert
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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
jujuetd63
 
ok merci

je vais tester différentes combinaisons de documents.
0
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
peut-être simplement:
Workbooks.Open Filename:= repertoire + "\" + nf
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention  
 
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
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
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
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Relis-toi!

ce n'est pas:

IncludeDocProperies:=True, _


mais

IncludeDocProperties:=True, _


il manque le t

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