Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA 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 24/11/2010, 15h17   #1
Inactif
 
Inscription : décembre 2008
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 29
Points : 17
Points : 17
Par défaut Mise à jour TOC et mode Révision

Bonjour à tous,

en VBA : comment serait-il possible de détecter la demande de mise à jour de la table des matières d'un document pour désactiver le mode révision (avant l'opération) puis le réactiver ensuite ?

Pas de soucis en ce qui concerne le switch du mode révision, par contre je sèche pour ce qui est de la mise à jour. L'idée serait d'intercepter des "events" et/ou des Word "build-in commands" en surchargeant la fonction de qui va bien. Mes pistes actuelles sont :

- Build in commands : UpdateToc, UpdateTocFull (cf. Word Commands.xls dispo ici)

- Document_UpdateTableOfContents (cf. enregistrement de la macro avec clic sur le bouton du ruban) : mais dans ce cas, un clic droit sur la TOC suivi de l'option de mise à jour ne sera pas pris en compte.

Des idées ?
Merci ^^
heyyo1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 22h22   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 308
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 308
Points : 29 049
Points : 29 049
Salut,

Dans ton raisonnement, tu commets une erreur.

Code :
Document_UpdateTableOfContents
N'est pas un évènement mais une méthode.
Et la bonne syntaxe est :
Code :
ActiveDocument.TablesOfContents(1).Update
Word ne gère pas beaucoup d'évènements.
__________________
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 25/11/2010, 10h59   #3
Inactif
 
Inscription : décembre 2008
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 29
Points : 17
Points : 17
tout à fait d'accord Heureux-oli . En fait j'essaie tout simplement différents moyens.

Dans le cas de la fonction : je la surcharge dans la Microsoft Word Objects > ThisDocument. Ça fonctionne mais la portée est limitée alors que je souhaiterai intercepter toute les tentatives de mise à jour (cf mon post précédent / Comprendre : quel que soit le moyen employé dans l'interface de Word).

Je ne désespère pas d'y arriver et reste à l'écoute.
heyyo1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 13h47   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 308
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 308
Points : 29 049
Points : 29 049
Salut,

Je ne vois pas comment faire ?
__________________
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 02/12/2010, 18h11   #5
Inactif
 
Inscription : décembre 2008
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 29
Points : 17
Points : 17
Salut, j'ai enfin trouvé !

si une solution aurait consisté à détecter l'activation de la boite de dialogue wdDialogUpdateToc, j'ai préféré
le principe de surcharger une built-in command ; suffisait juste de trouver laquelle.

En l'occurence :
- UpdateFields, la commande exécutée lorsque l'utilisateur choisit une mise à jour par clic droit ;
- MettreÀJourTableMatières, la commande exécutée lorsque l'utilisateur passe par le ruban Word.
(/!\ les noms des commandes changent selon la version linguistique utilisée/!\)


A titre d'exemple, voici du code fonctionnant chez moi :

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
' Mise à jour via le menu contextuel. Deux cas possibles :
' - clic sur la TOC
' - clic sur un numéro de figure (par exemple)
Sub UpdateFields()
    ' Sauvegarde de l'état actuel du mode révision
    Dim isRevisionActive As Boolean
    isRevisionActive = ActiveDocument.TrackRevisions
 
   ' Détecte si l'utilisateur a cliqué sur la TOC
    If Application.Selection.Range.Start > ActiveDocument.TablesOfContents(1).Range.Start _
    And Application.Selection.Range.Start < ActiveDocument.TablesOfContents(1).Range.End Then
        ' Désactive le mode révision s'il est activé
        If isRevisionActive Then ActiveDocument.TrackRevisions = False
 
        ' update TOC
        moduleTest.update_all_tocs
 
        ' Réactive le mode révision si besoin
        If isRevisionActive Then ActiveDocument.TrackRevisions = True
   ' Cas d'un champ quelconque (ex : figure)
    Else
        ' Désactive le mode révision s'il est activé
        If isRevisionActive Then ActiveDocument.TrackRevisions = False
 
        ' update Fields
        moduleTest.update_all_fields
 
        ' Réactive le mode révision si besoin
        If isRevisionActive Then ActiveDocument.TrackRevisions = True
    End If    
End Sub
 
 
' Mise à jour via le Ribbon. Un seul cas possible :
' - mise à jour de la TOC
Sub MettreÀJourTableMatières()
    ' cf cas n°1 précédent
End Sub

Voilou, le sujet me paraît donc résolu
++
heyyo1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h21.


 
 
 
 
Partenaires

Hébergement Web