Doc Word piloté depuis Excel
Bonjour,
Je me casse la tête en vain depuis plusieurs jours. Je n'ai plus qu'à espérer en vous . Rien trouvé sur la toile. Voici mon Pb avec Office famille Excel2016 : Une macro Excel appelle plusieurs fois (avec l'argument Cpt) la macro "Rapport" dont le code est joint. Cette dernière est censée piloter un document Word et y écrire à chaque appel . J'ai remplacé le travail en le symbolisant par la simple écriture d'un "bravo" indexé. Avec Cpt = 1 ça fonctionne bien : bravo1. Avec Cpt = 2 ça coince : erreur 432 nom fichier ou classe introuvable /automation. (Il n'est pas impératif que le doc1 soit enregistré chaque fois mais seulement au bout de Cpt = 5 par exemple). j'ai pensé à une instance unique de Word pour utiliser seulement CreateObject sans particulariser le code 1° tour, mais j'ai pas le niveau pour comprendre quoi faire avec seulement l'aide MS.
Sub Rapport()
Dim AppWD As Word.Application
Dim docwd As Word.Document
'1° appel
If Cpt = 1 Then
Set AppWD = CreateObject("Word.Application")
AppWD.Visible = True
Set docwd = AppWD.Documents.Add
GoTo Ecrire
End If
'Autres appels
Set AppWD = GetObject("D:\Doc1.docx", "Word.Application")
AppWD.Visible = True
Ecrire:
AppWD.Selection.TypeParagraph
AppWD.Selection.TypeText Text:="bravo" & Cpt
AppWD.Selection.TypeParagraph
docwd.SaveAs "D:\Doc1.docx"
'sortie
AppWD.Documents("D:\Doc1.docx").Close
AppWD.Quit
Set AppWD = Nothing
Set docwd = Nothing
End Sub
Bonjour Cyber Topaze
Pour appeler un procédure avec argument, il faut que celle-ci soit configurer comme tel
Voici une possibilité
Sub Rapport(Cpt As Integer)
Dim AppWd As Object 'Word.Application
Dim DocWd As Object 'Word.Document
Dim sPath As String, sFic As String
' Définir le chemin d'accès et le nom du fichier souhaité
sPath = ThisWorkbook.Path & "\"
sFic = "Essai.docx"
' Créer une instance Word
Set AppWd = CreateObject("Word.Application")
AppWd.Visible = True
'1° appel
If Cpt = 1 Then
Set DocWd = AppWd.Documents.Add
DocWd.SaveAs2 Filename:=sPath & sFic
Else
Set DocWd = AppWd.Documents.Open(sPath & sFic)
End If
AppWd.Selection.TypeParagraph
AppWd.Selection.TypeText Text:="bravo" & Cpt
AppWd.Selection.TypeParagraph
DocWd.Save
' Fermer le document en l'enregistrant
DocWd.Close Savechanges:=True
' Quitter Word
AppWd.Quit
Set AppWd = Nothing
Set DocWd = Nothing
End Sub
A+
Bonjour Bruno M45
Merci pour ce retour on ne peut plus rapide (Tu te lèves tôt ! )
Et doublement merci pour le contenu: ça tourne impeccable ! Je suis très content. Et dire que j'ai cherché si longtemps.
Pour tester mon code séparément du projet, je trouvais plus simple de supprimer l'argument en rajoutant une première ligne Rpt = 1 puis Rpt = 2
j'essaye de mettre ce problème en résolu.
Chapeau l'expert !