[Macro][VBA][Excel][Word] Dernier Document Word ouvert

Résolu
Izetula -  
 Izetula -
Bonjour,

Je débute en VBA et j'ai un problème que je n'arrive pas à résoudre.

J'ai deux documents ouverts : un Excel et un Word (dont je ne connais pas les noms)

Je dois copier des cellules du fichier Excel ouvert (actif) dans des cellules des tableaux du fichier Word ouvert.

Voici la macro créée dans le fichier Excel :

Sub Copie_recap_cibles()
'
' Copie_recap_cibles Macro
'

For i = 0 To 41
    i_ligne_excel = (i * 3) + 5 
    i_tabl_word = i + 5 
    
    If ActiveWorkbook.Sheets(5).Cells(i_ligne_excel, 3) <> "" Then
        Application.Documents(Documents.Count).Tables(i_tabl_word).Rows.Add
        Application.Documents(Documents.Count).Tables(i_tabl_word).Columns(2).Cells(Cells.Count).Range.Text = ActiveWorkbook.Sheets(5).Cells(i_ligne_excel, 1)
        Application.Documents(Documents.Count).Tables(i_tabl_word).Columns(3).Cells(Cells.Count).Range.Text = ActiveWorkbook.Sheets(5).Cells(i_ligne_excel, 2)
        Application.Documents(Documents.Count).Tables(i_tabl_word).Columns(4).Cells(Cells.Count).Range.Text = ActiveWorkbook.Sheets(5).Cells(i_ligne_excel, 3)
    End If
    Next
    
'
End Sub


Ca ne fonctionne pas, on me dit "objet requis".

Avez vous une solution ?

Merci d'avance,

Izetula

1 réponse

  1. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    Bonjour,

    1) Application correspond à l'application Excel et non à celle de Word. Documents n'en est donc pas une propriété.

    2) il faut référencer l'instance de l'application Word en cours d'exécution. Pour cela, le seul moyen est de connaître le nom du fichier Word chargé en mémoire. Si ce nom était par exemple , "C:\document1.docx", les instructions à passer seraient les suivantes :
        
    Dim Wd As Word.Application
    Set Wd = GetObject("C:\document1.docx").Application

    If ActiveWorkbook.Sheets(5).Cells(i_ligne_excel, 3) <> "" Then
    Wd.Documents(Documents.Count).Tables(i_tabl_word).Rows.Add
    ....

    Si tu ne connais pas le nom du fichier Word, il faut concevoir la solution autrement.
    0
    1. Izetula
       
      Merci pour cette réponse.

      Finalement j'ai écris ça, qui fonctionne :

      Sub Copie_recap_cibles()

      Dim num_derniere_ligne As Integer

      For i = 0 To 41
      i_ligne_excel = (i * 3) + 5
      i_tabl_word = i + 5

      If ActiveWorkbook.Sheets(5).Cells(i_ligne_excel, 3) <> "" Then
      Word.Application.Documents(Documents.Count).Tables(i_tabl_word).Rows.Add

      num_derniere_ligne = Word.Application.Documents(Documents.Count).Tables(i_tabl_word).Columns(1).Cells.Count

      Word.Application.Documents(Documents.Count).Tables(i_tabl_word).Columns(2).Cells(num_derniere_ligne).Range.Text = ActiveWorkbook.Sheets(5).Cells(i_ligne_excel, 1)

      End If
      Next

      End Sub


      Un des problèmes rencontrés et qu'Excel ne connaissait pas Word.Application. En fait j'ai du sélectionner une référence supplémentaire dans Outils -> Référence -> Microsoft Word 15.0.

      Ce code fonctionne seulement si le fichier Word de destination est le dernier à avoir été ouvert. Mais je ne peux pas me servir du nom des fichiers (ils changent toutes les semaines).

      En espérant pouvoir aider d'autres personnes !

      Cordialement,

      Izetula
      0