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 15/06/2011, 08h52   #1
Invité de passage
 
Femme petite lulu
Assistante administratif
Inscription : juin 2008
Messages : 6
Détails du profil
Informations personnelles :
Nom : Femme petite lulu
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Assistante administratif

Informations forums :
Inscription : juin 2008
Messages : 6
Points : 1
Points : 1
Par défaut Application d'un modèle en masse

Bonjour à tous ,

Je travaille actuellement sur un projet de refonte de documents, dans leur mise en page principalement et j'ai donc à cet effet créé un modèle.

La nouvelle mise en page concerne plus de 100 documents (qui ont tous été créés de la même façon (mêmes noms de titres...).

Maintenant que j'ai mon modèle tout beau tout neuf qui s'applique bien, j'aimerais l'appliquer à ma centaine de documents, sans avoir à les ouvrir un par un...

ça vous semble possible? une idée sur la question?

Je vous remercie beaucoup pour votre aide
ptitbidule est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 10h22   #2
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 592
Points : 1 592
Envoyer un message via MSN à carden752
Bonjour,

Il va te falloir le faire en VBA.
Je vois bien quelque chose de ce style.

Ouverture du document
Changement modèle avec par exemple
Code :
ActiveDocument.AttachedTemplate = "Mondoc.dotm"
Fermeture du document

Il ne reste qu'à boucler sur tous les fichiers d'un répertoire.
Un peu de lecture sur la gestion des fichiers en VBA

Il est préférable lors de l'attribution du nom du modèle de document de lui donner un chemin absolu et éventuellement sans lettre de lecteur réseau.
__________________
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 15/06/2011, 10h34   #3
Invité de passage
 
Femme petite lulu
Assistante administratif
Inscription : juin 2008
Messages : 6
Détails du profil
Informations personnelles :
Nom : Femme petite lulu
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Assistante administratif

Informations forums :
Inscription : juin 2008
Messages : 6
Points : 1
Points : 1
Bonjour Carden,

Merci pour ta réponse, je vais essayer.

et merci pour le lien, je suis en plein apprentissage du VBA donc il tombe au poil
ptitbidule est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 09h42   #4
Invité de passage
 
Femme petite lulu
Assistante administratif
Inscription : juin 2008
Messages : 6
Détails du profil
Informations personnelles :
Nom : Femme petite lulu
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Assistante administratif

Informations forums :
Inscription : juin 2008
Messages : 6
Points : 1
Points : 1
Bonjour

Alors l'application du modèle fonctionne bien, je n'ai pas encore essayé la boucle, par contre, l'en-tête et le pied de page ne se mettent pas à jour.
y-a-t-il une possibilité pour que, de la même manière, j'applique le même en-tête et le même pied de page à tous mes documents?

Merci
ptitbidule est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 23h58   #5
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut Ptitbidule,

En fait, la solution de Carden752 est bonne mais Word ne met pas à jour spontanément les champs (sauf quelques-uns bien spécifiques) ==> il faut donc mettre à jour tes champs (ce qui par ailleurs est nécessaire pour ta table des matières aussi). De base, c'est super simple. Tu ouvres le document (Carden752 t'a déjà dit comment faire), donc c'est OK. Tu sélectionnes tout le document (l'équivalent du <Ctrl>+<A>) puis tu exécutes la commande "Mettre à jour les champs" ('équivalent du <F9>). Et là, c'est magique, les tables sont mises à jour, les champs renvoient sur les bonnes pages... le bonheur mais hélas ce bonheur est loin d'être parfait : tes entêtes et tes pieds de page ne sont pas mis à jour. Et comme tu es en Word 2010, tu vas pleurer (avant ne Word 2003, ça marchait avec une seule commande). Là, tu vas devoir parcourir tes sections les unes après les autres (si, si, je t'avais dit que tu allais pleurer), remarque, toi qui veux apprendre le VBA, c'est un bon exercice. En fait, tu pourrais te contenter que des sections différentes voire dans certains cas, simplement ouvrir l'entête et le pied de page provoque la mise à jour mais bon puisque tu y es.

