Bonjour cavrom,
1. Contexte des répertoires
Envoyé par
cavrom
Tous les schémas sont contenus dans un dossier "link", qui est lui-même contenu dans le dossier parent du classeur.
Supposons que l'on soit dans le dossier parent du classeur .xls. On y trouve deux sous-répertoires :
- Link\Schema.jpg : C'est l'image au format .jpg d'un Train Diagram.
- Excel\HLink.xls : C'est la maquette du classeur Excel pour insérer un hyperlien.
Le nom "Excel" du répertoire du classeur importe peu puisqu'on sera dedans lors de l'exécution de la macro.
Par contre il faut une image de test ayant le nom Schema.jpg dans le répertoire Link.
2. Accès à l'image en Excel VBA
La tentative initiale montre une concaténation du répertoire Link avec la valeur de la cellule C26 c-a-d la chaîne "Schema.jpg".
"Link\ & Range("C26").Value"
En rouge sont les erreurs de syntaxe car il faut fermer la double quote en fin du nom du répertoire Link et non après la propriété Value de la cellule C26.
Sinon VBA ne va pas pouvoir accéder au contenu de la cellule C26 car on a deux constantes littérales "Link\ & Range(" d'une part et ").Value" d'autre part avec C26 au milieu un peu perdu.
"Link\" & Range("C26").Value
On a déplacé la dernière double quote après l'anti-slash de Link.
3. Chemin relatif par rapport au .xls
Comme on se trouve dans le répertoire du classeur HLink.xls, il faut remonter au dossier parent par le classique ".." avant de redescendre dans le répertoire Link.
"..\Link\" & Range("C26").Value
4. Le code du Module1 de la maquette HLink.xls
Exprimons ce chemin relatif et la rangée et colonne de C26 avec des constantes en début du Module1 du classeur HLink.xls
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Option Explicit ' Hyperlien sur image .jpg dans une cellule d'Excel en VBA
Public Const pathPic = "..\Link\" ' Répertoire des schémas relatif à ce classeur
Public Const rowPic = 26, colPic = 3 ' rangée et colonne de C26 du schéma
Sub AddHLink() ' Point d'entrée principal de la maquette
Dim strPicture As String
DbReadTrainDiagram
'partie permettant de convertir le nom du schéma en lien hypertexte
strPicture = ThisWorkbook.Path + "\" + pathPic + Cells(rowPic, colPic)
ActiveSheet.Hyperlinks.Add Anchor:=Cells(rowPic, colPic), Address:=strPicture
End Sub
Sub DbReadTrainDiagram() 'requête permettant de récupérer le nom du schéma
Cells(rowPic, colPic) = "Schema.jpg" ' En C26 après lecture de la base Access
End Sub |
Cells(rowPic, colPic) est plus court et plus rapide en temps d'exécution par rapport à l'initial Range("C26").Value
Toute la valeur ajoutée de la description de la feuille Search avec des constantes, c'est que si on ajoute plus tard une rangée ou une colonne qui fait tout décaler, on n'aura à modifier que les constantes et pas "C26" partout dans le code. De plus cela permet de commenter le Module1.
Comme la feuille Excel de la maquette HLink.xls est vide, on utilise le simulateur d'accès la base de données DbReadTrainDiagram(). Pour simplifier la maquette, on n'a pas besoin d'exécuter une requête SQL pour affecter la cellule C26 de la feuille "search" avec la chaîne "Schema.jpg"
5. Test de la maquette
Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE, copier-coller et valider par ENTER :
En cellule C26, on voit que Schema.jpg est un hyperlien pointant sur l'image dans le répertoire Link.
Si on clique sur l'hyperlien, l'image apparaît dans le navigateur Internet si dans Windows, l'extension des fichiers images .jpg est associée au browser plutôt qu'à Microsoft Photo Editor.
6. Conclusion
Si la question n'a pas eu de réponse jusqu'à maintenant, c'est qu'elle est exprimée en terme complexe tel que "le dossier parent" sans donner d'exemple simple comme dans le chapitre 1.
De plus toute la partie sur la base Access et la requête SQL dans le code proposé ont plutôt complexifié inutilement le problème.
Il suffisait d'indiquer qu'est-ce qu'un nom de schéma dans la cellule C26.
___________
Si la discussion est résolue, vous pouvez cliquer sur le bouton
En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.
Partager