Programmation lien hypertex sous excel

Fermé
Evinrude44 - 2 juin 2008 à 16:54
frantzb Messages postés 33 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 26 avril 2013 - 27 juin 2008 à 15:20
Bonjour,

J'ai sous excel un classeur avec plain d'onglets (11 pour le moment).
Pour faciliter la navigation j'ai récupéré un petit code bien sympa, c'est le suivant que j'ai adapté à ma sauce.
il tourne presque c'est à dire une feuille "PRESENTATION" se crée mais les liens sont bien "écris" mais restent inactifs. lorsque je lance la marcro excel le message "Référence Non valide" s'affiche.

mais avec une petite adaptation de la forme suivante pour chaque onglet tout marche :

Range("D3").Select
Selection.Hyperlinks(1).SubAddress = "'Global menu'!A1"
Range("D4").Select
Selection.Hyperlinks(1).SubAddress = "'Main Menu'!A1"
Range("D5").Select
Selection.Hyperlinks(1).SubAddress = "'Human User Indicator'!A1"

Et comme ça pour chaque onglet !!!

Donc je voudrais faire une formule qui regroupe les lignes précédentes en une seule au lieu.
Le texte de chauq onglet est stocké dans les cellules A2 à A(I) (I=au nombre d'onglet)
Une formule qui récupère le contenu d'une cellule et affecte un lien hyperlink lié au nom de cette cellule.

Je pense qu'un peu de code clarifiera tout ça...

DONC VOILA CE QUE J'AI
---------------------------------------------------------------------------------------------------------------------------------------
Sub ListeFeuilles()

Dim I As Integer

' Macro enregistrée le 02/06/2008


Application.ScreenUpdating = False
Set nSht = Sheets.Add(Before:=Sheets(1))
On Error GoTo GesErr

DebProc:
nSht.Name = "PRESENTATION"
[A1] = "List of workbook's tabs"
With Selection.Font
.Bold = True
.Size = 14
End With

For I = 3 To Sheets.Count
nSht.Cells(I, 1).Value = Sheets(I).Name
With Worksheets(nSht.Name)
ActiveSheet.Hyperlinks.Add Anchor:=.Cells(I, 4), _
Address:="", SubAddress:=Sheets(I).Name & "!A1", _
TextToDisplay:="Link to " & Sheets(I).Name

Range("A" & I).Select
' Selection.Hyperlinks(1).SubAddress = "Range("A" & I)" <========PLANTAGE ICI MA FORMULE EST H/S

End With

Next I

With Rows("1:1")
.RowHeight = 40
.VerticalAlignment = xlCenter

End With
[E2].Activate
ActiveWindow.DisplayGridlines = False



Exit Sub

GesErr:
Application.DisplayAlerts = False
Sheets("PRESENTATION").Delete
Application.DisplayAlerts = True
GoTo DebProc


End Sub


-------------------------------------------------------------------------------------------------------------------------------------
TOUT MARCHE AVEC CES MODIFS

Range("D3").Select
Selection.Hyperlinks(1).SubAddress = "'Global menu'!A1"
Range("D4").Select
Selection.Hyperlinks(1).SubAddress = "'Main Menu'!A1"
Range("D5").Select
Selection.Hyperlinks(1).SubAddress = "'Human User Indicator'!A1"


==========================================================

JE VEUX UNE FORMULE QUI M'EVITE DE TOUT RETAPER CHAQUE FOIS QU'UN ONGLET S'AJOUTE...


Moi je n'y arrive pas, je vois bine que la fonction Selection.Hyperlinks(1).SubAddress attend une chaine de carctères , mais je suis incapable de récupérer cette chaine qui se trouve dans les cellules A2 à A(I).


C'est tout ce qui me manque pour en finir avec mon programme.
A voir également:

4 réponses

frantzb Messages postés 33 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 26 avril 2013 22
2 juin 2008 à 18:07
Bonjour Evinrude44,
Utilise .value après avoir "positionné" (méthode au choix selon environnement) le curseur sur A(i) dans une boucle de i
si les noms des onglets sont non structurés alors les placer dans une table fonction de(i)
Espérant avoir aidé,
Frantzb
0
Salut frantzb,

Premièrement merci pour ta réponse.
J'ai essayé de mettre ça en œuvre hier et un peu ce matin et je dois reconnaître que je bloque complètement.
Le code initial que j'ai récupéré devrait marcher, mais il ne fonctionne pas pour une raison indéterminée.
Je cherche donc juste à trouver une adaptation. Comme tu l'as remarqué en recopiant de manière manuelle pour chaque onglet le code :

Range("D3").Select
Selection.Hyperlinks(1).SubAddress = "'Global menu'!A1"
Range("D4").Select
Selection.Hyperlinks(1).SubAddress = "'Main Menu'!A1"
Range("D5").Select
Selection.Hyperlinks(1).SubAddress = "'Human User Indicator'!A1"

Ça marche, mais ça me casse les pieds de refaire la même manipulation pour chaque nouveau onglets que j'aurai à créer.

Ta proposition est intéressante, mais je ne sais pas comment en programmation VBA , mettre en forme des chaînes de caractères.

Dans mon cas j'ai des cellules A(1) à A(5) par exemple.
Chaque cellule contient le nom de un des 5 onglets de mon classeur.
Il faut donc que je travaille d'une certaine manière afin que le tableau F(I) avec I allant de 1 à 5, pour qu'en finalité F(1) soit de la forme "'Global menu'!A1".
La méthode rpoposé dans le code initial ne marchand pas il faut que je travaille d'une autre manière..

SI QUELQU'UN EN PLUS DE frantzb PEUT M'APPORTER SON AIDE QU'IL NE SE GENE PAS.
DE MON COTE J'ESSYE DE CREUSER...
DERNIERE REMARQUE CETTE APPLI JE DOIS ABSOLUMENT LA TERMINER POUR CE SOIR AU PLUS TARD CAR J'AI UNE DEMO A FAIRE DEMAIN MATIN.
LE STRESS S'INSTALLE !

HEEEEELLLLLLLLLLLLLLLLLLLLPPPPP !!!
0
Salut,

Pour ceux que ce code intéresse, il fonctionne très bien et permet d'avoir un sommaire listant tous les onglets ouvert.
ATTENTION LE NOM DES ONGLETS NE DOIT PAS COMPORTER DES CARACTERES SEPARATEUR COMME ( ) / \ - _ ET AUSSI LE CARACTERE VIDE N'EST PAS ERECONNU.

VOILA ET ENCORE MERCI A CELUI QUI M'A AIDE.
0
UN DERNIER TRUC.


MON PROBLEME EST RESOLU
------------------------------------------
------------------------------------------
0
frantzb Messages postés 33 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 26 avril 2013 22
27 juin 2008 à 15:20
Alors peux-tu mettre en résolu cette question ? Merci
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
3 juin 2008 à 19:23
Bonsoir,

si la page 'sommaire' n'est pas indispensable un clic-droit dans la zone de changement de feuille (à gauche du 1er onglet) donne une liste déroulante avec les noms de toutes les feuilles, dans l'ordre où elles sont.

eric
0