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 02/01/2008, 13h31   #1
Futur Membre du Club
 
Inscription : juillet 2004
Messages : 27
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2004
Messages : 27
Points : 18
Points : 18
Par défaut [VBA]Mise à jour d'hyperlien

Bonjour et bonne année à vous

Voilà, j'ai un document word rtf généré par matlab, qui me crée une table des matières mais à priori il n'utilise une table des matières word puisqu'aucun objet TableofContents n'existe dans le document. Le problème que suite à des modifications dans le document, cette table des matières n'est plus à jour pour les numéros de pages.

J'ai donc trouver qu'il existe des objets hyperliens mais je n'ai pas trouvé de méthode pour les mettre à jour parmi celles proposées. Je cherche donc un moyen de mettre à jour tous mes hyperliens (si possible avec une seule commande pour m'évitez de faire une boucle for).
petit806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 13h49   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 358
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 358
Points : 29 277
Points : 29 277
En général, ce sont des champs qui sont utilisés pour les tables des matières.

Si tu pouvais mettre un exemple sur le forum, il serait plus aisé de déterminer les actions à prendre.

La solution serait de supprimer ce qui existe pour en mettre une nouvelle et éviter une boucle.
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 15h10   #3
Futur Membre du Club
 
Inscription : juillet 2004
Messages : 27
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2004
Messages : 27
Points : 18
Points : 18
Je ne suis pas sur de bien comprendre ce que tu me suggères.

Voici un exemple de fichier où je dois modifier la table des matières car les liens ne sont pas à jour.

Quand j'utilise je fais
Code :
1
2
word = actxserver('word.Application');
Doc=invoke(word.Documents,'open','chemin_du_fichier')
Avec Doc.TableofContents.Count il me retourne 0.

Par contre Doc.Hyperlinks.Count me retourne 31.
L'idée que j'avais était donc de mettre à jour chacun de ces hyperliens comme ça je suis sur que ma table des matières est à jour aprés. Mais je n'ai pas trouver de méthodes pour mettre à jour les hyperliens.
Fichiers attachés
Type de fichier : doc exemple.doc (389,5 Ko, 1 affichages)
petit806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 15h24   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 358
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 358
Points : 29 277
Points : 29 277
Je viens de faire le tour de ton fichier et c'est normal que la table des matières ne soit pas mise à jour, elle ne contient pas d'entrées.

Pour qu'une table des matières puisse être construite, il faut que l'on retrouve soit des titres, soit des styles repris comme entrée de table des matières.

Dans ton fichier, on ne retrouve ni l'un ni l'autre.

Ce qui serait possible de faire, c'est convertir en titre les paragraphes avec numérotation.
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 16h23   #5
Futur Membre du Club
 
Inscription : juillet 2004
Messages : 27
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2004
Messages : 27
Points : 18
Points : 18
Ca ne risque pas de changer ma mise en page de changer les paragraphes avec numérotation en titre?

En plus il me semble que la numérotation n'est aps faite par word mais que c'est une numérotation "à la main" en texte simple.

Ensuite je vois que les codes champ utiliser pour la table des matières sont du type suivant:
Ne pourrais t'ont pas récupérer le numéro de la page où se trouve la cible du lien hypertexte? Car de ce que j'ai vu les liens hypertexte, malgré le fait qu'ils ne donnent pas les bons nuémros de page, pointent bien au bon endroit dans le document.
Enfin ne connaissant pas bien word ça me semble plus simple.
petit806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 16h55   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 358
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 358
Points : 29 277
Points : 29 277
Si on change le style, on ne change pas la numérotation.
Je vais faire un essai.
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 20h01   #7
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 358
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 358
Points : 29 277
Points : 29 277
Après essai sur le fichier fournis

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Test()
Dim para As Paragraph
Dim i As Integer
 
For Each para In ActiveDocument.Paragraphs
    If Len(para.Range.Text) > 1 Then
    If IsNumeric(Left(para.Range.Text, 1)) Then
        i = InStr(1, para.Range.Text, ".")
        Debug.Print i
        Select Case i
        Case 0
        para.Range.Style = wdStyleHeading1
        Case Is < 3
        para.Range.Style = wdStyleHeading2
        End Select
    End If
    End If
Next para
 
End Sub
Qu'en penses-tu ?
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 11h33   #8
Futur Membre du Club
 
Inscription : juillet 2004
Messages : 27
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2004
Messages : 27
Points : 18
Points : 18
J'essai de tester mais je rencontre actuellement des problèmes pour modifier le style du paragraphe avec Matlab.

