Publipostage - enregistrer les documents dans le dossier courant
Résolu
Nai
Messages postés
709
Date d'inscription
Statut
Membre
Dernière intervention
-
Nai Messages postés 709 Date d'inscription Statut Membre Dernière intervention -
Nai Messages postés 709 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
J'utilise la macro ci-dessous pour enregistrer chacun des documents séparément d'un publipostage :
Je voudrais indiquer le dossier du fichier en cours pour l'enregistrement. Quelque chose qui ressemblerait à ceci :
Mais cela ne marche pas :/
Quelqu'un aurait une petite idée ? :)
Merci d'avance !
Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)
J'utilise la macro ci-dessous pour enregistrer chacun des documents séparément d'un publipostage :
Sub TestPublipost()
' Déclaration des variables
Dim iR As Integer
Dim i As Integer
Dim oDoc As Document
Dim DocName As String
Dim oDS As MailMergeDataSource
' Affectation des objets
Set oDoc = ActiveDocument
Set oDS = oDoc.MailMerge.DataSource
iR = oDoc.MailMerge.DataSource.RecordCount
Debug.Print iR
For i = 1 To iR
With oDoc.MailMerge
'Définition du premier et dernier enregistrement
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
' Envoi des données dans un nouveau document
.Destination = wdSendToNewDocument
' Exécution du publipostage
.Execute
' Actualisation de l'enregistrement pour la sauvegarde
.DataSource.ActiveRecord = i
'Utilisation de deux champs pour obtenir le nom du document
DocName = .DataSource.DataFields(1).Value
DocName = "Convention 2015-2016 - " & DocName
Debug.Print DocName; i
End With
' Sauvegarde du document publiposté
With ActiveDocument
.SaveAs "c:\temp\" & DocName & ".docx"
.Close
End With
Next i
End Sub
Je voudrais indiquer le dossier du fichier en cours pour l'enregistrement. Quelque chose qui ressemblerait à ceci :
With ActiveDocument
.SaveAs "\" & DocName & ".docx" 'comme un chemin relatif
.Close
End With
Mais cela ne marche pas :/
Quelqu'un aurait une petite idée ? :)
Merci d'avance !
Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)
4 réponses
-
Essaie ceci:
ActiveDocument.SaveAs FileName:=ActiveDocument.Path & "\" & DocName & ".docx", FileFormat:= _ wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _ True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _ False, SaveNativePictureFormat:=False, SaveFormsData:=False, _ SaveAsAOCELetter:=False
-
Que dois-je faire du With et End With du coup ?
J'ai trouvé une solution :Sub SavePublipost() ' Déclaration des variables Dim iR As Integer Dim i As Integer Dim oDoc As Document Dim DocName As String Dim oDS As MailMergeDataSource Dim cheminfichier As Variant cheminfichier = ActiveDocument.Path 'MsgBox ActiveDocument.Path & "\" & DocName & ".docx" ' Affectation des objets Set oDoc = ActiveDocument Set oDS = oDoc.MailMerge.DataSource iR = oDoc.MailMerge.DataSource.RecordCount Debug.Print iR For i = 1 To iR With oDoc.MailMerge 'Définition du premier et dernier enregistrement .DataSource.FirstRecord = i .DataSource.LastRecord = i ' Envoi des données dans un nouveau document .Destination = wdSendToNewDocument ' Exécution du publipostage .Execute ' Actualisation de l'enregistrement pour la sauvegarde .DataSource.ActiveRecord = i 'Utilisation de deux champs pour obtenir le nom du document DocName = .DataSource.DataFields(1).Value DocName = "Convention 2015-2016 - " & DocName Debug.Print DocName; i End With ' Sauvegarde du document publiposté With ActiveDocument .SaveAs cheminfichier & "\" & DocName & ".docx" .Close End With Next i End Sub
Partant du principe que le MsgBox en début de macro m'affiche le bon répertoire, j'ai demandé, selon le code que tu as donné tout à l'heure, de définir cheminfichier dès le début. Ainsi, je suis sûr que cheminfichier est le bon. Puis je l'ai fais apparaître là où je voulais qu'il soit, en ajoutant le complément du nom du fichier crée.
Merci encore Le Pivert :)
-
-
Bonjour,
Le chemin du document Word est le suivant:
Dim cheminfichier As Variant cheminfichier = ThisDocument.Path & "\" & DocName & ".docx"
-
C'était juste pour te montrer le chemin du fichier.
Voici:
With ActiveDocument .SaveAs ThisDocument.Path & "\" & DocName & ".docx" .Close End With
-
Du coup, à quoi sert :
Dim cheminfichier As Variant
Le code donne donc :Sub TestPublipost() ' Déclaration des variables Dim iR As Integer Dim i As Integer Dim oDoc As Document Dim DocName As String Dim oDS As MailMergeDataSource ' Affectation des objets Set oDoc = ActiveDocument Set oDS = oDoc.MailMerge.DataSource iR = oDoc.MailMerge.DataSource.RecordCount Debug.Print iR For i = 1 To iR With oDoc.MailMerge 'Définition du premier et dernier enregistrement .DataSource.FirstRecord = i .DataSource.LastRecord = i ' Envoi des données dans un nouveau document .Destination = wdSendToNewDocument ' Exécution du publipostage .Execute ' Actualisation de l'enregistrement pour la sauvegarde .DataSource.ActiveRecord = i 'Utilisation de deux champs pour obtenir le nom du document DocName = .DataSource.DataFields(1).Value DocName = "Convention 2015-2016 - " & DocName Debug.Print DocName; i End With ' Sauvegarde du document publiposté With ActiveDocument .SaveAs ThisDocument.Path & "\" & DocName & ".docx" .Close End With Next i End Sub
Ça a l'air de fonctionner. Mais je ne retrouve pas les documents crées dans le dossier du fichier ouvert :/ -
-
-
A quoi sert:
Dim cheminfichier As Variant
Si tu veux te servir du chemin plusieurs fois ou dans une autre Sub (à ce moment là, faire la déclaration en dehors des Sub tout en haut) cela t'évite de répéter tout le chemin en mettant:
cheminfichier = ThisDocument.Path & "\" & DocName & ".docx" With ActiveDocument .SaveAs cheminfichier .Close End With
pour ce qui est du chemin, une petite vérification en mettant:
'a mettre tout ce qui est avant MsgBox ThisDocument.Path & "\" & DocName & ".docx" ' Sauvegarde du document publiposté With ActiveDocument .SaveAs ThisDocument.Path & "\" & DocName & ".docx" .Close End With Next i End Sub
-
-
Merci ! Il semblerait que non...
Ce code :MsgBox ActiveDocument.Path & "\" & DocName & ".docx"
M'affiche bien le bon dossier.
Par contre, dès que je met :With ActiveDocument .SaveAs ActiveDocument.Path & "\" & DocName & ".docx" .Close End With
Ça me ramène à l'erreur 5156 : "Impossible d'enregistrer ou de créer ce fichier. Vérifiez que le disque où vous voulez enregistrer le fichier n'est pas saturé, protégé en écriture ou endommagé."
Je ne suis pas sous Vista et ne souhaite pas enregistrer le fichier à la racine du lecteur...
Une idée de solution ?
-