OVH Cloud OVH Cloud

Mise à jour table des matières par macro

25 réponses
Avatar
Anmapie
Bonjour =E0 tous,

J'ai un document Word 2000 qui contient des sections,=20
certaines sont verrouill=E9es et d'autres ne le sont pas=20
comme celle qui contient la table des mati=E8res.
J'ai cr=E9er un signet nomm=E9 "Table_des_mati=E8res" au d=E9but=20
de la table des mati=E8res.
J'ai enregistr=E9 une macro qui atteint le signet, qui met=20
ensuite la table des mati=E8res =E0 jour.

Mon probl=E8me: Lorsque je fais des ajouts sans faire aucune=20
suppression, la table des mati=E8res ne se met pas =E0 jour. =20
Par contre si je supprime des =E9l=E9ments qui figuraient dans=20
la table elle se met =E0 jour.

Que faut-il que j'ajoute =E0 ma macro pour qu'elle puisse=20
mettre =E0 jour la table des mati=E8res lorsque j'ajoute=20
seulement des =E9l=E9ments?

Voici ma macro:
Selection.GoTo What:=3DwdGoToBookmark,=20
Name:=3D"Table_des_mati=E8res"
Selection.Find.ClearFormatting
With Selection.Find
.Text =3D ""
.Replacement.Text =3D ""
.Forward =3D True
.Wrap =3D wdFindContinue
.Format =3D False
.MatchCase =3D False
.MatchWholeWord =3D False
.MatchWildcards =3D False
.MatchSoundsLike =3D False
.MatchAllWordForms =3D False
End With
Selection.Fields.Update

Merci beaucoup

5 réponses

1 2 3
Avatar
Geo
Bonjour anmapie

Document reçu.


--

A+
Avatar
Geo
Bonjour Anmapie


Bonjour à tous,

J'ai un document Word 2000 qui contient des sections,
certaines sont verrouillées et d'autres ne le sont pas
comme celle qui contient la table des matières.
[...]

Mon problème: Lorsque je fais des ajouts sans faire aucune
suppression, la table des matières ne se met pas à jour.
Par contre si je supprime des éléments qui figuraient dans
la table elle se met à jour.


Effectivement je reproduis cette anomalie (?) avec Word 2000.
Je vais tester avec 2003.

--

A+

Avatar
Geo
Re

2003 réagit à peu près pareil.
Un détail est curieux:
On fait une table avec 4 titres.
on en modifie 1 : pas de mise à jour de la table
On en ajoute 1 : rien non plus
On en supprime 1 des autres (on en a donc 4) : la table est mise à
jour
On en supprime un autre (on en a donc 3) : la table se met à jour.
On en rajoute un (on en a donc 4) : la table ne se met pas à jour.

Conclusion : faire au départ une table avec 999 titres et supprimer
les inutiles à la fin.
:-D

--

A+
Avatar
Anacoluthe
Bonjour la compagnie !

'Anmapie' nous a écrit ...
J'ai un document Word 2000 qui contient des sections,
certaines sont verrouillées et d'autres ne le sont pas
comme celle qui contient la table des matières.
J'ai créer un signet nommé "Table_des_matières" au début
de la table des matières.
J'ai enregistré une macro qui atteint le signet, qui met
ensuite la table des matières à jour.
Mon problème: Lorsque je fais des ajouts sans faire aucune
suppression, la table des matières ne se met pas à jour.
Par contre si je supprime des éléments qui figuraient dans
la table elle se met à jour.


Alors voilà, Geo est parti au pays des lapins de Pâques
et je viens juste de regarder d'un peu plus près le
fichier de Marie-Claude qu'il nous a transmis....

Le problème vient des classiques limitations, pas toujours
logiques, induites par la protection des formulaires : la
mise à jour de la table n'est que partielle, sur les numéros
de pages, et dans ce cas si une des entrées est supprimée
Word bascule en mise à jour totale de la table. Quel rapport
avec la protection de formulaire ? Aucun ! C'est Word !

