Copier un tableau Excel vers un document WORD

Bonjour à tous,

j'aimerais copier/coller un tableau Excel vers un document Word pré-existant, à une page et un endroit précis dans la feuille.

J'ai tenté quelque chose mais je vous avoue ne rien connaitre sur la rapport Excel/Word sous VBA...Pouvez-vous m'aider ?

Ci-joint mon test.

Sub TEST0

Dim DocWord As Word.Document

Dim NomDocWord As string

NomDocWord = InputBox("Merci d'indiquer le nom du document Word")

ThisWorkbook.Worksheets("01- Note de synthèse").Range("A3:F20").Copy

DocWord(NomDocWord).Range("A3:F20").Paste

End Sub

En vous remerciant,

Bonjour,

Le plus simple est de créer un signet à l'endroit où vous voulez insérer votre tableau Excel.

Si ce signet est nommé "signet1", ci-dessous exemple de code :

Sub test0()
    Dim nom_fichier As String, ext_fichier As String
    Dim wd As Object, docwd As Object, signet As Object

    '// sélection du fichier document Word
    With Application.FileDialog(msoFileDialogOpen)
        .Filters.Add "Documents", "*.doc; *.docx", 1
        If .Show = 0 Then MsgBox "Aucun fichier sélectionné": Exit Sub
        nom_fichier = .SelectedItems(1)
    End With

    '// contrôle type fichier = document Word
    ext_fichier = Right(nom_fichier, Len(nom_fichier) - InStrRev(nom_fichier, "."))
    If Not ext_fichier Like "doc*" Then MsgBox "Le fichier sélectionné n'est pas un document Word": Exit Sub

    '// ouverture fichier document Word et assignation signet
    Set wd = CreateObject("Word.Application")
    Set docwd = wd.Documents.Open(nom_fichier)
    Set signet = docwd.Bookmarks("signet1")

    '// copie plage de cellules à partir du signet
    ActiveSheet.Range("A3:F20").Copy
    signet.Range.Paste
    Application.CutCopyMode = False

    '//fermeture fichier document Word et application Word
    docwd.Close: wd.Quit

End Sub

bonjour

salut thev

suggestion : dans Word, "insérer un objet" Excel, avec ou sans liaison avec l'original.

amitiés

Merci beaucoup pour votre réponse, je ne m'attendais pas à recevoir un code déjà fonctionnel !

Cependant, lors du collage mes données ne se retranscrivent pas de la même façon. Certaines cases contiennent des icônes en fonction du numéro inscrit et lors du collage ce sont les numéros qui apparaissent. Je ne tiens pas spécialement à pouvoir modifier le tableau, pensez vous pouvoir le coller en tant qu'image pour conserver les icônes?

Edit : J'ai trouvé pour ce point => signet.Range.PasteSpecial , DataType:=wdPasteMetafilePicture

Pensez-vous qu'il soit également possible de redimensionner le collage de la plage ? J'ai essayer d'introduire

docwd.Tables(1).AutoFitBehavior wdAutoFitWindow

mais cela ne fit pas comme je le voudrais

1111 2222

Pensez-vous qu'il soit également possible de redimensionner le collage de la plage ?

Essayer de jouer sur le pourcentage en largeur. Réduction a priori de moitié avec ces instructions :

    With docwd.Tables(1)
        .PreferredWidthType = 2  'largeur en pourcentage
        .PreferredWidth = 50
    End With

Après, vous pouvez jouer sur la hauteur des lignes, la largeur des colonnes et sur la police des caractères.

Pensez-vous qu'il soit également possible de redimensionner le collage de la plage ?

Essayer de jouer sur le pourcentage en largeur. Réduction a priori de moitié avec ces instructions :

    With docwd.Tables(1)
        .PreferredWidthType = 2  'largeur en pourcentage
        .PreferredWidth = 50
    End With

Après, vous pouvez jouer sur la hauteur des lignes, la largeur des colonnes et sur la police des caractères.

Comme j'ai coller le tableau en tant qu'image j'ai essayé

With docwd.InlineShapes(2)

.PreferredWidthType = 2

.PreferredWidth = 50

Mais on dirait bien que cette propriété ne peut pas s'appliquer sur les images et est propre aux objets tableaux.

J'ai aussi essayé :

With docwd.InlineShapes(2).Width = 2

End With

mais rien n'a changé

Pour une image, il faut utiliser ces propriétés :

    With docwd.InlineShapes(2)
        .LockAspectRatio = msoTrue    'pour ne pas déformer l'image
        .ScaleHeight = 50
    End With

    With docwd.InlineShapes(2)
        .LockAspectRatio = msoTrue    'pour ne pas déformer l'image
        .ScaleWidth = 50
    End With

