XL 2013 Liens hypertexte / Nouvelle onglet

M.Ben

XLDnaute Junior
Bonjour la communauté,

Je vous contacte car après plusieurs recherches, je n'arrive pas à trouver (ou comprendre) comment arriver à la solution.
Je vous explique, j'ai un UserForm qui me permet de créer des onglets (ça je suis arrivé à le gérer) et pour chaque onglet créée, le nom de l'onglet s'inscrit dans un onglet nommé "Bibliothèque" qui ne change pas.
Mon souhait serait de pouvoir créer un lien hypertexte de cette onglet créer dans ma bibliothèque. Le but est que si je crée beaucoup de feuilles, que je puisse en passant par ma bibliothèque navigué entre mes onglets facilement.

PS: Dans ma bibliothèque j'ai 3 colonnes (1 par type de feuille), ci-dessous l'entête de ma bibliothèque,
1667395373189.png

Ci-dessous: 1 des 3 code qui me permet de dupliquer 1 onglet masqué et qui ajoute le nom de l'onglet à la bibliothèque:
Private Sub CmbValiderCreerChaine_1_Click()
Dim MyVar As Byte
If Me.OptCreationChaine1 = True Then 'Si la case Création chaine page 2 est coché
If Me.ComboJeuConnuACreer1 <> "" Then 'Si la combobox page 2 est différent de vide ?
Application.ScreenUpdating = False
Worksheets("Calculs chaine de cotation").Visible = True
Sheets("Calculs chaine de cotation").Select 'Selectionne l'onglet à copier/dupliquer
Sheets("Calculs chaine de cotation").Unprotect "1111"
Sheets("Calculs chaine de cotation").Copy After:=Sheets("Calculs chaine de cotation") 'Duplique l'onglet apres l'onglet Tolérances alésage
Worksheets("Calculs chaine de cotation").Protect "1111", False, True, True
Worksheets("Calculs chaine de cotation").Visible = False
On Error Resume Next
ActiveSheet.Name = Me.ComboJeuConnuACreer1
If Err <> 0 Then
MsgBox "Le nom de la chaîne à créer n'est pas possible, certains caractères ne sont pas acceptés par excel ou la chaîne existe déjà.", vbExclamation
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
Exit Sub
End If
On Error GoTo 0
ActiveSheet.Unprotect
Range("C4") = "N° Affaire"
Range("E3") = "Titre 1"
Range("E5") = "Titre 2"
Range("F7") = "Nom chaîne"
Range("A16:H40").ClearContents
ActiveSheet.Protect
On Error Resume Next
MyVar = Application.WorksheetFunction _
.Match(Me.ComboJeuConnuACreer1, Sheets("Bibliothèque").Range("B1:B200"), 0)
If Err <> 0 Then
Sheets("Bibliothèque").Range("B" & Sheets("Bibliothèque").Range("B20").End(xlUp).Row + 1) = Me.ComboJeuConnuACreer1
MsgBox " Chaîne : " & Me.ComboJeuConnuACreer1 & " crée"
ComboJeuConnuACreer1.AddItem (ComboJeuConnuACreer1)
On Error GoTo 0
ComboJeuConnuACreer1 = ""
OptCreationChaine1 = False
Me.MultiPage1.Page1.Visible = True
Me.MultiPage1.Page2.Visible = False
Me.MultiPage1.Value = 0
Exit Sub
End If
Else
MsgBox "Merci de renseigner un nom à cette nouvelle chaîne", vbExclamation
Exit Sub
End If
On Error GoTo 0
ElseIf Me.OptDeleteChaine1 = True Then
MyVar = Application.WorksheetFunction _
.Match(Me.ComboJeuConnuACreer1, Sheets("Bibliothèque").Range("B1:B200"), 0)
Sheets("Bibliothèque").Range("B" & MyVar).Delete Shift:=xlUp
Application.DisplayAlerts = False
Worksheets(ComboJeuConnuACreer1.Value).Delete
Application.DisplayAlerts = True
MsgBox "Chaîne : " & Me.ComboJeuConnuACreer1 & " supprimé"
ComboJeuConnuACreer1.RemoveItem (ComboJeuConnuACreer1.ListIndex)
ComboJeuConnuACreer1 = ""
OptDeleteChaine1 = False
Me.MultiPage1.Page1.Visible = True
Me.MultiPage1.Page2.Visible = False
Me.MultiPage1.Value = 0
Else
MsgBox " Merci de sélectionner création ou suppressions de chaîne", vbExclamation
End If
End Sub
J'aurai bien voulu vous joindre le fichier pour que cela soit plus claire, mais il est trop volumineux (1 995 Ko) , si vous avez une solution pour que je puisse vous le partager je suis preneur. Ca faciliterai les échange car j'ai peur que mon explication soit trop flou.

