XL 2010 lien hypertexte dans un userform

Barbouille79

XLDnaute Nouveau
Bonjour, comme je ne suis que débutante dans le domaine de la VBA, je ne suis pas sûre de savoir chercher les posts du même sujet. Veuillez m’en excuser d’avance, mais comme je ne sais pas vraiment ce que je cherche, c’est compliqué de l’exprimer clairement.

Voilà, je travaille actuellement sur base de donnée (excel), une base de quelques milliers de lignes.
Cette base est en réseau (appelé ici “passerelle”)
Afin de faciliter la recherche des informations pour mon équipe, j’ai créé une fenêtre de recherche (un userform). Et c’est après ça que coince!!!
:smirk:


Je ne sais pas inclure les liens hypertextes contenus dans ma base de données à mon formulaire.
Donc, c’est là que j’ai UN GRAND BESOIN DE VOUS.
Je voudrais que lorsque le userform est ouvert, on puisse cliquer sur la ligne qui intéresse et ouvrir le dossier qui en dépend.
Pas sûr que je sois très claire… franchement pas évident!!
Je peux vous faire parvenir un exemple de mon fichier si ça peut aider à m’aider
:wink:


Merci d’avance de venir à mon secours, je suis coincée et du coup je peux plus avancer!!!

A très vite
 

Fichiers joints

xUpsilon

XLDnaute Impliqué
Bonjour,

Je suis pas sur de comprendre exactement comment fonctionne ta listbox mais tu peux utiliser l'évènement Listbox_DblClick. Comme ça dès que qqun double click sur un item de ta listbox tu récupères l'item, et via cet item tu appelles le fichier en question via un FollowHyperLink Address:= ThisWorkbook.Path & blablabla.

Bonne continuation
 

Barbouille79

XLDnaute Nouveau
Bonjour,
Bien, alors là, je suis totalement perdue... je n'ai absolument rien compris... je ne suis que débutante!!! pour le moment je bidouille, je cherche, et quand je trouve j'adapte!! ça reste très compliqué.
Un petit coup de pouce serait bienvenu ;)
 

xUpsilon

XLDnaute Impliqué
Re,

Au temps pour moi, voyant ce qu'il y avait dans le code du UserForm je pensais que tu connaissais déjà un petit peu !
Bien faisons quelques explications :
- Dans le code d'un Userform, tu peux appliquer différents bouts de code qui s'exécuteront à la suite de tel ou tel évènement appliqué à tel ou tel objet de ton UserForm. Prenons l'exemple de ce que tu as déjà fait : 1579603393779.png
Tu peux voir que tu as Private Sub UserForm_Initialize. Cela veut dire que ce bout de code va s'exécuter à l'initialisation (initialize) du UserForm. Cette déclaration de "quand et pour qui" va s'exécuter cette macro, tu peux la gérer via les menus déroulants en haut comme ceci pour le UserForm par ex :
1579603498220.png

- Sur ton UserForm, tu as inséré une ListBox, pour afficher tes fichiers visiblement. Cette Listbox, tu peux donc y attribuer un code qui sera attaché à l'évènement "Double cliquer sur un item de la listbox". En choisissant correctement les arguments dans les menus déroulants tu vas avoir ça :
1579603581801.png

- Ensuite, dans ce bout de code, pour avoir un hyperlien, tu vas entrer une commande qui s'appelle ThisWorkbook.FollowHyperLink Address := ____ . Cela fait que Excel va chercher et ouvrir le fichier dont le chemin complet est ____ .
- Ici, visiblement le fichier à ouvrir est stocké dans le même dossier que le Excel, puis dans le dossier "DOC A OUVRIR". Pour l'ouvrir, tu auras donc besoin de Address:=ThisWorkbook.Path & "DOC A OUVRIR" & ____ . ThisWorkbook.Path te permet d'éviter de te taper tout le chemin à écrire, "DOC A OUVRIR" correspond au nom de ton dossier, et ____ correspond au nom du fichier précis que tu souhaites ouvrir.

J'espère que j'ai été suffisamment clair.

Bonne continuation
 

Barbouille79

