Lien hypertexte vers une cellule/objet

Mi_

XLDnaute Occasionnel
Bonjour le forum,

Normalement, si on ajoute un lien hypertexte à une cellule/objet vers une autre cellule de la même feuille (disons plus en bas sur une feuille très longue en profondeur), et l'on click dessus, on va aller à la cellule désignée, mais celle-ci va s'afficher en bas de l'écran et pas en haut.

Existe-t-il un moyen de réaliser un lien vers une cellule ou un objet, qui sont en bas d'une feuille, afin que le click affiche ces destination en haut de la feuille ?

Merci d'avance pour tout conseil,
Mi
 

Abel

XLDnaute Accro
Bonjour Mi_,

Sans passer par un code (VBA) je ne vois pas comment faire à part cibler une cellule plus bas dans ton tableau pour avoir l'information qui t'intéresse vers le haut. Mais à ce moment là, ce n'est pas la cellule avec l'information qui aura le focus.

Abel.
 

Abel

XLDnaute Accro
Re,

Il faut aller dans l'éditeur de macro (Alt+F11).
Puis sélectionne Feuilx du fichier (projet) qui t'intéresse. C'est, en général, à gauche de l'écran. Fais un double clic dessus.
Dans la fenêtre de code qui va s'ouvrir, copie les lignes suivantes.

Code:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
        ActiveWindow.SmallScroll Down:=30
End Sub

Ce code ne sera valable que dans la feuille sélectionnée plus haut.

Chaque fois que tu sélectionneras un lien hypertexte, l'écran remontera de 30 lignes.
Adapte ce Scroll à ta situation.
Je n'ai pas testé ce qui se passe quand on fait appel à un lien pointant sur un URL par exemple.

Abel
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Mi_, re Abel, le Forum

En effet avec un hyperling comme celui-ci :

Sub TheHyperlinkBuilder()
   
With ActiveSheet.Hyperlinks
    .Add Anchor:=Selection, Address:='', SubAddress:='Sheet3!A500', TextToDisplay:='Test'
   
End With
End Sub

Si on click dessus, on va bien se retrouver sur la Sheet3 Range('A500') mais le scroll sera fait en sorte que cette cellule 'A500' soit en bas de fenêtre.

Donc il te faut un macro comme ceci :

Option Explicit

Sub TheScrollRollers()
Dim TheRow As Long

TheRow = Application.InputBox('Entrer un numéro de ligne', Type:=1)
ActiveWindow.ScrollRow = TheRow

End Sub


Bien sûr tu vas me dire, mais mon 'hyperlink' dans tout ça ???

Et oui, donc j'ai pensé à faire appel pour ce cas présent à une évènementielle très peu connue et utilisée : Workbook_SheetFollowHyperlink

Voici mon idée :

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
Dim TheRow As Long
Dim TheAddress As String, TmpAddress As String
Dim i As Byte

   
If Target.Address = '' Then
        TheAddress = Target.SubAddress
        TmpAddress = Mid(TheAddress, InStr(TheAddress, '!'), Len(TheAddress))
       
For i = 1 To Len(TmpAddress)
           
If IsNumeric(Mid(TmpAddress, i, 1)) Then
            TheRow = Val(Mid(TmpAddress, i, Len(TmpAddress)))
           
Exit For
           
End If
       
Next
       
On Error Resume Next 'NB si il n'y as pas d'adresse de cellule
        ActiveWindow.ScrollRow = TheRow
   
End If
End Sub


Une fois ce Code placé dans le Private Module de ThisWorkBook, le simple fait d'activer un hyperling 'local' (dans le classeur) devrait te renvoyer à la bonne ligne en top de fenêtre

Ceci devrait fonctionner d'une manière totalement transparent, tu copies/colles le Code dans le Private Module ThisWorkBook, et c'est tout, rien d'autre à faire...

Bon Après Midi et Week End
@+Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Et Hop !!! Boooum ! Abel, en plus pour ton anniversaire !!! lol

Sinon on est dacodac pour l'évènementielle 'FollowHyperlink' sauf que moi je vais vraiment chercher le numéro de Row et je le place en ScrollRow, ce qui a pour avantage de pouvoir s'adapter à n'importe quelle résolution d'écran...

Bon Week End à tous et toutes
@+Thierry
 

Mi_

XLDnaute Occasionnel
Re Thierry et Abel,

Je n'ai pas besoin de vrai hyperlink si je peux aller à la ligne X par macro.

J'ai donc essayé d'utiliser
Option Explicit

Sub TheScrollRollers()
Dim TheRow As Long

TheRow = Application.InputBox('Entrer un numéro de ligne', Type:=1)
ActiveWindow.ScrollRow = TheRow

End Sub
Mais qui necéssite d'entrer manuellement le numéro de la ligne cible.

Existe-t-il une variante automatique de ce macro ?

Je pourrais donc créer plusieurs macros comme différents 'hyperlinks', et assigner à chaque objet (qu'on clique) un macro, donc un 'hypelink' différent.

Merci de votre patience,
Mi
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonjour Mi_, Abelix.dll, le Forum

Pour ta dernière question le mieux est de te faire un dessin :



Ici c'est pour faire un message automatique à l'ouverture du Fichier, mais c'est bien le même Private Module de ThisWorkBook.

Pour ton autre question, je pense que si tu appliques ma solution, tu n'as pas besoin de faire autre chose en travaillant sur des Hyperlinks.

Maintenant en fait il suffirait de faire ceci pour ne pas à avoir à saisir dans l'InputBox le numéro de Ligne :

Sub TheScrollRollers()
Dim TheRow As Long

   
If IsNumeric(ActiveCell.Value) Then
        TheRow = ActiveCell.Value
        ActiveWindow.ScrollRow = TheRow
   
End If
End Sub

Mais c'est subordonné à ce que tu indiques le numéro adéquate dans la cellule quand même...

Bon Week End
@+Thierry
 

Mi_

XLDnaute Occasionnel
Thierry,

Oui efféctivement le dessin est très didactique, même moi j'ai réussi à comprendre ... :lol:

J'ai essayé quelques hyperlinks à partir de cellules et ça marche très bien.

Par contre (et ouin!), les hyperlinks à partir d'objets ne fonctionnent pas, et c'est exactement ce que j'avais besoin.

Existe-t-il un astuce pour les hyperlinks à partir d'objets ?

Merci,
Mi
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonsoir Mi_

Arf, dans mon jargon, on dit ça n'était pas prévu au cahier des charge !!! LOL

Non, je te dis d'avance Non, car là les Objets, tu ne vas pas pouvoir 'jouer' avec un évènementielle toute prête à l'emploi...

C'est quoi comme 'Objets' ? Des 'Shapes de Text', des 'Auto-Shapes', des 'Images', des 'ActiveX', des 'Tables', des 'Chaise', un 'Reblochon' ? (Mdr)

Disons que là je file du bureau dans 11 Minutes 43 Secondes... Mais si tu es précis dans ta réponse, je peux envisager une solution.

Bon Week End
@+Thierry
 

Discussions similaires

Réponses
5
Affichages
215

Statistiques des forums

Discussions
312 294
Messages
2 086 899
Membres
103 404
dernier inscrit
sultan87