Application.SaveAs Filename avec Word depuis Excel
Bonjour à tous,
j'ai ici une macro que je fais évoluer depuis longtemps.
Le but est de copier un tableau Excel dans un document Word préexistant (chemin),
et c'est à la fin que je reste coincé depuis plusieurs jours...
Je souhaite que le nom par défaut apparaisant dans la boite de dialogue "wordapp.FileDialog(msoFileDialogSaveAs)" .
Cependant j'ai un message d'erreur à la ligne Application.SaveAs Filename:=.SelectedItems(1) & "\" & VariableNom .
"Erreur 438: propriété ou méthode non gérée par cet objet"
Quelqu'un a t'il une piste?
Merci.
Sub Fichierderef()
'Obtention du chemin d'accs ˆ comparer
ThisWorkbook.Sheets("En tête compte rendu").Range("i1") = Application.GetOpenFilename(, , "Veuillez choisir le fichier vierge pour compte rendu")
End Sub
Sub ouvrirdoc()
'Attribution de variables
Dim Chemin As String
Dim test As String
Dim Numb As Integer
Dim REP As FileDialog
Dim VariableNom As String
'Attribution d'une valeur de base aux variables
Chemin = Sheets("En tête compte rendu").Range("i1")
Numb = ActiveCell.Row - 1
VariableNom = Sheets("Récapitulatif").Cells(Numb + 1, 5) & " " & Sheets("Récapitulatif").Cells(Numb + 1, 6) & " " & "PSY-CONF" & ".doc"
'Test presence document Compte rendu vierge"
If Sheets("En tête compte rendu").Range("i1") = "" Or Sheets("En tête compte rendu").Range("i1") = Faux Or Dir(Chemin) = "" Then
MsgBox "Veuillez assigner un modèle de compte rendu Word.", vbInformation
ThisWorkbook.Sheets("En tête compte rendu").Range("i1") = Application.GetOpenFilename(, , "Veuillez choisir le fichier vierge pour compte rendu")
If ThisWorkbook.Sheets("En tête compte rendu").Range("i1") = False Then
Exit Sub
End If
End If
'Désactivation rafraichissement d'écran
screenupdate = False
'Attribution de la nouvelle valeure aux variables
Chemin = Sheets("En tête compte rendu").Range("i1")
'CopierCompteRendu et retour sur onglet Récapitulatif
Sheets("En tête compte rendu").Range("A1:C21").Copy
'Ouverture du fichier word
Set wordapp = CreateObject("word.Application")
wordapp.Visible = True
wordapp.Documents.Open Chemin
wordapp.ActiveWindow.ActivePane.VerticalPercentScrolled = 1
'Sélection de l'application, de tout le contenu, et collage du contenu Excel
With wordapp.Selection
.WholeStory
.Select
.Paste
End With
'Word apparait au premier plan et le document est présenté à partir du haut de page
With wordapp
.Activate
.ActiveWindow.ActivePane.VerticalPercentScrolled = 1
'Apparition dans Word d'une boite de dialogue d'enregistrement ET nom par défaut
Set REP = wordapp.FileDialog(msoFileDialogSaveAs)
With REP
.AllowMultiSelect = False
.InitialFileName = VariableNom
If .Show = True Then
wordapp.SaveAs Filename:=.SelectedItems(1)
End If
End With
'En arrière fond, Excel retourne à l'onglet "Récapitulatif"
Sheets("Récapitulatif").Activate
'Boite de dialogue pour enregistrer le document automatiquement avec le nom
End With
End SubBonjour,
modifie l'ordre des méthodes appelées dans fileDialog, dans ton code tu donnes le nom initial après l'affichage de la boite de dialogue.
With wordapp.FileDialog(msoFileDialogSaveAs)
.InitialFileName = "Bubu"
.Show
End WithMerci de cette proposition.
je rencontre à présent ce problème que ça n'enregistre pas.
J'ai donc choisi la méthode consistant à enregistrer la valeur de la MSOFileDialog dans une variable puis d'ffectuer un application.saveas. (code mis à jour dans le premier post: je sais ça fait désordre, désolé).
Cependant, impossible de me dépétrer avec la ligne wordapp.SaveAs Filename:=.SelectedItems(1)
Elle génère une erreur.
Si tu as une idée, je suis preneur.
merci de ton aide
Bonsoir,
essaie ceci
Sub ouvrirdoc()
'Attribution de variables
Dim Chemin As String
Dim test As String
Dim Numb As Integer
Dim REP As FileDialog
Dim VariableNom As String
'Attribution d'une valeur de base aux variables
Chemin = Sheets("En tête compte rendu").Range("i1")
Numb = ActiveCell.Row - 1
VariableNom = Sheets("Récapitulatif").Cells(Numb + 1, 5) & " " & Sheets("Récapitulatif").Cells(Numb + 1, 6) & " " & "PSY-CONF" & ".doc"
'Test presence document Compte rendu vierge"
If Sheets("En tête compte rendu").Range("i1") = "" Or Sheets("En tête compte rendu").Range("i1") = Faux Or Dir(Chemin) = "" Then
MsgBox "Veuillez assigner un modèle de compte rendu Word.", vbInformation
ThisWorkbook.Sheets("En tête compte rendu").Range("i1") = Application.GetOpenFilename(, , "Veuillez choisir le fichier vierge pour compte rendu")
If ThisWorkbook.Sheets("En tête compte rendu").Range("i1") = False Then
Exit Sub
End If
End If
'Désactivation rafraichissement d'écran
screenupdate = False
'Attribution de la nouvelle valeure aux variables
Chemin = Sheets("En tête compte rendu").Range("i1")
'CopierCompteRendu et retour sur onglet Récapitulatif
Sheets("En tête compte rendu").Range("A1:C21").Copy
'Ouverture du fichier word
Set wordapp = CreateObject("word.Application")
wordapp.Visible = True
wordapp.Documents.Open Chemin
wordapp.ActiveWindow.ActivePane.VerticalPercentScrolled = 1
Set LeDoc = activedocument
'Sélection de l'application, de tout le contenu, et collage du contenu Excel
With wordapp.Selection
.WholeStory
.Select
.Paste
End With
'Word apparait au premier plan et le document est présenté à partir du haut de page
With wordapp
.Activate
.ActiveWindow.ActivePane.VerticalPercentScrolled = 1
'Apparition dans Word d'une boite de dialogue d'enregistrement ET nom par défaut
Set REP = wordapp.FileDialog(msoFileDialogSaveAs)
With REP
.AllowMultiSelect = False
.InitialFileName = VariableNom
If .Show = True Then
LeDoc.SaveAs Filename:=.SelectedItems(1)
End If
End With
'En arrière fond, Excel retourne à l'onglet "Récapitulatif"
Sheets("Récapitulatif").Activate
'Boite de dialogue pour enregistrer le document automatiquement avec le nom
End With
End SubBonjour H2SO4,
merci de ta réponse.
Je regarde dès mon retour sur le poste de travail et te dis.
Bonne journée
Bonjour H2So4,
toujours le message d'erreur: erreur d'exécution '438' Propriété ou méthode non gérée par cet objet.
SI tu as une nouvelle idée je suis preneur.
H2SO4
j'ai trouvé, il manquait simplement l'objet wordapp dans ta proposition
LeDoc=wordapp.activedocumentMerci beaucoup de ton aide en tout cas.
C'était précieux;