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.QuitJe 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:
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:
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.
et voici comment il l’insère.
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
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