vba importer fichier excel dans fichier Word

CHTING

XLDnaute Junior
Bonjour à toutes et à tous,

Je souhaite pouvoir importer un fichier excel en word avec une macro.
L'objectif est de pouvoir copier coller un fichier excel avec sa mise en page (panorama) dans un fichier word.

J'ai trouvé cette macro qui me permet de copier coller dans un nouveau fichier word .
C'est bien pour du texte mais pour des tableaux crées dans Excel c'est plus problématique puisque cette macro ne prend pas en compte la mise en page Excel.


Sub Excel_Word()

Dim oWdApp As Object 'Word.Application
Dim oWdDoc As Object 'Word.Document

'Lancer une instance Word
Set oWdApp = CreateObject("Word.Application")

'Ouvrir un nouveau document
Set oWdDoc = oWdApp.Documents.Add

'Rendre Word visible
oWdApp.Visible = True

'Copier une plage depuis Excel
ActiveSheet.Range("B1:H230").Copy

'Coller la plage dans Word
oWdApp.Selection.Paste

Application.CutCopyMode = False

End Sub



Existe-t-il une solution pour conserver la mise en page excel ?

Merci de votre aide.
Cordialement

Merci de
 

Yaloo

XLDnaute Barbatruc
Re : vba importer fichier excel dans fichier Word

Bonsoir Chting,

Avec cette macro :

VB:
Dim DocWord As Word.Document
Dim AppWord As Word.Application
 
Set AppWord = New Word.Application
AppWord.Visible = True
Set DocWord = AppWord.Documents.Add
 
Range("A1:H10").Copy
 
AppWord.Selection.Paste
DocWord.Tables(1).AutoFitBehavior wdAutoFitWindow
 
Application.CutCopyMode = False

Tirée d'une des nombreuses interventions de SilkyRoad

A te relire

Martial
 

CHTING

XLDnaute Junior
Re : vba importer fichier excel dans fichier Word

Bonjour Martial
merci de ta réponse.
J'ai testé et ça ne marche pas
"erreur de compilation : type défini par l'utilisateur non défini" et je ne comprend pas pourquoi :(


J'ai donc essayé de rajouter à ma macro actuelle la ligne "DocWord.Tables(1).AutoFitBehavior wdAutoFitWindow" modifiée en "oWdDoc.Tables(1).AutoFitBehavior wdAutoFitWindow"
Ca donne rien de plus que l'extraction habituelle (sans copie de la mise en forme) :
Sub Excel_Word()

Dim oWdApp As Object 'Word.Application
Dim oWdDoc As Object 'Word.Document

'Lancer une instance Word
Set oWdApp = CreateObject("Word.Application")

'Ouvrir un nouveau document
Set oWdDoc = oWdApp.Documents.Add

'Rendre Word visible
oWdApp.Visible = True

'Copier une plage depuis Excel
ActiveSheet.Range("B1:N230").Copy

'Coller la plage dans Word
oWdApp.Selection.Paste
oWdDoc.Tables(1).AutoFitBehavior wdAutoFitWindow

Application.CutCopyMode = False

End Sub

J'ai donc adapté le format de mes données excel (reduction des colonnes, taille de police, ...) pour que cela rentre un peu mieux dans word mais je n'arrive toujours pas à mettre word en format "panorama".
lorsque je le fait manuellement, le rendu me va même si je préférerai conserver la mise en page excel :).

merci de votre aide.

Cordialement.
 

Yaloo

XLDnaute Barbatruc
Re : vba importer fichier excel dans fichier Word

Bonjour Chting,

J'avais lu un peu vite ta demande, tu veux garder la mise en forme de ton tableau.

Veux-tu pouvoir les modifier par la suite dans Word ? Ou est-ce qu'une "image" du tableau suffirait ?

A te relire

Martial
 

Yaloo

XLDnaute Barbatruc
Re : vba importer fichier excel dans fichier Word

Re,

