Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word
Word Forum d'entraide sur le traitement de texte Microsoft Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/11/2011, 11h56   #1
Futur Membre du Club
 
Homme Ramon Olivier
Développeur informatique
Inscription : février 2010
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Ramon Olivier
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 32
Points : 16
Points : 16
Par défaut Champs écrasés lors de publipostage

Bonjour,

Je dois actuellement effectuer un publipostage ayant pour but de créer des fichiers qui seront réutilisés par la suite.
J'utilise donc un template, qui contient donc les champs de publipostage, mais aussi des champs de propriétés génériques (FILENAME..) et d'autres personnalisés (ex: my_Doc_Issue), que l'on retrouve notamment dans le pied de page.

Mon problème est que lors du publipostage (contrôlé par VBA), l'ensemble des champs de propriétés génériques à travers le document sont écrasés et deviennent des morceaux de textes. Tout du moins, ces champs existent toujours, mais ils sont remplacés dans le texte par leur valeur en dur.

Par exemple, si j'utilise Ctrl+F9, ce qui est "{ FILENAME \* MERGEFORMAT}" dans mon template devient après publipostage "template.doc".

Le problème qui vient avec cela (entre autre), c'est que le pied de page qui contient le nom du fichier, ne se met pas à jour (et ne peut plus se mettre à jour vu que ce n'est plus un champs, mais du simple texte) et garde le nom du template.
Dans le même style, le sommaire qui est dynamique devient comme produit manuellement.

Quelqu'un saurait-il comment publiposter sans perdre le coté dynamique du template ?

D'avance, merci
Olivier.Ramon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 12h03   #2
Futur Membre du Club
 
Homme Ramon Olivier
Développeur informatique
Inscription : février 2010
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Ramon Olivier
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 32
Points : 16
Points : 16
Par défaut Petite Précision..

.. que je met dans un autre message pour ne pas entacher la lisibilité du sujet :

A défaut de garder le coté dynamique des champs, j'ai tenté de contourner le problème en renommant mon template juste avant le publipostage pour qu'il prenne le nom de mon fichier à produire, et ainsi avoir un pied de page conforme.

Mais comme je suis une bille, je modifie de fait mon template définitivement.
Je suppute qu'il doit exister une possibilité de créer une copie temporaire de mon template qui serait sacrifié pour la bonne cause, mais je suis bien incapable d'y arriver (niveau en VBA = Leeroy Jenkins).

Voilà mon code :
Code :
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
Sub Publipost()
' Déclaration des variables
Dim iR As Integer
Dim i As Integer
Dim myDoc As Document
Dim DocName As String
Dim myPath As String
Dim oDS As MailMergeDataSource
 
' Affectation des objets
 
Set myDoc = ActiveDocument
Set oDS = myDoc.MailMerge.DataSource
myPath = myDoc.Path & "\Product\"
 
