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

Résolu/Fermé
Izetula - Modifié par Izetula le 18/08/2016 à 11:26
 Izetula - 18 août 2016 à 15:57
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
A voir également:

1 réponse

thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681
Modifié par thev le 18/08/2016 à 15:53
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
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