XLDnaute Nouveau
Oui, et merci de me donner un peu de ton temps... Comme j'ai dis plus haut, je cherche et je bidouille, mais là j'suis pas trop à l'aise.
Dans mon fichier exemple, le dossier à ouvrir est en effet stocké au même endroit que mon fichier excel... mais dans la vrai vie, pas du tout. Mon fichier excel est à la racine des autres.
Le problème qui se pose (en tout cas, un truc que je n'ai pas compris!! ) c'est que mes fichiers n'ont pas la même racine de noms et ne sont pas du tout au même emplacement.
Je ne sais pas comment aller les cherche via mon hypertexte.
N'y a t'il pas une possibilité d'ouvrir le lien hypertexte qui, dans mon exemple, se trouve sur ma feuille "BD"?????
 

xUpsilon

XLDnaute Impliqué
Re,

Si les adresses sont toutes très différentes, tu peux faire en sorte que tu attaches chaque élément de ta listbox à un élément de ta liste stockée sur une feuille. Du genre le premier élément de ta listbox correspond à l'hyperlien stocké en A1 et ainsi de suite tu vas entrer qqchose comme ça :
VB:
ThisWorkbook.FollowHyperLink Address:=Range("A" & Listbox1.Listindex + 1)
Le listindex de ta listbox est la ligne sélectionnée de ta listbox. Il faut rajouter 1 car les index d'une listbox commencent à 0.
Ceci n'est qu'un exemple, il faut que tu l'adaptes à ta situation. Par exemple, si ta liste sur la feuille commence en C3 tu vas remplacer Range("A" & Listbox1.Listindex +1) par Range("C" & Listbox1.Listindex + 3).

Plusieurs choses auxquelles il faut faire attention en revanche :
- ça fonctionnera uniquement si ce qu'il y a dans la cellule en question est le chemin complet du fichier
- si il y a plusieurs feuilles sur ton document, il faut préciser la feuille à laquelle tu fais référence (par défaut le code cherche dans la feuille active), donc ici tu rajoutes Worksheets(___). devant Range(). Sachant que ___ peut être soit l'indice de la feuille (sa position donc, numéroté de 1 au nombre de feuilles), soit son nom inséré entre guillemets ("BD" par exemple ici).

Est-ce que ça te parait mieux ?

Bonne continuation

PS : C'est toujours plaisant de prendre du temps pour expliquer à qqun qui cherche à comprendre ;)
 

Barbouille79

XLDnaute Nouveau
je te remercie infiniment.
Je vais tenter ma chance et puis je me permettre de revenir vers toi si toutefois j'ai un souci?????

En tout cas merci encore. ;)
:D
 

Barbouille79

XLDnaute Nouveau
Re,

Si les adresses sont toutes très différentes, tu peux faire en sorte que tu attaches chaque élément de ta listbox à un élément de ta liste stockée sur une feuille. Du genre le premier élément de ta listbox correspond à l'hyperlien stocké en A1 et ainsi de suite tu vas entrer qqchose comme ça :
VB:
ThisWorkbook.FollowHyperLink Address:=Range("A" & Listbox1.Listindex + 1)
Le listindex de ta listbox est la ligne sélectionnée de ta listbox. Il faut rajouter 1 car les index d'une listbox commencent à 0.
Ceci n'est qu'un exemple, il faut que tu l'adaptes à ta situation. Par exemple, si ta liste sur la feuille commence en C3 tu vas remplacer Range("A" & Listbox1.Listindex +1) par Range("C" & Listbox1.Listindex + 3).

Plusieurs choses auxquelles il faut faire attention en revanche :
- ça fonctionnera uniquement si ce qu'il y a dans la cellule en question est le chemin complet du fichier
- si il y a plusieurs feuilles sur ton document, il faut préciser la feuille à laquelle tu fais référence (par défaut le code cherche dans la feuille active), donc ici tu rajoutes Worksheets(___). devant Range(). Sachant que ___ peut être soit l'indice de la feuille (sa position donc, numéroté de 1 au nombre de feuilles), soit son nom inséré entre guillemets ("BD" par exemple ici).

Est-ce que ça te parait mieux ?

Bonne continuation

PS : C'est toujours plaisant de prendre du temps pour expliquer à qqun qui cherche à comprendre ;)
Re,

Si les adresses sont toutes très différentes, tu peux faire en sorte que tu attaches chaque élément de ta listbox à un élément de ta liste stockée sur une feuille. Du genre le premier élément de ta listbox correspond à l'hyperlien stocké en A1 et ainsi de suite tu vas entrer qqchose comme ça :
VB:
ThisWorkbook.FollowHyperLink Address:=Range("A" & Listbox1.Listindex + 1)
Le listindex de ta listbox est la ligne sélectionnée de ta listbox. Il faut rajouter 1 car les index d'une listbox commencent à 0.
Ceci n'est qu'un exemple, il faut que tu l'adaptes à ta situation. Par exemple, si ta liste sur la feuille commence en C3 tu vas remplacer Range("A" & Listbox1.Listindex +1) par Range("C" & Listbox1.Listindex + 3).

