Copier un tableau Excel vers un document WORD Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
S
SNKG
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 4 juillet 2019
Version d'Excel : 2013

Message par SNKG » 18 juillet 2019, 11:28

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 ? :lole:
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,
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'561
Appréciations reçues : 215
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 18 juillet 2019, 13:06

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
Modifié en dernier par thev le 18 juillet 2019, 13:10, modifié 2 fois.
1 membre du forum aime ce message.
j
jmd
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'603
Appréciations reçues : 251
Inscrit le : 8 décembre 2007
Version d'Excel : 365 + PowerBI

Message par jmd » 18 juillet 2019, 13:09

bonjour

salut thev

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

amitiés
Apprenez les fonctions d'Excel.
Exemple "Mettre sous forme de tableau", TCD, "Récupérer des données".
Apprendre les fonctionnalités "récentes".
S
SNKG
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 4 juillet 2019
Version d'Excel : 2013

Message par SNKG » 18 juillet 2019, 14:21

thev a écrit :
18 juillet 2019, 13:06
Merci beaucoup pour votre réponse, je ne m'attendais pas à recevoir un code déjà fonctionnel ! :mrgreen:

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 :|
2222.JPG
2222.JPG (11.33 Kio) Vu 159 fois
1111.JPG
1111.JPG (11.89 Kio) Vu 159 fois
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'561
Appréciations reçues : 215
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 18 juillet 2019, 15:36

SNKG a écrit :
18 juillet 2019, 14:21
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.
S
SNKG
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 4 juillet 2019
Version d'Excel : 2013

Message par SNKG » 18 juillet 2019, 16:35

thev a écrit :
18 juillet 2019, 15:36
SNKG a écrit :
18 juillet 2019, 14:21
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é
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'561
Appréciations reçues : 215
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 18 juillet 2019, 17:01

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
S
SNKG
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 4 juillet 2019
Version d'Excel : 2013

Message par SNKG » 18 juillet 2019, 17:09

thev a écrit :
18 juillet 2019, 17:01
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 ::(
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'561
Appréciations reçues : 215
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 18 juillet 2019, 17:32

SNKG a écrit :
18 juillet 2019, 17:09
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é.
S
SNKG
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 4 juillet 2019
Version d'Excel : 2013

Message par SNKG » 19 juillet 2019, 09:40

thev a écrit :
18 juillet 2019, 17:32
SNKG a écrit :
18 juillet 2019, 17:09
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 ... ::(
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message