Merci d'avance de vos retours.
 
Solution
Correction à apporter à ton code
VB:
MsgBox " Chaîne : " & Me.ComboJeuConnuACreer1 & " créée"
            With Sheets("Bibliothèque")
                Set LienHyp = .Range("B" & .Range("B20").End(xlUp).Row)  'cellule qui aura le lien hypertexte
                .Hyperlinks.Add anchor:=LienHyp, Address:="", SubAddress:=LienHyp.Value & "!A1", TextToDisplay:=LienHyp.Value
                ComboJeuConnuACreer1 = LienHyp.Value 'nom de la feuille cible
            End With

vgendron

XLDnaute Barbatruc
Hello

un bout de code ici pour te montrer la syntaxe à utiliser pour créer un lien hypertexte
il te suffit d'adapter et placer au bon endroit dans ta macro. (au moment où tu enregistre le nom du nouvel onglet dans ta feuille "Bibliothèque"
VB:
Sub Macro1()

    Set Lienhyp = Range("A2") 'cellule qui aura le lien hypertexte
    NomNouvelleFeuille = Lienhyp.Value 'nom de la feuille cible

    ActiveSheet.Hyperlinks.Add Anchor:=Lienhyp, Address:="", SubAddress:=NomNouvelleFeuille & "!A1", TextToDisplay:=NomNouvelleFeuille
End Sub
 

M.Ben

XLDnaute Junior
Hello

un bout de code ici pour te montrer la syntaxe à utiliser pour créer un lien hypertexte
il te suffit d'adapter et placer au bon endroit dans ta macro. (au moment où tu enregistre le nom du nouvel onglet dans ta feuille "Bibliothèque"
VB:
Sub Macro1()

    Set Lienhyp = Range("A2") 'cellule qui aura le lien hypertexte
    NomNouvelleFeuille = Lienhyp.Value 'nom de la feuille cible

    ActiveSheet.Hyperlinks.Add Anchor:=Lienhyp, Address:="", SubAddress:=NomNouvelleFeuille & "!A1", TextToDisplay:=NomNouvelleFeuille
End Sub
Merci vgendron, je vais essayer de voir où et comment l'intégrer dans mon code.
Je vous tiendrez informé
 

M.Ben

XLDnaute Junior
Hello

un bout de code ici pour te montrer la syntaxe à utiliser pour créer un lien hypertexte
il te suffit d'adapter et placer au bon endroit dans ta macro. (au moment où tu enregistre le nom du nouvel onglet dans ta feuille "Bibliothèque"
VB:
Sub Macro1()

    Set Lienhyp = Range("A2") 'cellule qui aura le lien hypertexte
    NomNouvelleFeuille = Lienhyp.Value 'nom de la feuille cible

    ActiveSheet.Hyperlinks.Add Anchor:=Lienhyp, Address:="", SubAddress:=NomNouvelleFeuille & "!A1", TextToDisplay:=NomNouvelleFeuille
End Sub
Bonjour vgendron,
Alors j'ai essayé de placer le bout de code que tu as donné à différent emplacement dans mon code (au niveau de l'endroit qui s'occupe d'enregistrer le nom de l'onglet dans la bibliothèque) et je n'arrive pas à aboutir.
Le côté positif c'est que ça ne me génère pas d'erreur, le code s'exécute il ne fait pas le liens hypertexte.

Comment je pourrais faire pour transmettre le fichier excel s'il faut ? (un moyen de compresser un classeur?)

Et j'ai une question à quoi correspond le mot "!A1" dans la ligne de codage ?
 

vgendron

XLDnaute Barbatruc
Hello
pour alleger le fichier: suffit de ne garder que quelques lignes de données

