[Macro][VBA][Excel][Word] Dernier Document Word ouvert
Résolu
Izetula
-
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 :
Ca ne fonctionne pas, on me dit "objet requis".
Avez vous une solution ?
Merci d'avance,
Izetula
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
-
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.-
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
-