Interaction fichiers xlsm et dotm, problème de contenu

Bonjour à tous, je me présente, Nicolas 32 ans je suis technicien en solution et sécurisation d'impression pour les professionnels.

J'ai récupéré dans mon travail une tache un peu complexe mais très intéressante.

Nos commerciaux travaillent sur un fichier Excel au format xlsm que j'ai créé et qui fonctionne très bien.

A partir de la il faudrait que en appuyant sur un bouton il génère automatiquement un fichier Word avec toutes les infos nécessaire.

Petite précision:

Mon fichier Excel contient un onglet nommé "Propal" contenant toutes les informations à mettre dans le Word.

Le fichier Word final sera une fusion entre plusieurs fichiers dotm contenant des signets et des tableaux contenant des signets (mais pas d'images).

J'ai déjà réalisé une bonne partie de la macro qui fonctionne bien.

le seul soucis que j'ai, c'est que lorsque je fais la fusion des fichiers dotm en utilisant "InsertAfter" je n'ai que du texte brut. Tout le reste (tableau, signet et mise en forme) disparait.

Voici une petite partie de mon code en espérant que ça vous serve

Dim AppWord As Object
    Dim Doc As Object

    openCom = Worksheets("Propal").Range("G9").Value
    openMach = Worksheets("Propal").Range("G24").Value
    openSol1 = Worksheets("Propal").Range("G38").Value
    openSol2 = Worksheets("Propal").Range("G41").Value
    openSol3 = Worksheets("Propal").Range("G44").Value
    openFonct = "Fonctionnement.dotm"
    openSolFiMach = Worksheets("Propal").Range("G59").Value

    openFin = "Fin.dotm"

'crée une instance de Word
    Set AppWord = CreateObject("Word.Application")

'Récupère le chemin de Mes Documents
    Const Cible = &H2B '\Program Files\Common
    Dim objShell As Object
    Dim objFolder As Object, objFolderItem As Object

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(Cible)
    Set objFolderItem1 = objFolder.Self
    With AppWord

        .Visible = True

    cheminCommon = objFolderItem1.Path
    chemin2 = "\ACI"
    chemin3 = "\Word"
    chemin4 = "\Images"
    chemin5 = "\machines_images"
    chemin6 = "\solution_images"
    chemin7 = "\Fiches"

    cheminACI = cheminCommon & chemin2
    cheminWord = cheminACI & chemin3
    cheminImages = cheminACI & chemin4
    cheminMachinesImages = cheminImages & chemin5
    cheminImagesSolutionImages = cheminImages & chemin6
    cheminFiches = cheminACI & chemin7
    cheminOpenCom = cheminWord & "\" & openCom
    cheminOpenMach = cheminWord & "\" & openMach
    cheminOpenSol1 = cheminWord & "\" & openSol1
    cheminOpenSol2 = cheminWord & "\" & openSol2
    cheminOpenSol3 = cheminWord & "\" & openSol3
    cheminOpenFonct = cheminWord & "\" & openFonct
    cheminOpenSolFiMach = cheminWord & "\" & openSolFiMach
    cheminOpenFin = cheminWord & "\" & openFin

'ouvre un document, ATTENTION de mettre l'extension ".doc"
    Set Doc = .Documents.Open(cheminOpenCom)
'----------------------------------------------------------------------------------------------------------------------------------------------------------
    'ouverture et insertion machine

Dim wrdMach As Object
Set wrdApp1 = CreateObject("Word.Application")
wrdApp1.Visible = False
Set wrdDoc2 = wrdApp1.Documents.Open(cheminOpenMach)
Doc.Content.InsertAfter wrdDoc2.Content
wrdApp1.Quit
'----------------------------------------------------------------------------------------------------------------------------------------------------------
    'si solution ouverture et insertion

If Worksheets("Propal").Range("G32").Value <> " " Then
    Dim wrdSol1 As Object
    Set wrdApp2 = CreateObject("Word.Application")
    wrdApp2.Visible = False
    Set wrdDoc3 = wrdApp2.Documents.Open(cheminOpenSol1)
    Doc.Content.InsertAfter wrdDoc3.Content
    wrdApp2.Quit
End If

If Worksheets("Propal").Range("G33").Value <> " " Then
    Dim wrdSol2 As Object
    Set wrdApp3 = CreateObject("Word.Application")
    wrdApp3.Visible = False
    Set wrdDoc4 = wrdApp3.Documents.Open(cheminOpenSol2)
    Doc.Content.InsertAfter wrdDoc4.Content
    wrdApp3.Quit
End If

If Worksheets("Propal").Range("G34").Value <> " " Then
    Dim wrdSol3 As Object
    Set wrdApp4 = CreateObject("Word.Application")
    wrdApp4.Visible = False
    Set wrdDoc5 = wrdApp4.Documents.Open(cheminOpenSol3)
    Doc.Content.InsertAfter wrdDoc5.Content
    wrdApp4.Quit
End If

'----------------------------------------------------------------------------------------------------------------------------------------------------------
    'ouverture et insertion fonctionnement
    Dim wrdFonct As Object
    Set wrdApp5 = CreateObject("Word.Application")
    wrdApp5.Visible = False
    Set wrdDoc6 = wrdApp5.Documents.Open(cheminOpenFonct)
    Doc.Content.InsertAfter wrdDoc6.Content
    wrdApp5.Quit

    'ouverture et insertion solution financiere machine
    Dim wrdSolFiMach As Object
    Set wrdApp6 = CreateObject("Word.Application")
    wrdApp6.Visible = False
    Set wrdDoc7 = wrdApp6.Documents.Open(cheminOpenSolFiMach)
    Doc.Content.InsertAfter wrdDoc7.Content
    wrdApp6.Quit

    'ouverture et insertion fin
    Dim wrdFin As Object
    Set wrdApp7 = CreateObject("Word.Application")
    wrdApp7.Visible = False
    Set wrdDoc8 = wrdApp7.Documents.Open(cheminOpenFin)
    Doc.Content.InsertAfter wrdDoc8.Content
    wrdApp7.Quit

Je remercie d'avance tous ceux qui qui vont prendre le temps de m'aider.

Nico

bonjour

joins ton xlsx et tes multiples dotm (bizarre ! )

simplifiés, ne mets que 3 affaires

mon premier sentiment, c'est qu'il faudrait passer à Access ou autre SGBD. Mais on va voir, tu as sans doute fait trop compliqué.

à te relire

Bonjour jmd,

Je ne peux pas te joindre le fichier xlsx car trop de données privés dedans en revanche je te joint des JPG (j'espère que tu comprendra).

Le tableau Excel comporte plusieurs pages:

xlsm

les 5 premières sont pour les commerciaux ils doivent remplir les champs.

les 2 suivantes ne s'affichent pas pour les commerciaux (pas important)

la page Listes est la base de données.

la page Propal (en pièce jointe) récupère toutes les informations nécessaires pour le remplissage de mon fichier Word.

les fichiers Word:

dotm

ils ont tous la même mise en forme (marge réduite, police d'écriture, pied de page, et entête...).

tous ces fichiers dotm comportent des signets, des tableaux et des signets dans des tableaux.

Sur chaque proposition qui sera faite il pourra y avoir 1 à 3 commerciaux 1 à 10 modèles de machine 0 à 4 solutions logiciel.

Quand j'ai commencé a faire mes tests j’étais parti dans l'optique de faire 1 fichier par possibilité (3x10x4=Trop Looooooooooong), et en cas de modification trop de travail.

j'ai quand même fait un test avec 1 fichier contenant tous les fichiers avec les signets et je récupère bien tous les champs (tout fonctionne très bien.)

A la suite de ce test j'ai donc créé les autres fichiers dotm. Mon but ouvrir le 1er puis insérer dedans le 2 eme le 3 eme ainsi de suite.

Voici un visuel du fichier à insérer après le 1er fichier dotm.

solution1

et voici comment il l’insère.

rendu

Tout ce qui est mise en forme tableau et signet a disparu. On dirait qu'il a tout mis en texte brut.

Je ne sais pas si ça va t'aider à comprendre.

Merci à toi

re

joins des fichiers anonymisés, et avec 3 colonnes et 5 lignes (aussi petits que possible pour simulation)

à te relire

Bonjour jmd

Voici les fichiers pour la simulation à mettre sur le bureau.

J’espère que ça va fonctionner.

Bonne journée

13ezged.dotm (22.81 Ko)
101com.dotm (176.92 Ko)
11classeur1.xlsm (17.54 Ko)
121mach.dotm (599.90 Ko)

Salut a tous,

Bon j'ai trouvé comment faire.

j'ai intégrer la macro au fichier dotm directement et j'appelle donc la macro depuis excel une fois que le dotm est ouvert.

Ça fonctionne très bien, mise en page ok, signets ok, images ok.

Merci à tous

ncaisson a écrit :

mise en page ok, signets ok, images ok

check-up complet effectué, mon Commandant ; tous les voyants sont au vert, RAS, l'avion peut décoller.

ici le copilote de la compagnie Air Kansas qui vous remercie de votre retour d'infos.

(en cas de problème, les caissons de dépressurisation aussi sont en bon état)

dhany

Rechercher des sujets similaires à "interaction fichiers xlsm dotm probleme contenu"