pour le A1: il s'agit de la cellule visée sur la feuille par la lien hypertexte==> pour obtenir cette ligne de code, j'ai juste utilisé l'enregistreur de macro
tu dis que le lien hypertexte n'est pas créé: En es tu certain?? ne serait il pas créé sur une autre feuille que tu penses.. celle qui est active au moment de l'éxecution de la macro par exemple?
 

M.Ben

XLDnaute Junior
Hello
pour alleger le fichier: suffit de ne garder que quelques lignes de données

pour le A1: il s'agit de la cellule visée sur la feuille par la lien hypertexte==> pour obtenir cette ligne de code, j'ai juste utilisé l'enregistreur de macro
tu dis que le lien hypertexte n'est pas créé: En es tu certain?? ne serait il pas créé sur une autre feuille que tu penses.. celle qui est active au moment de l'éxecution de la macro par exemple?
Alors, pour répondre à ta question, oui j'en suis sûr que le lien n'est pas créé, j'ai regardé dans toutes mes feuilles pour voir et je n'ai rien vu.

J'ai pu enfin joindre mon fichier (Gros régime) c'étaient les images que j'ai mis dans mon UserForme et autre qui gonflaient le volume du fichier.

Ca sera plus parlant, pour pointer ce qui pose problème .
 

Pièces jointes

  • Calculs chaine de cotation - C1.zip
    313.7 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
Correction à apporter à ton code
VB:
MsgBox " Chaîne : " & Me.ComboJeuConnuACreer1 & " créée"
            With Sheets("Bibliothèque")
                Set LienHyp = .Range("B" & .Range("B20").End(xlUp).Row)  'cellule qui aura le lien hypertexte
                .Hyperlinks.Add anchor:=LienHyp, Address:="", SubAddress:=LienHyp.Value & "!A1", TextToDisplay:=LienHyp.Value
                ComboJeuConnuACreer1 = LienHyp.Value 'nom de la feuille cible
            End With
 

M.Ben

XLDnaute Junior
Correction à apporter à ton code
VB:
MsgBox " Chaîne : " & Me.ComboJeuConnuACreer1 & " créée"
            With Sheets("Bibliothèque")
                Set LienHyp = .Range("B" & .Range("B20").End(xlUp).Row)  'cellule qui aura le lien hypertexte
                .Hyperlinks.Add anchor:=LienHyp, Address:="", SubAddress:=LienHyp.Value & "!A1", TextToDisplay:=LienHyp.Value
                ComboJeuConnuACreer1 = LienHyp.Value 'nom de la feuille cible
            End With
Merci pour ton aide, cela résout mon problème, la fonction With permet d'isoler les lignes pour créer les liens à ma feuille bibliothèque? Ou elle a une fonction particulière?
 

vgendron

XLDnaute Barbatruc
je pense que tu avais plusieurs problèmes

le with permet de travailler sur une feuille SANS avoir besoin de l'activer
MAIS attention à ne pas oublier le point . devant l'objet qu'on souhaite utiliser
exemple
sheets("Biblio").range("A" &range("B20").end(xlup).row)
ici; l'objet range ("Axx") est bien la range de la feuille Biblio, puisque tu précises: sheets("biblio").range("A")

MAIS le range("B20")... est l'objet range("B20") de la feuille ACTIVE !
donc.. si tu es sur une autre feuille que Biblio, tu t'exposes à un résultat hasardeux..
il aurait donc fallu ecrire
sheets("Biblio").range("A" &sheets("biblio").range("B20").end(xlup).row)
l'intérêt du with apparait la encore=> ca "allège" la syntaxe
with sheets("Biblio") ==+> on spécificie bien qu'on travaille sur la feuille
.range("A" & .range("B20").end(xlup).row)
end with
le point devant chaque range spécifie bien la feuille de travail..

ensuite ton autre problème (je pense; pas vérifié)
c'est qu'une fois le set lienHyp effectué (lienHyp est bien un objet range)
tu faisais: ComboJeuConnuACreer1 = LienHyp.Value
et tu réutilisais le combojeuconnuacreer1 dans l'écriture du lien hypertexte==> je pense qu'il y a un souci sur la syntaxe: la où elle attendu un objet range, tu ne mettais que la valeur de l'objet..
 

Discussions similaires