Voici la ligne de code et l'erreur que j'obtiens si jamais tu as une idée:
Citation:
Doc.paragraphs.Item(45).Range.Style.Type='wdStyleHeading1'
??? The 'wdStyleHeading1' enumerated value is invalid.
Sinon j'ai une bizarrerie quand je modifie le style du paragraphe "à la main" et que je lui mets un Style "titre 1" et que je demande à matlab les paramètres de style j'obtiens:
Citation:
Doc.paragraphs.Item(45).Range.Style.get
Application: [1x1 Interface.Microsoft_Word_11.0_Object_Library._Application]
Creator: 1.2973e+009
Parent: [1x1 Interface.Microsoft_Word_11.0_Object_Library._Document]
NameLocal: 'Titre 1'
BaseStyle: [1x1 Interface.Microsoft_Word_11.0_Object_Library.Style]
Description: [1x133 char]
Type: 'wdStyleTypeParagraph'
BuiltIn: 1
NextParagraphStyle: [1x1 Interface.Microsoft_Word_11.0_Object_Library.Style]
InUse: 1
Shading: [1x1 Interface.Microsoft_Word_11.0_Object_Library.Shading]
Borders: [1x1 Interface.Microsoft_Word_11.0_Object_Library.Borders]
ParagraphFormat: [1x1 Interface.Microsoft_Word_11.0_Object_Library._ParagraphFormat]
Font: [1x1 Interface.Microsoft_Word_11.0_Object_Library._Font]
Frame: [1x1 Interface.Microsoft_Word_11.0_Object_Library.Frame]
LanguageID: 'wdFrench'
AutomaticallyUpdate: 0
ListTemplate: []
ListLevelNumber: 0
LanguageIDFarEast: 'wdFrench'
NoProofing: 0
LinkStyle: [1x1 Interface.Microsoft_Word_11.0_Object_Library.Style]
NoSpaceBetweenParagraphsOfSameStyle: 0
Table: [1x1 Interface.Microsoft_Word_11.0_Object_Library.TableStyle]
Locked: 0
Il a l'air de modifier uniquement le nom local et pas le type du style. je continue mes tests pour essayer de résoudre ça mais si tu as une suggestion je suis preneur.
petit806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 11h41   #9
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 358
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 358
Points : 29 277
Points : 29 277
Mon code est pour Word, pas pour MatLab.
Pour MatLab, il est préférable de poster dans forum MatLab.
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 12h27   #10
Futur Membre du Club
 
Inscription : juillet 2004
Messages : 27
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2004
Messages : 27
Points : 18
Points : 18
Oups oui j'ai oublié de préciser mais je commande word avec un serveur activeX lancé sous matlab.

Je demande aussi ici car de ce que j'ai pu voir de mes précédentes questions, les utilisateurs de matlab n'utilise pas beaucoup ces possibilités de matlab.
petit806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 12h49   #11
Responsable Word

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

Jamais vu !

Si tu as Word, lance mon code sous Word.
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 15h15   #12
Dut
Rédacteur/Modérateur
 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 12 932
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 12 932
Points : 15 931
Points : 15 931
Désolé de polluer le forum Office avec mes interventions MATLAB mais c'est ActiveX le coupable

Voila comment je m'en suis sorti sous MATLAB et les styles prédéfinis de Word (1er paragraphe en style "Titre 1"):

Code Matlab :
1
2
3
4
5
6
7
8
9
10
11
word = actxserver('word.application');
set(word,'visible',1);
 
Document= word.documents;
 
doc = invoke(Document, 'Open','D:\test.doc');
 
doc.Paragraphs.Item(1).Style=doc.Styles.Item(130); 
 
invoke(word,'quit');
delete(word);

Le 130ème style correspond à "Titre 1" (Word en français)

Vous en pensez quoi ?

=> http://www.developpez.net/forums/sho...d.php?t=467105
__________________
Mes contributions MATLAB (R2009a - Windows & Linux)

• J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck)
• Des larmes coulèrent doucement des yeux fermés du vieil homme. Moi je pleurais comme un enfant, que d'ailleurs pour lui je ne cesserais d'être ma vie durant (Amkoullel)

• Lâché de Mogwai sur St Malo... aie aie aie... ouille ouille ouille
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 15h19   #13
Futur Membre du Club
 
Inscription : juillet 2004
Messages : 27
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2004
Messages : 27
Points : 18
Points : 18
Euh je ne sais pas comment exécuter du code sous word.

Par contre gràce tes suggestions j'ai réussi avec matlab à générer ma table des matières.
petit806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 18h11   #14
Responsable Word

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

Je n'oserais pas dire que ce qui vient de toi est une pollution.

Merci de ton intervention, ne connaissant pas MatLab, j'aurais eu beaucoup de mal.
__________________
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 actuellement 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 13h38.


 
 
 
 
Partenaires

Hébergement Web