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 16/12/2011, 14h47   #1
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 164
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 164
Points : 30
Points : 30
* Bonjour, *

J'ai 2 expressions, sur l'une je voudrai mettre un signet, ça je sais faire, et sur l'autre je voudrai mettre un hyperlien qui renvoie vers le signet.
Je sélectionne donc la 1ère expression &&&First Sentence&&&, je lui attribue un signet, je lui calcule un nom, puis je sélectionne la 2ème expression "Second Sentence", et ensuite je bloque.

je ne sais pas comment procéder pour créer l'hyperlien.

Pourriez-vous m'aider sur ce point.
Merci d'avance.
Arsène.

En fait j'arrive très bien au résultat, mais à chaque fois ça plante :

Code :
1
2
3
4
5
txtModif = le nom du signet que j'ai crée
 
ActiveDocument.ActiveWindow.Selection.Hyperlinks.Add Anchor:=Selection.Range, Address:="", _
        SubAddress:=txtModif, ScreenTip:="", TextToDisplay:= _
        ActiveDocument.ActiveWindow.Selection.Text
Je précise que pour bien comprendre il faut rectifier mon premier message, le deuxième marqueur est £££ et non ".

Pour qu'il n'y ait pas de plantage à l'arrivée, je suis obligé de décomposer la macro en deux macros

Code :
1
2
Application.Run MacroName:="SelectionHyperlien"
Application.Run MacroName:="CreationHyperlien"
Le problème en faisant ça, c'est que je dois connaitre le numéro du signet sur lequel doit porter l'hyperlien.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub SelectionHyperlien()
'Dim mytext0 As String
'mytext0 = Selection.Text                                 
Selection.Collapse Direction:=wdCollapseStart
Selection.HomeKey Unit:=wdStory
Selection.EndKey Unit:=wdLine                              
Selection.TypeText Text:="£££"
Selection.HomeKey Unit:=wdStory          
With Selection.Find
.ClearFormatting
.Text = "¤¤¤"
.MatchWildcards = 0
.Forward = 1
.Replacement.Text = ""
.Replacement.ClearFormatting
.Execute ' recherche du mot1
Selection.MoveRight 'déplacement a droite du mot
.Text = "£££"
Selection.Extend ' etendre la selection
.Execute ' atteindre le mot2
Selection.MoveLeft Unit:=wdCharacter, count:=3 '
End With
End Sub
Code :
1
2
3
4
5
6
7
8
Sub CreationHyperlien()
Dim champ As String
champ = ActiveDocument.Bookmarks(1).Name
    ChangeFileOpenDirectory "C:\Users\Arsene\Desktop\"
    ActiveDocument.ActiveWindow.Selection.Hyperlinks.Add Anchor:=Selection.Range, Address:="", _
        SubAddress:=champ, ScreenTip:="", TextToDisplay:= _
        ActiveDocument.ActiveWindow.Selection.Text
End Sub
J'ai parlé trop vite. Même en faisant 2 ou 3 macros séparées, ça plante toujours. Ce que je veux faire là me parait être simple et banal. J'aimerai bien trouver la bonne méthode à utiliser.

J'ai rectifié quelques erreurs mais ça marche toujours pas. Je crois que le problème vient que je n'arrive à établir la cible de l'hyperlien.
Arsene12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 18h16   #2
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 Arsene12,

Word n'apprécie pas que tu ajoutes un lien sur un texte qui est en sélection ==> tu dois récupérer les positions de ta sélection, te déplacer (en début de fichier, par exemple) et ajouter ton lien sur ActiveDocument directement et pas sur ActiveDocument.Selection. Ça donne un truc comme ça :