Pour une image, il faut utiliser ces propriétés :

    With docwd.InlineShapes(2)
        .LockAspectRatio = msoTrue    'pour ne pas déformer l'image
        .ScaleHeight = 50
    End With

    With docwd.InlineShapes(2)
        .LockAspectRatio = msoTrue    'pour ne pas déformer l'image
        .ScaleWidth = 50
    End With

La macro marche, pas d'erreur qui s'affiche mais elle ne fait rien sur l'image

La macro marche, pas d'erreur qui s'affiche mais elle ne fait rien sur l'image

Elle agit sur la forme insérée n°2 "docwd.InlineShapes(2)" . Est-ce bien celle qui contient votre image ?

Qu'y a t-il dans la forme insérée n°1 "docwd.InlineShapes(1)" ??

La propriété docwd.InlineShapes(1).type vous donne le type d'objet inséré.

La macro marche, pas d'erreur qui s'affiche mais elle ne fait rien sur l'image

Elle agit sur la forme insérée n°2 "docwd.InlineShapes(2)" . Est-ce bien celle qui contient votre image ?

Qu'y a t-il dans la forme insérée n°1 "docwd.InlineShapes(1)" ??

La propriété docwd.InlineShapes(1).type vous donne le type d'objet inséré.

Oui j'ai bien une forme insérée n°1 mais ce n'est pas celle ci qui m'intéresse.

Mon but est bien de modifier la forme insérée n°2, pas de soucis de ce côté là.

Quand je change le nom par docwd.InlineShapes(1) la première image change bien de taille.. Je ne comprend pas pourquoi cela ne marche pas sur la deuxième ...

Avec le type de collage que vous avez fait, il s'agit simplement d'une forme et non d'une forme insérée

La collection concernée est donc "Shapes" et non "InlineShapes" :

    
    With ActiveDocument.Shapes(1)
        .LockAspectRatio = msoTrue      'pour ne pas déformer l'image
        .ScaleWidth 0.5, msoTrue        'facteur de réduction = 0,5
    End With

With ActiveDocument.Shapes(1)

[/code]

Cette erreur s'affiche pour cette ligne

Je ne pense donc pas que ce soit Shapes que je dois utiliser ..

Merci malgré tout pour votre aide, si le problème est bien lié à la désignation de l'image je sais au moins vers où chercher!

Je continue de tester des hypothèses ~

1212

Cette erreur s'affiche pour cette ligne

Je ne pense donc pas que ce soit Shapes que je dois utiliser ..

C'est curieux car en reprenant votre type de collage, je trouve l'image dans la collection "Shapes".

Cette erreur s'affiche pour cette ligne

Je ne pense donc pas que ce soit Shapes que je dois utiliser ..

C'est curieux car en reprenant votre type de collage, je trouve l'image dans la collection "Shapes".

Comment trouver la bibliothèque des objects Shapes ?

Je pense qu'il serait nécessaire de nommer chaque object shapes que j'introduis pour pouvoir les spécifier dans la commande.

Comme

docwd.Shapes("object 17")

Comment trouver la bibliothèque des objects Shapes ?

D'abord une petite rectification de vocabulaire. Il s'agit de la collection des objets Shapes présents dans le document. Une collection est dynamique car elle se rapporte aux objets stockés en mémoire. Une bibliothèque se rapporte à des classes VBA et est stockée dans votre PC sur l'unité C.

ci -dessous exemple de code :

Sub test0()
    Dim nom_fichier As String, ext_fichier As String
    Dim wd As Object, docwd As Object, signet As Object
    Dim forme As Object

    '// sélection du fichier document Word
    With Application.FileDialog(msoFileDialogOpen)
        '.InitialFileName
        .Filters.Add "Documents", "*.doc; *.docx", 1
        If .Show = 0 Then MsgBox "Aucun fichier sélectionné": Exit Sub
        nom_fichier = .SelectedItems(1)
    End With

    '// contrôle ouverture fichier document Word
    ext_fichier = Right(nom_fichier, Len(nom_fichier) - InStrRev(nom_fichier, "."))
    If Not ext_fichier Like "doc*" Then MsgBox "Le fichier sélectionné n'est pas un document Word": Exit Sub

    '// ouverture fichier document Word et assignation signet
    Set wd = CreateObject("Word.Application")
    Set docwd = wd.Documents.Open(nom_fichier)
    Set signet = docwd.Bookmarks("signet1")

    '// copie plage de cellules à partir du signet
    ActiveSheet.Range("A3:F20").Copy
    signet.Range.PasteSpecial , DataType:=wdPasteMetafilePicture
    Application.CutCopyMode = False

    '// détection images dans la collection Shapes
    For Each forme In docwd.Shapes
        If forme.Type = 13 Then MsgBox forme.Name    'forme de type image
    Next forme

    '//fermeture fichier document Word et application Word
    docwd.Close: wd.Quit

End Sub
Rechercher des sujets similaires à "copier tableau document word"