Plusieurs choses auxquelles il faut faire attention en revanche :
- ça fonctionnera uniquement si ce qu'il y a dans la cellule en question est le chemin complet du fichier
- si il y a plusieurs feuilles sur ton document, il faut préciser la feuille à laquelle tu fais référence (par défaut le code cherche dans la feuille active), donc ici tu rajoutes Worksheets(___). devant Range(). Sachant que ___ peut être soit l'indice de la feuille (sa position donc, numéroté de 1 au nombre de feuilles), soit son nom inséré entre guillemets ("BD" par exemple ici).

Est-ce que ça te parait mieux ?

Bonne continuation

PS : C'est toujours plaisant de prendre du temps pour expliquer à qqun qui cherche à comprendre ;)
je te remercie infiniment.
Je vais tenter ma chance et puis je me permettre de revenir vers toi si toutefois j'ai un souci?????

En tout cas merci encore. ;)
:D
 

Barbouille79

XLDnaute Nouveau
Re,

N'hésite pas à revenir dès que tu en as besoin, je suis là pour ça ! ;)

Bonne continuation

Bonjour xUpsilon,

Voilà, je vois bien là, où sont mes limites...
J'ai retourné le truc dans tous les sens... je ne vois pas du tout ce que je dois faire de "ThisWorkbook.FollowHyperlink Address:=Range("D" & ListBox1.ListIndex + 1)"

suis totalement dans les choux...

j'crois bien que j'ai encore besoin de tes lumières!!
 

xUpsilon

XLDnaute Impliqué
Re,

Détaillons la phrase :
- ThisWorkbook : ce classeur
- .FollowHyperLink : suivre l'hyperlien
- Address := : dont l'adresse (le chemin) est
- Range : le contenu de la cellule
- "D" : la colonne D
- Listbox1.ListIndex +1 : la ligne correspondant à l'index sélectionné + 1 (n'oublions pas que les index d'une listbox commencent à 0, donc si on sélectionné le premier item de la listbox, on sélectionnera la cellule D1).

