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
 

Pièces jointes

  • archives.zip
    118.1 KB · Affichages: 13

xUpsilon

XLDnaute Accro
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
 

xUpsilon

XLDnaute Accro
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 Accro
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
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 Accro
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 Accro
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 :
Regarde 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 Accro
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
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 838
dernier inscrit
Christelle.B86