Bonjour,
je ne suis pas un développeur avancé et j'espère ne pas être sur un site trop spécialisé ...
Je cherche une solution au problème suivant :
Je travaille en word 2010.
je crée un mail merge à partir d'une liste excel de 177 enregistrements (destinataires avec nom, adresse, num rue, code postal, etc).
word crée un fichier contenant tous les enregistrements.
Je splitte chacune des pages (les données tiennent sur une seule page par destinataire) via la macro suivante :
Je cherche à renommer les différents fichiers ainsi obtenus et en cherchant j'ai trouvé votre code (voir titre et repris ci dessous) mais je ne comprends pas bien comment l'intégrer en word car il fait appel à la data source qui est en excel ..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Sub coupepages() Application.Browser.Target = wdBrowsePage For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages") 'sélectionne et copie le texte vers le presse papier ActiveDocument.Bookmarks("\page").Range.Copy ' Ouvre un nouveau document et colle le texte du presse papier Documents.Add Selection.PasteAndFormat (wdFormatOriginalFormatting) ' ôte le saut de page si nécessaire Selection.TypeBackspace ChangeFileOpenDirectory "C:\Users\dhaboush\Desktop\coi2016\Newfolder" DocNum = DocNum + 1 ActiveDocument.SaveAs FileName:="test_" & DocNum & ".doc" ActiveDocument.Close ' page suivante Application.Browser.Next Next i ActiveDocument.Close savechanges:=wdDoNotSaveChanges End Sub
Pour le moment j'ai trouvé une solution qui fonctionne via excel (voir ci dessous) mais je préférerais travailler via word
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 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(2).Value DocName = DocName & "-" & .DataSource.DataFields(3).Value Debug.Print DocName; i End With ' Sauvegarde du document publiposté With ActiveDocument .SaveAs "c:\temp\" & DocName & ".doc" .Close End With Next i End Sub
merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Sub renameFile() Dim rg As Range Set rg = ActiveWindow.RangeSelection Dim i As Integer Dim fso As New FileSystemObject, f As File i = 1 For Each cel In rg If cel <> "" Then Dim myFile As String myFile = "C:\Users\dhaboush\Desktop\coi2016\Newfolder\test_" & cel.Row - 1 & ".doc" Dim myName As String myName = Trim(cel.Value) & "-" & Worksheets("Global").Cells(cel.Row, 6) & ".doc" Debug.Print myName ' Worksheets("Global").Cells(cel.Row, 6) Set f = fso.GetFile(myFile) f.Name = myName i = i + 1 End If Next End Sub
Partager