La solution pour ce genre de problème est classique : il faut
déprotéger le formulaire au niveau de ses sections protégées,
exécuter la procédure puis reprotéger les sections. Il n'est
pas nécessaire de changer la propriété ProtectedForForms
de chaque section. Cette propriété doit être mise à Vrai
pour toutes les sections de formulaires. Enfin lors de la
re-protection de ces sections, il faut veiller à ne pas
réinitialiser les champs de formulaires déjà remplis.

Au total, à supposer que le document ne contiennent
qu'une seule table des matières, on la mettra à jour ainsi :

Public Sub Mise_a_jour_Table()
' Déprotège les sections ProtectedForForms
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect Password:=""
End If
' Met à jour la TDM
ActiveDocument.TablesOfContents(1).Update
' Reprotège les sections formulaires sans effacer les données
If ActiveDocument.ProtectionType = wdNoProtection Then
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, _
NoReset:=True
End If
End Sub

Joyeuses Pâques

Anacoluthe
« Et vous rappelez-vous les amis, et la table
Et le rire éclatant du père respectable »
- Victor HUGO

Avatar
Anmapie
Bonjour Anacoluthe et Geo,

Mille mercis, cette macro fonctionne à merveille, je crois
que je devrais m'y mettre dans VBA.

Merci à tous ceux qui m'ont aidé à trouver une solution à
ce problème, c'est vraiment très apprécié.

Merci encore une fois.

Anmapie
-----Message d'origine-----
Bonjour la compagnie !

'Anmapie' nous a écrit ...
J'ai un document Word 2000 qui contient des sections,
certaines sont verrouillées et d'autres ne le sont pas
comme celle qui contient la table des matières.
J'ai créer un signet nommé "Table_des_matières" au
début


de la table des matières.
J'ai enregistré une macro qui atteint le signet, qui
met


ensuite la table des matières à jour.
Mon problème: Lorsque je fais des ajouts sans faire
aucune


suppression, la table des matières ne se met pas à
jour.


Par contre si je supprime des éléments qui figuraient
dans


la table elle se met à jour.


Alors voilà, Geo est parti au pays des lapins de Pâques
et je viens juste de regarder d'un peu plus près le
fichier de Marie-Claude qu'il nous a transmis....

Le problème vient des classiques limitations, pas toujours
logiques, induites par la protection des formulaires : la
mise à jour de la table n'est que partielle, sur les
numéros

de pages, et dans ce cas si une des entrées est supprimée
Word bascule en mise à jour totale de la table. Quel
rapport

avec la protection de formulaire ? Aucun ! C'est Word !

La solution pour ce genre de problème est classique : il
faut

déprotéger le formulaire au niveau de ses sections
protégées,

exécuter la procédure puis reprotéger les sections. Il
n'est

pas nécessaire de changer la propriété ProtectedForForms
de chaque section. Cette propriété doit être mise à Vrai
pour toutes les sections de formulaires. Enfin lors de la
re-protection de ces sections, il faut veiller à ne pas
réinitialiser les champs de formulaires déjà remplis.

Au total, à supposer que le document ne contiennent
qu'une seule table des matières, on la mettra à jour
ainsi :


Public Sub Mise_a_jour_Table()
' Déprotège les sections ProtectedForForms
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect Password:=""
End If
' Met à jour la TDM
ActiveDocument.TablesOfContents(1).Update
' Reprotège les sections formulaires sans effacer les
données

If ActiveDocument.ProtectionType = wdNoProtection Then
ActiveDocument.Protect Type:=wdAllowOnlyFormFields,
_

NoReset:=True
End If
End Sub

Joyeuses Pâques

Anacoluthe
« Et vous rappelez-vous les amis, et la table
Et le rire éclatant du père respectable »
- Victor HUGO
.




1 2 3