En plus, pour chaque section (même si tu ne l'utilises pas), Word créé 3 entêtes : entête normal, entête des pages paires/paires différentes, entête de la première page (je répète même si tu ne les utilises pas) et pareil pour les pieds de page. Il faut donc les mettre à jour tous les 3 (la section les utilise) pour mettre à jour correctement.

Voilà le code (enfin l'essentiel, il faut lui ajouter un peu de ta touche perso)
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
Sub Sauve
    '// On sauvegarde, juste pour éviter de perdre son travail
    ActiveDocument.Save
 
    '// On met à jour les champs dans le corps du texte
    ActiveDocument.Fields.Update
 
    '// On parcourt les sections
    For aI = 1 To ActiveDocument.Sections.Count
        If ActiveDocument.Sections(aI).PageSetup.DifferentFirstPageHeaderFooter Then
            ActiveDocument.Sections(aI).Headers(wdHeaderFooterFirstPage).Range.Fields.Update
            ActiveDocument.Sections(aI).Footers(wdHeaderFooterFirstPage).Range.Fields.Update
        End If
        If ActiveDocument.Sections(aI).PageSetup.OddAndEvenPagesHeaderFooter Then
            ActiveDocument.Sections(aI).Headers(wdHeaderFooterEvenPages).Range.Fields.Update
            ActiveDocument.Sections(aI).Footers(wdHeaderFooterEvenPages).Range.Fields.Update
        End If
        ActiveDocument.Sections(aI).Headers(wdHeaderFooterPrimary).Range.Fields.Update
        ActiveDocument.Sections(aI).Footers(wdHeaderFooterPrimary).Range.Fields.Update
    Next
 
    '// On sauvegarde le résultat attendu et on change de mouchoir (car on a beaucoup pleuré)
    ActiveDocument.Save
End Sub
@+

rem: l'objet Range est vraiment important, voici un article de Heureux-Oli qui traite de la différence entre l'objet Sélection et l'objet Range
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 08h17   #6
Invité de passage
 
Femme petite lulu
Assistante administratif
Inscription : juin 2008
Messages : 6
Détails du profil
Informations personnelles :
Nom : Femme petite lulu
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Assistante administratif

Informations forums :
Inscription : juin 2008
Messages : 6
Points : 1
Points : 1
hello Sepia

Merci beaucoup! Je vais chercher la cafetière et je m'y met

et je vous dis quoi dans.... bon je préfère pas me demander combien de temps ça va me prendre vu que je l'ai jamais fait, mais je crois avoir compris l'essentiel...

Juste une chose : en fait pour que ça fonctionne, au préalable il faut que les infos dans les en-têtes et pieds de page fassent référence à des champs qui soient les mêmes que dans mon modèle c'est ça?
ptitbidule est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 09h30   #7
Invité de passage
 
Femme petite lulu
Assistante administratif
Inscription : juin 2008
Messages : 6
Détails du profil
Informations personnelles :
Nom : Femme petite lulu
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Assistante administratif

Informations forums :
Inscription : juin 2008
Messages : 6
Points : 1
Points : 1
Hello again

alors j'ai voulu essayer sinon avec une macro replace, pour ne remplacer qu'un seul mot dans les pieds de page, seulement, il me les remplace dans tout le document...
où est-ce que je me trompe? j'ai essayé plusieurs syntaxes, j'ai toujours le même résultat...

Sub headerfooter()

Dim headerfooter As Range

For Each headerfooter In ActiveDocument.StoryRanges
With headerfooter.Find
.Text = "SARL"
.Replacement.Text = "SAS"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next headerfooter



End Sub


Merci pour votre aide
ptitbidule est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 19h09   #8
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 592
Points : 1 592
Envoyer un message via MSN à carden752
Bonjour,

Activedocument.storyranges ne correspond pas aux en-têtes et pieds de pages.

Peut-être filtrer en utilisant la propriété storytype
Quelque chose de ce style à adapter :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub headerfooter()
 
Dim headerfooter As Range
 
For Each headerfooter In ActiveDocument.StoryRanges
If (headerfooter.StoryType = wdPrimaryFooterStory Or headerfooter.StoryType = wdPrimaryHeaderStory Or headerfooter.StoryType = wdEvenPagesFooterStory Or headerfooter.StoryType = wdEvenPagesHeaderStory Or headerfooter.StoryType = wdFirstPageFooterStory Or headerfooter.StoryType = wdFirstPageHeaderStory) Then
With headerfooter.Find
.Text = "SARL"
.Replacement.Text = "SAS"
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
End If
Next headerfooter
 
 
 
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 00
Vieux 23/06/2011, 08h33   #9
Invité de passage
 
Femme petite lulu
Assistante administratif
Inscription : juin 2008
Messages : 6
Détails du profil
Informations personnelles :
Nom : Femme petite lulu
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Assistante administratif

Informations forums :
Inscription : juin 2008
Messages : 6
Points : 1
Points : 1
Cooool ça marche

Merci Pour votre aide. y'a plus qu'à !

merci à bientôt
ptitbidule 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 05h27.


 
 
 
 
Partenaires

Hébergement Web