Lien hypertexte selon choix
Bonjour les amis,
Je souhaiterais savoir si quelqu'un aurait une solution pour qu'un lien hypertexte aille chercher une feuille différente selon un choix donné.
Par exemple j'ai un lien hypertexte en B7. Si je mets la valeur 1 dans une case B5, le lien appelle la Feuille 2. Si je mets la valeur 2 dans la même case B5, alors le lien appelle la Feuille 3 (exemple du fichier joint).
Merci d'avance si cela vous parle et bonne soirée
Bonsoir,
Pourquoi mettre 1 pour appeler Feuil2 et 2 pour appeler Feuil3 ? Plutôt que tout simplement 2 pour Feuil2 et 3 pour Feuil3 !
Et pourquoi un lien hypertexte qui ne s'activera pas tout seul au lieu d'afficher la feuille voulue à la validation de la valeur saisie dans la cellule ?
Et, tant qu'on y est, pourquoi taper (d'autant que Feuil2 et Feuil3 n'existant pas dans ton classeur, elles n'ont aucune chance de s'afficher !
Cordialement.
Bonjour les amis,
Je souhaiterais savoir si quelqu'un aurait une solution pour qu'un lien hypertexte aille chercher une feuille différente selon un choix donné.
Par exemple j'ai un lien hypertexte en B7. Si je mets la valeur 1 dans une case B5, le lien appelle la Feuille 2. Si je mets la valeur 2 dans la même case B5, alors le lien appelle la Feuille 3 (exemple du fichier joint).
Merci d'avance si cela vous parle et bonne soirée
Bonsoir,
MFerrand a eu la gentillesse de me répondre cela.
Pourquoi mettre 1 pour appeler Feuil2 et 2 pour appeler Feuil3 ? Plutôt que tout simplement 2 pour Feuil2 et 3 pour Feuil3 !
Malheureusement au lieu de cliquer sur répondre j'ai validé !!! Pas très futé le mec. Bref toutes mes excuses à Mferrand s'il me lit.
J'ai refait le tableau avec plus d'explications et en tenant compte des observations de Mferrand, car je n'étais pas clair. J'espère que l'un d'entre vous pourra me donner une solution
Bonne journée à vous tous.
Bonjour Marctango, MFerrand, le forum,
Un essai :
Private Sub Worksheet_Change(ByVal Target As Range)
If Sheets("Feuil1").Range("B5") = "2" Then
Sheets("Feuil1").Range("B13").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
"Feuil2!A1", TextToDisplay:="Feuil2!A1"
Else
If Sheets("Feuil1").Range("B5") = "3" Then
Sheets("Feuil1").Range("B13").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
"Feuil3!A1", TextToDisplay:="Feuil3!A1"
End If
End If
End SubCode généré à partir de l'enregistreur de macro....peut certainement être amélioré
Cordialement,
Merci pour cette rapidité.
Cela fonctionne super bien.
Je vais travailler cette codification
Merci encore et bonne journée
Bonjour,
Illustration de mon propos ! Illustratration complétée par tes indications complémentaires !
1) Suppression des liens hypertextes (ceux existants !
2) Procédure de mise en place d'une validation en Feuil1!B5 :
Sub ListerFeuilles()
Dim Lst, ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Feuil1" Then
Lst = Lst & "," & ws.Name
End If
Next ws
Lst = Replace(Lst, ",", "", 1, 1)
With Worksheets("Feuil1").Range("B5").Validation
.Delete
.Add xlValidateList, , , Lst
End With
End Sub3) Appel de cette procédure (figurant en Module1) à l'ouverture du classeur :
Private Sub Workbook_Open()
If ActiveSheet.Name = "Feuil1" Then
ListerFeuilles
Else
Worksheets("Feuil1").Activate
End If
End Sub[dans le module ThisWorkbook]
et à l'activation de la feuille :
Private Sub Worksheet_Activate()
ListerFeuilles
End Sub[dans le module Feuil1]
4) Formules (en Feuil1) :
en B10 :
=SI($B$5<>"";DECALER(INDIRECT(ADRESSE(EQUIV($A$10;INDIRECT("'"&$B$5&"'!A:A");0);1;;;$B$5));;COLONNE()-1);"")étendue sur la ligne jusqu'en E10
en B13 :
=T(B5)5) En sélection d'un nom de feuille en B5, la ligne 10 affiche la ligne Total de la feuille indiquée. B13 affiche également le nom de la feuille.
Si l'utilisateur clique en B13 (sélectionne la cellule) : déclenchement d'un procédure SelectionChange (en module Feuil1) :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim nF$
If Target.Address = "$B$13" Then
nF = Target
If nF <> "" Then
With Worksheets(nF)
.Visible = xlSheetVisible
.Activate
.Range("A1").Select
End With
End If
End If
End SubLa feuille est rendue visible et activée.
6) Lorsque l'utilisateur clique sur B1 d'une feuille (sauf Feuil1), cellule portant la mention "retour" : déclenchement d'une procédure SheetSelectionChange (dans module ThisWorkbook) :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Sh.Name
Case "Feuil1"
Case Else
If Target.Address = "$B$1" Then
With Worksheets("Feuil1")
.Activate
.Range("B5").Select
End With
Sh.Visible = xlSheetVeryHidden
End If
End Select
End SubLa feuille concernée est masquée et Feuil1 activée...
7) Il resterait, pour le cas où l'utilisateur n'utilise pas le "retour", à programmer une proc. classeur BeforeSave, pour masquer les feuilles qui ne l'auraient pas été avant enregistrement.
Et éventuellement si d'autre particularités sont introduites...
Cordialement.