Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 Transfert tableau structuré EXCEL à un endroit précis de WORD

BARNS

XLDnaute Junior
Bonjour à tous,

Je sollicite vos lumières pour avancer sur un code VBA permettant l'échange d'information entre Excel et Microsoft Word. (je pense que ce genre d'outils pourra servir à d'autres, j'ai anonymisé les informations sur les deux fichiers en PJ WORD et BDD EXCEL )

Le contexte : je dois créer un outil excel qui soit capable de générer des offres sous word à partir d'un ensemble de données.

Les différents types de données :
– les tables, elles ont pour objectifs selon le besoin d'être filtrées pour après récupéré certaines données filtrer pour les envoyer sous WORD (feuille : "SOLUTION", "REF_ECF")
– les champs remplis de manière spécifique permettront aussi de compléter des champs sous word.

Pour l'instant j'ai réussi à :
– pouvoir remplir des champs word via excel (feuille : "CADRAGE") cf macro EXT_CHAMP
– filtrer et extraire les éléments d'un tableau (feuille : "REF") cf macro EXT_REF vers une autre feuille REF_EXT

Mais je n'arrive pas à prendre le tableau généré et l'envoyer dans word tentative avec la macro "EXT_TAB_WORD" et c'est sur ce dernier point que j'aimerai avoir de l'aide si possible.

L'objectif est d'envoyer le tableau "BDD_REF_EXT" de la feuille "REF_ECF_EXT" vers le word après la phrase "Silicium et nostradae cubitus."

J'ai différents messages d'erreur, je ne sais pas si le code arrive à :
– sélectionner l'objet tab "BDD_REF_EXT" et le copier ;
– positionner le curseur.


Le code en question :



Merci pour votre précieuse aide,

 

Pièces jointes

  • BDD EXCEL.xlsm
    145 KB · Affichages: 7
  • WORD.docx
    378 KB · Affichages: 6
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour BARNS, le forum,

Voici une solution, si j'ai bien compris ce qu'il faut faire :
VB:
Sub Coller_dans_Word()
Dim Wapp As Object, texte$, L%, Wdoc As Object, i&, j&
On Error Resume Next
Set Wapp = GetObject(, "Word.Application")
On Error GoTo 0
If Wapp Is Nothing Then MsgBox "Ouvrez le document Word": Exit Sub
texte = "Silicium et nostradae cubitus."
L = Len(texte)
Set Wdoc = Wapp.ActiveDocument
For i = 0 To Len(Wdoc.Content)
    If Wdoc.Range(i, i + L) = texte Then Exit For
Next i
If i > Len(Wdoc.Content) Then MsgBox "Texte non trouvé !": Exit Sub
For j = 1 To Wdoc.Tables.Count
    If Wdoc.Tables(j).Range.Start > i Then
        Wdoc.Tables(j).Select
        Wdoc.Tables(j).Delete
        [Tableau5].ListObject.Range.Copy 'copie le tableau structuré
        Wapp.Selection.Paste 'coller
        Application.CutCopyMode = 0
        Exit For
    End If
Next j
Wdoc.Range(0, 0).Select
AppActivate Wapp.Caption 'facultatif, active Word
End Sub
La copie du tableau Excel remplace le tableau Word situé sous le texte.

A+
 

Pièces jointes

  • BDD EXCEL.xlsm
    149.8 KB · Affichages: 2
  • WORD.docx
    378 KB · Affichages: 11
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour le forum,

J'ai compris, la fenêtre Word était réduite, il faut l'agrandir :
VB:
AppActivate Wapp.Caption, True 'facultatif, active Word
Wdoc.ActiveWindow.WindowState = 1 'wdWindowStateMaximize
A+
 

Pièces jointes

  • BDD EXCEL.xlsm
    150.3 KB · Affichages: 2

job75

XLDnaute Barbatruc
Pour terminer voici une solution avec l'objet Find :
VB:
Sub Coller_dans_Word()
Dim Wapp As Object, texte$, Wdoc As Object, tbl As Object
On Error Resume Next
Set Wapp = GetObject(, "Word.Application")
On Error GoTo 0
If Wapp Is Nothing Then MsgBox "Ouvrez le document Word": Exit Sub
texte = "Silicium et nostradae cubitus."
Set Wdoc = Wapp.ActiveDocument
Wdoc.Content.Select
With Wapp.Selection.Find
    .ClearFormatting
    If Not .Execute(FindText:=texte) Then MsgBox "Texte non trouvé !": Exit Sub
End With
For Each tbl In Wdoc.Tables
    If tbl.Range.Start > Wapp.Selection.Start Then
        tbl.Select
        tbl.Delete
        [Tableau5].ListObject.Range.Copy 'copie le tableau structuré
        Wapp.Selection.Paste 'coller
        Application.CutCopyMode = 0
        Exit For
    End If
Next tbl
Wdoc.Range(0, 0).Select
AppActivate Wapp.Caption, True 'facultatif, active Word
Wdoc.ActiveWindow.WindowState = 1 'wdWindowStateMaximize
End Sub
 

Pièces jointes

  • BDD EXCEL.xlsm
    150.3 KB · Affichages: 14
  • WORD.docx
    378 KB · Affichages: 12

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…