Menu

Publipostage - enregistrer les documents dans le dossier courant [Résolu/Fermé]

Messages postés
588
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
21 juin 2019
-
Bonsoir,
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 :)
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
6116
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 juin 2019
371
1
Merci
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

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 45535 internautes nous ont dit merci ce mois-ci

Nai
Messages postés
588
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
21 juin 2019
44 -
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 :)
Messages postés
6116
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 juin 2019
371
0
Merci
Bonjour,

Le chemin du document Word est le suivant:

Dim cheminfichier As Variant
cheminfichier = ThisDocument.Path & "\" & DocName & ".docx"

Nai
Messages postés
588
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
21 juin 2019
44 -
Bonjour,
Merci pour cette réponse.
Je ne comprend pas bien où je dois le poser.
    Dim cheminfichier As Variant
    With ActiveDocument
        .SaveAs cheminfichier = ThisDocument.Path & "\" & DocName & ".docx"
        .Close
    End With

Merci d'avance :)
Messages postés
6116
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 juin 2019
371
0
Merci
C'était juste pour te montrer le chemin du fichier.
Voici:

 With ActiveDocument
        .SaveAs ThisDocument.Path & "\" & DocName & ".docx"
        .Close
    End With

Nai
Messages postés
588
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
21 juin 2019
44 -
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 :/
Nai
Messages postés
588
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
21 juin 2019
44 -
Ah si ! Je les ai trouvé dans C:\Users\Name\AppData\Roaming\Microsoft\Templates :O
Je n'ai peut-être pas bien compris comment ajouter le code :/
Messages postés
6116
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 juin 2019
371
0
Merci
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



Nai
Messages postés
588
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
21 juin 2019
44 -
Effectivement, le MsgBox m'indique le dossier : C:\Users\Name\AppData\Roaming\Microsoft\Templates
Pourtant, le fichier ne se trouve pas du tout là...
Merci pour :
cheminfichier = ThisDocument.Path & "\" & DocName & ".docx"

Ça peut servir :)
cs_Le Pivert
Messages postés
6116
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
21 juin 2019
371 > Nai
Messages postés
588
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
21 juin 2019
-
Essaie avec:

MsgBox ActiveDocument.Path & "\" & DocName & ".docx"


mais c'est la même chose!
Nai
Messages postés
588
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
21 juin 2019
44 -
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 ?