Code :
1
2
3
4
ActiveDocument.Hyperlinks.Add Anchor:=ActiveDocument.Range(
Start:=ActiveDocument.Sections(maSectionConcernee).Range.Paragraphs(monParagrafConcerne).Range.Characters(monDebutDeCaracteresConcernes).Start, 
End:=ActiveDocument.Sections(maSectionConcernee).Range.Paragraphs(monParagrafConcerne).Range.Characters(monDebutDeCaracteresConcernes + monNbDeCaracteresConcernes).End), 
Address:="http://www.dvp.com"
@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 04h51   #3
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 164
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 164
Points : 30
Points : 30
Merci beaucoup pour ce renseignement,
Le texte sur lequel je veux créer l'hyperlien est compris entre 2 marqueurs (&&&). J'aimerai savoir comment faire exactement pour récupérer la position de la sélection car je n'ai jamais utilisé la méthode range : (Sections(maSectionConcernee).Range.Paragraphs(monParagrafConcerne). Dois-je créer des sections au niveau des marqueurs pour ensuite les supprimer? Comment détermine-t-on le paragraphe concerné?
Arsene12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 00h39   #4
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 Arsene12,

Si tu n'as pas de section , ce n'est pas grave . Elles ne sont pas nécessaires dans ton cas ==> ça va simplifier la syntaxe

Si tes signets sont repérés par des marqueurs, alors on va parcourir le document avec la collection paragraphs. Comme tu utilises le même marqueur de début et de fin, si le paragraphe courant contient 2 "&&&", alors ce qui est entre les 2 marqueurs va devenir l'hyperlien ==> le problème devient comment repérer le marqueur de début et de fin. Voilà l'algo

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
Sub DVP_AjouterDesLiens()
    For aI = 1 To ActiveDocument.Paragraphs.Count
        aDebPos = InStr(ActiveDocument.Paragraphs(aI).Range.Text, "&&&")
        If aDebPos > 1 Then
            aFinPos = InStr(aDebPos + 3, ActiveDocument.Paragraphs(aI).Range.Text, "&&&")
            If aFinPos > 1 Then
                ActiveDocument.Hyperlinks.Add Anchor:=ActiveDocument.Range(Start:=ActiveDocument.Paragraphs(aI).Range.Characters(aDebPos + 3).Start, End:=ActiveDocument.Paragraphs(aI).Range.Characters(aFinPos - 1).End), Address:="http://www.dvp.com"
            End If
        End If
    Next
End Sub
@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 10h14   #5
Nouveau Membre du Club
 
Inscription : février 2003
Messages : 164
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 164
Points : 30
Points : 30
Merci Sepia, j'ai donc rectifié ma page et remplacé le marqueur de fin "&&&" par celui-ci "£££". Ceci fait, j'ai recopié le code de la Macro Sub DVP_AjouterDesLiens que tu m'as donné (en modifiant le dernier marqueur dans le code bien sûr), mais rien ne se passe. Je pensais qu'en ouvrant une nouvelle page et en tapant "&&&MonExpression£££", on pouvait aussitôt créer le lien sur MonExpression en faisant fonctionner la Macro....
Arsene12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 01h35   #6
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 Arsene12,

Excuse pour le retard (mais j'ai été pas mal pris par les Fêtes ).

Tu as remplacé "&&&" par "£££" pour le marqueur de fin, c'est bien mais la macro que je t'ai envoyé fonctionnait comme tu l'avais demandé donc avec 2 "&&&" dans le même paragraphe (comme je te l'ai dit)

Citation:
Envoyé par Sepia Voir le message
Si tes signets sont repérés par des marqueurs, alors on va parcourir le document avec la collection paragraphs. Comme tu utilises le même marqueur de début et de fin, si le paragraphe courant contient 2 "&&&", alors ce qui est entre les 2 marqueurs va devenir l'hyperlien ==> le problème devient comment repérer le marqueur de début et de fin.
Donc soit tu adaptes la macro, soit tu conserves les marqueurs que tu as défini, c'est comme tu veux mais il faut choisir pour que le code soit en cohérence avec 1°) ta propre demande 2°) ce que tu choisis

Tiens-nous au courant
@+
Sepia 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 01h50.


 
 
 
 
Partenaires

Hébergement Web