Au final, cette ligne fait que à l'activation de cette macro, tu vas suivre l'hyperlien (c'est à dire ouvrir) du fichier dont le chemin est stocké dans la cellule D__.

Est-ce plus clair ?

Bonne continuation
 

Barbouille79

XLDnaute Nouveau
Re,

Détaillons la phrase :
- ThisWorkbook : ce classeur
- .FollowHyperLink : suivre l'hyperlien
- Address := : dont l'adresse (le chemin) est
- Range : le contenu de la cellule
- "D" : la colonne D
- Listbox1.ListIndex +1 : la ligne correspondant à l'index sélectionné + 1 (n'oublions pas que les index d'une listbox commencent à 0, donc si on sélectionné le premier item de la listbox, on sélectionnera la cellule D1).

Au final, cette ligne fait que à l'activation de cette macro, tu vas suivre l'hyperlien (c'est à dire ouvrir) du fichier dont le chemin est stocké dans la cellule D__.

Est-ce plus clair ?

Bonne continuation
Oui merci, c'est beaucoup plus clair... enfi, je crois! ;)
mais faut il que je rentre ce code dans "thisworkbook" ou dans mon userform?
Suis vraiment une bille :(
 

xUpsilon

XLDnaute Impliqué
Re,

Confère cette réponse :
Tu peux voir que tu as Private Sub UserForm_Initialize. Cela veut dire que ce bout de code va s'exécuter à l'initialisation (initialize) du UserForm. Cette déclaration de "quand et pour qui" va s'exécuter cette macro, tu peux la gérer via les menus déroulants en haut comme ceci pour le UserForm par ex :
Voir la pièce jointe 1052082
Il faut que tu rentres ce code dans ce qui doit le déclencher. Si tu veux que le code s'exécute à chaque ouverture du fichier, tu le places dans Workbook_Open, si tu veux qu'il s'exécute lorsqu'on change de feuille, tu le rentres dans Workbook_SheetChange, enfin t'as compris le principe quoi ;)

Bonne continuation
 

Barbouille79

XLDnaute Nouveau
Re,

Confère cette réponse :


Il faut que tu rentres ce code dans ce qui doit le déclencher. Si tu veux que le code s'exécute à chaque ouverture du fichier, tu le places dans Workbook_Open, si tu veux qu'il s'exécute lorsqu'on change de feuille, tu le rentres dans Workbook_SheetChange, enfin t'as compris le principe quoi ;)

Bonne continuation

Bonjour,

J'suis vraiment navrée... mais j'y arrive pas!! ça me désole!
ça ne marche pas. Puis je encore soliciter ton aide?

ça me donne ça!
1579770171645.png
 

xUpsilon

XLDnaute Impliqué
Bonjour,

Si tu n'as pas modifié ton Excel c'est normal que ça ne fonctionne pas, car dans les cellules il y avait déjà un hyperlien, et pas un chemin. Ce qu'il te faut dans les cellules D__ là, c'est le chemin écrit en toutes lettres, pas un hyperlien ;)

Bonne continuation
 

Barbouille79

XLDnaute Nouveau
Bonjour,

Si tu n'as pas modifié ton Excel c'est normal que ça ne fonctionne pas, car dans les cellules il y avait déjà un hyperlien, et pas un chemin. Ce qu'il te faut dans les cellules D__ là, c'est le chemin écrit en toutes lettres, pas un hyperlien ;)

Bonne continuation

Merci beaucoup de ta réactivité... mais là je vais abandonner!! j'y arrive pas!! je vais me faire une raison!
Le problème en question ne me parait pourtant pas si compliqué mais je ne comprends pas!
C'est la première fois que je n'arrive pas "bidouiller"... c'est trop pour moi! :(
 

Barbouille79

XLDnaute Nouveau
Merci beaucoup de ta réactivité... mais là je vais abandonner!! j'y arrive pas!! je vais me faire une raison!
Le problème en question ne me parait pourtant pas si compliqué mais je ne comprends pas!
C'est la première fois que je n'arrive pas "bidouiller"... c'est trop pour moi! :(
j'ai simplifier ma base de données. Finalement je me demande pourquoi j'avais 2 feuilles, alors qu'une suffit pour tout! je n'ai plus maintenant que ma feuille "Accueil" (base de ma listBox) ... et rien!! le néant total.
J'ai vraiment l'impression d'abuser, mais en tant qu'autodidacte... bah c'est pas simple! ;)
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Si on a des variables Dim Cel As Range, Hlk As Hyperlink, et si on a fait en sorte que Cel représente la cellule contenant le lien, on devrait quand même aussi pouvoir faire :
VB:
Set Hlk = Cel.Hyperlinks(1)
Hlk.Follow
 

xUpsilon

XLDnaute Impliqué
Re,

Ne jamais baisser les bras, surtout quand la solution peut être fournie par quelqu'un d'autre.
Je vais essayer de t'expliquer comment faire pour que ça fonctionne et si ça ne fonctionne pas tu m'enverras ton fichier et je le ferai moi même.

Ton bout de code ici va suivre le chemin indiqué dans les cellules D__. Par chemin j'entends D:\____, suivant là où est stocké ton fichier. Par exemple, j'ai stocké le fichier Exemple.xlsx dans le dossier Test dans mes documents, le chemin sera le suivant :
C:\Users\NomDeLaSession\Documents\Test\Exemple.xlsx

Imaginons que cette adresse soit stockée en D3, et que ce soit le premier item de ma listbox.
Avec la ligne de code que je t'ai fournie, le code va aller chercher en D3 et suivre le chemin indiqué, à savoir donc ici C:\Users\NomDeLaSession\Documents\Test\Exemple.xlsx, et va l'ouvrir.

Tiens moi au courant

PS : Bonjour Dranreb, effectivement ça fonctionne aussi comme cela, il faudra simplement définir Cel par rapport à chaque item de ta listbox.
 

Barbouille79

XLDnaute Nouveau
Bonjour.
Si on a des variables Dim Cel As Range, Hlk As Hyperlink, et si on a fait en sorte que Cel représente la cellule contenant le lien, on devrait quand même aussi pouvoir faire :
VB:
Set Hlk = Cel.Hyperlinks(1)
Hlk.Follow

Merci c'est très gentil mais je crois que je manque de vocabulaire VBA... j'suis débutante!
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas