Microsoft 365 Conserver lien hypertexte avec une fonction RechercheV

spike29

XLDnaute Occasionnel
Bonjour,

J'ai un fichier qui regroupe plusieurs fiches clients, une fiche client égale une feuil de calcul.
Dans la feuil "Liste", en cellule C15, j'ai une liste déroulante qui me permet via une recherche V de ressortir un descriptif de la fiche en cellule F15.
Dans la feuil de calcul "Données" se trouve en cellule I9 à I11 les données sources de cette rechercheV. Des liens hypertextes permettent directement de renvoyer l'utilisateur à la fiche concernée (fiches qui se trouvent dans le même classeur, ou parfois de renvoyer vers un autre fichier).

L'idée serait de pouvoir directement intégrer le lien hypertexte avec le résultat de la rechercheV. L'utilisateur n'aurait plus qu'a cliquer sur le résultat présent en cellule F15 de la Feuil Liste et serait directement renvoyé vers la fiche client concernée.

Afin d'illustrer mon propos un fichier reprenant ma problématique. J'ai testé deux formules mais sans succès :


- Formule 1 en cellule F15 => LIEN_HYPERTEXTE(RECHERCHEV(C15;Données!H9:I11;2;0))

- Formule 2 en cellule F16 => LIEN_HYPERTEXTE("#"&RECHERCHEV(C15;Données!H9:I11;2;0)&"!C7";RECHERCHEV(C15;Données!H9:I11;2;0))


Merci d'avance pour votre aide

Bonne journée

Cordialement,
 

Pièces jointes

  • TEST2.xlsx
    18 KB · Affichages: 6
Solution
En fait il est demandé d'afficher la feuille quand on clique sur le lien.

Donc utilisez dans le code de la feuille test :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$6" Then Exit Sub
Dim c As Range
Set c = Sheets("data").Columns(5).Find(Target(1), , xlValues, xlWhole)
Target(1, 2) = "" 'RAZ
If c Is Nothing Or Target = "" Then Exit Sub
Target(1, 2) = c(1, 2)
If c(1, 2).Hyperlinks.Count Then Hyperlinks.Add Target(1, 2), "", c(1, 2).Hyperlinks(1).SubAddress
End Sub
Et dans ThisWorkbook :
VB:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If LCase(Sh.Name) Like "truc*" Then Sh.Visible = xlSheetHidden 'masque la feuille
End Sub

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As...

spike29

XLDnaute Occasionnel
Bonsoir,

C'est parfait et le code fonctionne très bien chez moi après l'avoir adapté au fichier. Encore merci.

Je me permet une dernière question. Pour un souci de protection et de lisibilité sur le document, j'aimerai masquer l'ensemble des feuils de calcul vers lesquelles pointent les liens hypertexte. Toutefois, lorsque je fais cela, impossible au lien hypertexte de trouver la feuil cible.

Mon besoin :
Une Feuil de calcul masquée et associée au lien hypertexte doit pouvoir apparaître à l'utilisateur lorsqu'il va cliquer sur le lien situé en cellule C6 de la feuil data.

Je connais le code :

VB:
Sheets("xxxxxx)").Visible = True

Cependant, si tenté que cela soit possible, je ne vois pas trop où et comment l'insérer pour arriver à mes fins.

Le fichier en PJ.

Bonne soirée et encore merci :)
 

Pièces jointes

  • TEST2.xlsm
    34.1 KB · Affichages: 1

job75

XLDnaute Barbatruc
Bonjour spike29, le forum,

Voyez le fichier joint et cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$6" Then Exit Sub
Dim w As Worksheet, c As Range, sa$, feuille$
For Each w In Worksheets
    If LCase(w.Name) Like "truc*" Then w.Visible = xlSheetHidden 'masque les feuilles
Next w
Set c = Sheets("data").Columns(5).Find(Target(1), , xlValues, xlWhole)
Target(1, 2) = "" 'RAZ
If c Is Nothing Or Target = "" Then Exit Sub
Target(1, 2) = c(1, 2).Value
If c(1, 2).Hyperlinks.Count Then
    sa = c(1, 2).Hyperlinks(1).SubAddress
    Hyperlinks.Add Target(1, 2), "", sa
    feuille = Left(sa, InStr(sa, "!") - 1)
    On Error Resume Next
    If IsError(Sheets(feuille)) Then MsgBox "La feuille " & feuille & " n'existe pas !", 48: Exit Sub
    Sheets(feuille).Visible = xlSheetVisible 'affiche la feuille
End If
End Sub
A+
 

Pièces jointes

  • TEST2.xlsm
    34.9 KB · Affichages: 6

job75

XLDnaute Barbatruc
En fait il est demandé d'afficher la feuille quand on clique sur le lien.

Donc utilisez dans le code de la feuille test :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$6" Then Exit Sub
Dim c As Range
Set c = Sheets("data").Columns(5).Find(Target(1), , xlValues, xlWhole)
Target(1, 2) = "" 'RAZ
If c Is Nothing Or Target = "" Then Exit Sub
Target(1, 2) = c(1, 2)
If c(1, 2).Hyperlinks.Count Then Hyperlinks.Add Target(1, 2), "", c(1, 2).Hyperlinks(1).SubAddress
End Sub
Et dans ThisWorkbook :
VB:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If LCase(Sh.Name) Like "truc*" Then Sh.Visible = xlSheetHidden 'masque la feuille
End Sub

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal h As Hyperlink)
On Error Resume Next
With Evaluate(h.SubAddress)
    .Parent.Visible = xlSheetVisible 'affiche la feuille
    Application.Goto .Cells
End With
End Sub
 

Pièces jointes

  • TEST2.xlsm
    36.2 KB · Affichages: 1

spike29

XLDnaute Occasionnel
Bonjour,

Merci pour vos différents retours, cela fonctionne parfaitement.

J’ai légèrement modifié le code de sorte à ne faire apparaître que la feuil « test » à l’ouverture.

Le code :

VB:
Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets

With sh

If Not .Name = "test" Then .Visible = False

End With

Next

En effet, je ne l’ai pas précisé mais les autres feuils sont susceptibles de s’appeler autrement que truc*.

Entre temps, j’ai amélioré l’ergonomie de mon fichier en y ajoutant une liste déroulante en cascade, cellules A6 et B6 du fichier test.
Cette liste permet de réduire le nombre d'items à choisir en cellule B6 en fonction du critère sélectionné en cellule A6.

J'ai également tenté d'ajouter une liste déroulante avec auto-complétion dans la colonne B6 de la feuil test mais sans succès (elle n'est pas active dans le fichier en PJ).
En effet, même avec la liste déroulante en cascade, l'idée est de permettre une souplesse de recherche pour l'utilisateur.

Le détail du besoin est repris dans le fichier en PJ.


Je suppose que pour cumuler la liste déroulante imbriquée et l'autocomplétions il faut directement passer par VBA, mais je ne vois pas comment.

Merci d’avance pour vos retours et bonne journée :)
 

Pièces jointes

  • TEST4.xlsm
    43.6 KB · Affichages: 1

spike29

XLDnaute Occasionnel
Effectivement, ça devenait illisible.

J'ai fais du ménage côté codes, il ne reste que le nécessaire.
Côté liste de validation, la liste en cascade fonctionne (cellule A6). Selon que l'on sélectionne A,B,C ou D en cellule A6, cela modifie le choix de valeur en B6.

Le besoin serait d'ajouter en plus de cette liste déroulante en cascade, une liste avec auto-complétions en cellule B6 afin de simplifier le choix de l'utilisateur.
Sur ce fichier de test et totalement anonymisé, mon besoin peut paraître relativement futile, mais mon véritable fichier est amené à brasser un certain nombre de données et le cumul de ces deux fonctions (liste en cascade + liste avec auto-complétions) serait utile.

En PJ, le fichier dans sa version clarifiée (TEST5).

Merci encore pour votre aide et votre patience.
 

Pièces jointes

  • TEST5.xlsm
    41.7 KB · Affichages: 3

spike29

XLDnaute Occasionnel
Ah mince, effectivement elles ne passent que depuis la version 365 il me semble. Peuvent elles se transposer sous VBA ? En prenant en compte que le tableau de données situé feuil "data" est amené à se poursuivre au delà de la ligne 23.

Merci d'avance,

Bonne fin de journée
 

Discussions similaires

Réponses
5
Affichages
424
Réponses
7
Affichages
677

Membres actuellement en ligne

Statistiques des forums

Discussions
314 121
Messages
2 106 128
Membres
109 495
dernier inscrit
jerome bonneau