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!!!
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
Merci d’avance de venir à mon secours, je suis coincée et du coup je peux plus avancer!!!
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.
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
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 :
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 :
- 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 :
- 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.
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"?????
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 :
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
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 :
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
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 :
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
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!!
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__.
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__.
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
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
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
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