Programmation lien hypertex sous excel

Evinrude44 -  
frantzb Messages postés 33 Statut Membre -
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 Statut Membre 22
 
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
Evinrude44
 
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
Evinrude44
 
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
Evinrude44
 
UN DERNIER TRUC.

MON PROBLEME EST RESOLU
------------------------------------------
------------------------------------------
0
frantzb Messages postés 33 Statut Membre 22
 
Alors peux-tu mettre en résolu cette question ? Merci
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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