Pourrais-tu mettre un fichier type Excel, un fichier Word avec et sans les données Excel insérées (ne pas oublier d'enlever les données confidentielles) ?
Le tableau comprend-il toujours le même nombre de lignes et colonnes ?

A te relire

Martial
 

CHTING

XLDnaute Junior
Re : vba importer fichier excel dans fichier Word

Re,

Ci-joint les exemples que tu me demandes.
Les tableaux que je veux transferer dans word comprennent toujours le même nombre de colonnes mais jamais le même nombres de lignes.
de plus il peut y avoir un ou plusieurs tableaux dans le même fichier.
Le fichier word est le résultat que j'obtiens actuellement (voir macro dans le fichier excel en module 1). Je n'ai pas de fichier vierge puisque j'ouvre un nouveau fichier à chaque fois.
Si je mets word en panorama, j'ai un résultat correcte. J'ai essayé d'intégrer ".PageSetup.Orientation = wdOrientLandscape" dans ma macro pour orienter word mais ça ne fonctionne pas.

Merci de ton aide.

Cordialement
 

Pièces jointes

  • testexceldownload.xlsm
    18.4 KB · Affichages: 80
  • testexceldownload.docx
    43.9 KB · Affichages: 62
  • testexceldownload.xlsm
    18.4 KB · Affichages: 69
  • testexceldownload.xlsm
    18.4 KB · Affichages: 76

Yaloo

XLDnaute Barbatruc
Re : vba importer fichier excel dans fichier Word

Re,

Chez moi ça fonctionne avec cette macro, il ne faut pas oublier de cocher la référence Microsoft Word xx.x Object Library

VB:
Sub Excel_Word()
 
Dim oWdApp As Word.Application 'et non Object
Dim oWdDoc As Word.Document 'et non Object
 
'Lancer une instance Word
 Set oWdApp = CreateObject("Word.Application")
 
'Ouvrir un nouveau document
 Set oWdDoc = oWdApp.Documents.Add
 
'Rendre Word visible
 oWdApp.Visible = True
 
'Copier une plage depuis Excel
 ActiveSheet.Range("B1:N230").Copy
 
'Coller la plage dans Word
oWdApp.Selection.Paste
oWdApp.Selection.Tables(1).AutoFitBehavior (wdAutoFitWindow)
 
 Application.CutCopyMode = False
 
End Sub

Si tu ne coches pas la référence et que tu mets Dim oWdApp As Object au lieu de Dim oWdApp As Word.Application lorsque tu indiques une commande Word celle-ci n'est pas reconnue.

A+

Martial
 

CHTING

XLDnaute Junior
Re : vba importer fichier excel dans fichier Word

Merci Martial,

Effectivemeny ça marche mieux avec l'activation de la réference :).
Dérnière question : Est ce que tu sais mettre en mode panorama word à travers Excel ?

Cordialement
 

Yaloo

XLDnaute Barbatruc
Re : vba importer fichier excel dans fichier Word

Bonjour Chting,

Voici les lignes te permettant de mettre en paysage on en portait :

VB:
  If oWdApp.Selection.PageSetup.Orientation = wdOrientPortrait Then
    oWdApp.Selection.PageSetup.Orientation = wdOrientLandscape
  Else
    oWdApp.Selection.PageSetup.Orientation = wdOrientPortrait
  End If

Pour trouver les lignes de codes qui vont bien dans Word.
Une fois que tu as lancé ta macro et que tu te trouves dans Word, tu fais enregistrement d'une macro puis tu fais ce que tu veux, tu arrêtes l'enregistrement, ensuite Alt + F11 pour arriver dans Visual Basic Editor, tu vois alors les lignes de codes à utiliser.

Tu peux ainsi avoir :

VB:
ActiveWindow.ActivePane.VerticalPercentScrolled = 0

Il suffit d'ajouter oWdApp. pour que cela soit utilisé dans ton document Word. Cette ligne de code te permet de remonter à la ligne 1 de ton document.

Enfin le mieux serait plutôt de copier le bon nombre de ligne dans Excel, ça c'est une autre histoire :)

A te relire

Martial
 

Yaloo

XLDnaute Barbatruc
Re : vba importer fichier excel dans fichier Word

Re,

Avec cette macro, la plage copiée est la plage contenant uniquement les données (il suffit avoir définit une Plage tablo dans "Gestionnaire de Noms")

VB:
Sub Excel_Word()
  
Dim oWdApp As Word.Application
Dim oWdDoc As Word.Document
'Lancer une instance Word
Set oWdApp = CreateObject("Word.Application")
  
'Ouvrir un nouveau document
Set oWdDoc = oWdApp.Documents.Add
'Rendre Word visible
oWdApp.Visible = True

  If oWdApp.Selection.PageSetup.Orientation = wdOrientPortrait Then
    oWdApp.Selection.PageSetup.Orientation = wdOrientLandscape
  Else
    oWdApp.Selection.PageSetup.Orientation = wdOrientPortrait
  End If
  
'Détermine la plage contenant des valeurs
ld = [tablo].Find("*", LookIn:=xlValues, _
    SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
cd = [tablo].Find("*", LookIn:=xlValues, _
    SearchOrder:=xlByColumns, SearchDirection:=xlNext).Column
lf = [tablo].Find("*", LookIn:=xlValues, _
    SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
cf = [tablo].Find("*", LookIn:=xlValues, _
    SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

'Copier une plage depuis Excel
ActiveSheet.Range(Cells(ld, cd), Cells(lf, cf)).Copy
  
'Coller la plage dans Word
oWdApp.Selection.Paste
oWdApp.ActiveWindow.ActivePane.VerticalPercentScrolled = 0
oWdApp.Selection.Tables(1).AutoFitBehavior AutoFitWindow

Application.CutCopyMode = False
  
End Sub

A+

Martial
 

Pièces jointes

  • testexceldownload.xlsm
    20.8 KB · Affichages: 83
  • testexceldownload.xlsm
    20.8 KB · Affichages: 83
  • testexceldownload.xlsm
    20.8 KB · Affichages: 95

Gm22

XLDnaute Nouveau
Re : vba importer fichier excel dans fichier Word

Bonsoir Chting,

Avec cette macro :

VB:
Dim DocWord As Word.Document
Dim AppWord As Word.Application

Set AppWord = New Word.Application
AppWord.Visible = True
Set DocWord = AppWord.Documents.Add

Range("A1:H10").Copy

AppWord.Selection.Paste
DocWord.Tables(1).AutoFitBehavior wdAutoFitWindow

Application.CutCopyMode = False

Tirée d'une des nombreuses interventions de SilkyRoad

A te relire

Martial
Bonjour
Re : vba importer fichier excel dans fichier Word

Re,

Avec cette macro, la plage copiée est la plage contenant uniquement les données (il suffit avoir définit une Plage tablo dans "Gestionnaire de Noms")

VB:
Sub Excel_Word()
 
Dim oWdApp As Word.Application
Dim oWdDoc As Word.Document
'Lancer une instance Word
Set oWdApp = CreateObject("Word.Application")
 
'Ouvrir un nouveau document
Set oWdDoc = oWdApp.Documents.Add
'Rendre Word visible
oWdApp.Visible = True

  If oWdApp.Selection.PageSetup.Orientation = wdOrientPortrait Then
    oWdApp.Selection.PageSetup.Orientation = wdOrientLandscape
  Else
    oWdApp.Selection.PageSetup.Orientation = wdOrientPortrait
  End If
 
'Détermine la plage contenant des valeurs
ld = [tablo].Find("*", LookIn:=xlValues, _
    SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
cd = [tablo].Find("*", LookIn:=xlValues, _
    SearchOrder:=xlByColumns, SearchDirection:=xlNext).Column
lf = [tablo].Find("*", LookIn:=xlValues, _
    SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
cf = [tablo].Find("*", LookIn:=xlValues, _
    SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

'Copier une plage depuis Excel
ActiveSheet.Range(Cells(ld, cd), Cells(lf, cf)).Copy
 
'Coller la plage dans Word
oWdApp.Selection.Paste
oWdApp.ActiveWindow.ActivePane.VerticalPercentScrolled = 0
oWdApp.Selection.Tables(1).AutoFitBehavior AutoFitWindow

Application.CutCopyMode = False
 
End Sub

A+

Martial
Bonjour Martial, il me fait erreur d'objet comment définir cet Objet
 

Gm22

XLDnaute Nouveau
Bonjour Martial,
je ne m'est connais pas vraiment dans VBA, pour ajouter cet objet. sinon s'il y a sur la page Excel il y a en entête, est ce qu'il y a un moyen d'inclure dans l'importation. J'aimerai aussi savoir si c'est possible que ça soit sous forme de texte pas sous forme d'un tableau. Car, c'est des lettres que je vous envoyer avec des textes différent que j'ai dans une base de donné.
Sinon, merci beaucoup pour votre aide
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof