Peut on créer un lien hypertexte renvoyant à un signet de Word de la même suite ?

anthoYS

XLDnaute Barbatruc
Bonjour,


Voilà j'ai plusieurs signets sur un Word, mais il faut que je clique sur "atteindre" pour y aller, or j'ai tout le temps un classeur Excel et Word. Et je travaille sur les deux. Du coup, ça ne me convient pas, de cliquer sur "signet" (raccourci créer dans le ruban de Word) puis "atteindre" car y'a un risque de cliquer sur "ajouter" ou "supprimer" par inadvertance...

d'où ma question, savoir d'y accéder directement à partir d'Excel. je veux dire, qu'Excel me renvoie au signet voulu, je créer par exemple la liste de tous les signets, dans chaque cellule, en colonne, puis voilà.


Merci de me dire, si vous savez.
 

job75

XLDnaute Barbatruc
Bonsoir anthoYS,

Voyez les fichiers zippés joints et cette macro dans le fichier Excel :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row = 1 Or Target = "" Then Exit Sub
Cancel = True
ThisWorkbook.FollowHyperlink ThisWorkbook.Path & "\" & Cells(Target.Row, 1)
If Target.Column > 1 Then GetObject(, "Word.Application").Selection.GoTo What:=-1, Name:=Target '-1 pour wdGoToBookmark
End Sub
A+
 

Pièces jointes

  • Vers signet Word(1).zip
    25.2 KB · Affichages: 27
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour anthoYs, le forum,

Au lieu d'utiliser le double-clic on peut créer des liens hypertextes :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chemin$, r As Range, c As Range
chemin = ThisWorkbook.Path & "\" 'adapter au besoin
Set r = Intersect(Target.EntireRow, Me.UsedRange)
If r Is Nothing Then Exit Sub
For Each r In r.Rows
  r.Hyperlinks.Delete 'RAZ
  If CStr(Cells(r.Row, 1)) <> "" And Dir(chemin & CStr(Cells(r.Row, 1))) <> "" Then
    For Each c In r.SpecialCells(xlCellTypeConstants)
      c.Hyperlinks.Add c, chemin & Cells(r.Row, 1) 'création du lien hypertexte
    Next c
  End If
Next r
End Sub

Private Sub Worksheet_FollowHyperlink(ByVal h As Hyperlink)
If h.Parent.Column = 1 Then Exit Sub
On Error Resume Next
With GetObject(, "Word.Application").Selection
  If IsError(.Document.Bookmarks(h.Parent)) Then h.Delete 'si le signet n'existe pas
  .GoTo What:=-1, Name:=h.Parent '-1 pour wdGoToBookmark
End With
End Sub
Aucun bug possible, même si le signet n'existe pas.

Fichier (2).

Bonne journée.
 

Pièces jointes

  • Vers signet Word(2).zip
    27.7 KB · Affichages: 29

job75

XLDnaute Barbatruc
Re,

S'il peut y avoir des formules dans la feuille utiliser :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chemin$, r As Range, c As Range
chemin = ThisWorkbook.Path & "\" 'adapter au besoin
Set r = Intersect(Target.EntireRow, Me.UsedRange)
If r Is Nothing Then Exit Sub
For Each r In r.Rows 'si entrées multiples (copier-coller)
  r.Hyperlinks.Delete 'RAZ
  If CStr(Cells(r.Row, 1)) <> "" And Dir(chemin & CStr(Cells(r.Row, 1))) <> "" Then
    For Each c In Intersect(r, Me.UsedRange)
      If CStr(c) <> "" Then c.Hyperlinks.Add c, chemin & Cells(r.Row, 1) 'création du lien hypertexte
    Next c
  End If
Next r
End Sub

Private Sub Worksheet_FollowHyperlink(ByVal h As Hyperlink)
If h.Parent.Column = 1 Then Exit Sub
On Error Resume Next
With GetObject(, "Word.Application").Selection
  If IsError(.Document.Bookmarks(h.Parent)) Then h.Delete 'si le signet n'existe pas
  .GoTo What:=-1, Name:=h.Parent '-1 pour wdGoToBookmark
End With
End Sub
Fichier (3).

A+
 

Pièces jointes

  • Vers signet Word(3).zip
    28.3 KB · Affichages: 33

job75

XLDnaute Barbatruc
Re,

Pour tester j'ai copié-collé la ligne 4 (3 signets) sur 1000 lignes.

Sur Win 10 - Excel 2013 l'opération - exécution de la Worksheet_Change - prend :

- 3,2 secondes avec le fichier (2)

- 2,4 secondes avec le fichier (3).

C'est donc assez rapide, utilisez la version (3), plus générale.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 335
Membres
102 864
dernier inscrit
abderrashmaen