iR = myDoc.MailMerge.DataSource.RecordCount
Debug.Print iR
For i = 1 To 2
    With myDoc.MailMerge
        'Définition du premier et dernier enregistrement
        .DataSource.FirstRecord = i
 
        .DataSource.LastRecord = i
        ' Envoi des données dans un nouveau document
        .Destination = wdSendToNewDocument
 
        ' Actualisation de l'enregistrement pour la sauvegarde
        .DataSource.ActiveRecord = i
 
        'Récupération du nom de fichier dans la BD
        DocName = .DataSource.DataFields(1).Value
        'Debug.Print DocName; i
 
        'Mise à jour des propriétés de champs
        'Nom du document
        myDoc.BuiltInDocumentProperties.Item(FileName) = DocName
        'myDoc.
 
 
        'Date
        myDoc.CustomDocumentProperties("A_Doc_Date_Std").Value = myDoc.MailMerge.DataSource.DataFields(4).Value
        'Issue
        myDoc.CustomDocumentProperties("A_Doc_Issue").Value = myDoc.MailMerge.DataSource.DataFields(5).Value
        'Version
        myDoc.CustomDocumentProperties("Project version").Value = myDoc.MailMerge.DataSource.DataFields(6).Value
        'Reference
        myDoc.CustomDocumentProperties("A_Doc_Reference").Value = myDoc.MailMerge.DataSource.DataFields(7).Value
 
    End With
 
    'Rafraichissment de chaque occurence de propriété
 
    For sectionIterator = 1 To ActiveDocument.Sections.Count
       For headerIterator = 1 To ActiveDocument.Sections(sectionIterator).Headers.Count
          ActiveDocument.Sections(sectionIterator).Headers(headerIterator).Range.Fields.Update
       Next headerIterator
       For headerIterator = 1 To ActiveDocument.Sections(sectionIterator).Footers.Count
          ActiveDocument.Sections(sectionIterator).Footers(headerIterator).Range.Fields.Update
       Next headerIterator
    Next sectionIterator
 
    ActiveDocument.SaveAs myPath & DocName
    ' Exécution du publipostage
        myDoc.MailMerge.Execute
 
    ' Sauvegarde du document publiposté
    With ActiveDocument
            .Save
            .Close
    End With
Next i
End Sub
Olivier.Ramon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 13h02   #3
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 597
Points : 1 597
Envoyer un message via MSN à carden752
Bonjour,

Pourquoi ne pas écrire simplement un texte très précis inretrouvable genre "$$zzzzz$$" dans le pied de page et lancer après le publipostage un rechercher pour trouver cette zone et la remplacer par le nom du fichier.
Code :
1
2
3
4
5
  With ActiveDocument
'Rechercher/remplacer dans les pieds de page
            .Save
            .Close
    End With
Je te laisse explorer cette piste et chercher pour le rempacement de texte dans les pieds de page.
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 13h12   #4
Futur Membre du Club
 
Homme Ramon Olivier
Développeur informatique
Inscription : février 2010
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Ramon Olivier
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 32
Points : 16
Points : 16
Ca serait une solution de remplacement, oui.Même si je sais pas encore le faire
Mais je perdrais quand même le coté "dynamique" de mon fichier.

Merci, BTW
Olivier.Ramon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 13h41   #5
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 597
Points : 1 597
Envoyer un message via MSN à carden752
Peut-être que le côté dynamique peut être recréé en y insérant de nouvau le code de champ correspondant
Code :
1
2
3
4
5
6
  Sub insertcodechamp()   
   Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
        PreserveFormatting:=False
    Selection.TypeText Text:="ref toto"
    ActiveDocument.Fields.Update
End Sub
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/11/2011, 15h34   #6
Futur Membre du Club
 
Homme Ramon Olivier
Développeur informatique
Inscription : février 2010
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Ramon Olivier
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 32
Points : 16
Points : 16
Effectivement, c'est aussi possible, et je me sens con de pas y avoir pensé.
Cependant, si le doc change, il faudra remettre les mains dedans.

Dans tout les cas, merci, je vais probablement être contraint de faire comme cela.
Olivier.Ramon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 17h06   #7
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 333
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 333
Points : 29 239
Points : 29 239
Salut,

On peut mettre le texte directement

Code :
1
2
Selection.Fields.Add Range:=Selection.Range, Text:="ref Toto" , Type:=wdFieldEmpty, _
        PreserveFormatting:=False
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 12h10   #8
Futur Membre du Club
 
Homme Ramon Olivier
Développeur informatique
Inscription : février 2010
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Ramon Olivier
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 32
Points : 16
Points : 16
J'ai finalement opté pour le chercher remplacer.
Quand au sommaire, j'ai utilisé une marque textuelle pour faire recréer un sommaire post-publipostage (les signets étant eux aussi écrasés lors du publipostage).

Merci à tout en tout cas

(Et un remerciement spéciale à Olivier Heureux pour ses tutoriels, ôh combien utiles).
Olivier.Ramon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h31.


 
 
 
 
Partenaires

Hébergement Web