Créer un raccourci par macro ?


Par VBA, il est possible de créer un raccourci vers un fichier ou un répertoire.
On peut par exemple placer le raccourci sur le bureau ou sur la barre Office.
Pour ce faire, on fait appel à l'objet WScript.Shell (le Windows Script Host Object auquel on peut faire référence dans VBE par Outils / Références).

Rien de plus simple une fois l'objet créé par VBA, puisque cet objet possède une méthode CreateShortcut qui permet justement de créer notre raccourci :

Sub crée_raccourci()
Set scrHst = CreateObject("WScript.Shell")
emplacement = scrHst.SpecialFolders("Desktop")
Set raccourci = scrHst.CreateShortcut(emplacement & "\truc.lnk")
raccourci.WorkingDirectory = emplacement
raccourci.TargetPath = "c:\zaza.doc"
raccourci.Save
Set raccourci = Nothing
Set scrHst = Nothing
End Sub


Set scrHst = CreateObject("WScript.Shell") permet de créer l'objet WScript.Shell.
Cet objet présente l'avantage de nous donner accès facilement aux répertoires spéciaux que constituent le bureau, le menu démarer, le répertoire des favoris...
scrHst.SpecialFolders("Desktop") renvoie ainsi l'adresse du bureau.
La ligne suivante crée le raccourci truc dans le répertoire bureau :
Set raccourci = scrHst.CreateShortcut(emplacement & "\truc.lnk")
Reste à préciser la cible (Target.Path) puis à enregistrer le raccourci par Save.
Enfin, les deux dernières lignes libèrent la mémoire occupée par les deux objets (WScript.Shell et raccourci).
Sur le bureau a été créé un raccourci truc qui pointe vers le fichier c:\zaza.doc.

On peut bien sur raffiner un peu la macro :

- Hotkey permet de préciser le raccourci clavier associé au raccourci que l'on souhaite créer. On peut écrire :
raccourci.Hotkey = "CTRL+J"

- IconLocation précise l'emplacement de l'icone qui être utilisée :
raccourci.IconLocation = "excel.exe,2" ou bien
raccourci.IconLocation = "C:\WINDOWS\Moricons.dll,10"

- Enfin, on peut placer le raccourci ailleurs que sur le bureau :
scrHst.SpecialFolders("Favorites") renvoie l'adresse des favoris,
scrHst.SpecialFolders("StartMenu") renvoie l'adresse du menu "démarrer",
scrHst.SpecialFolders("Programs") renvoie l'adresse du menu "Programmes",
scrHst.SpecialFolders("MyDocuments") renvoie l'adresse du répertoire "Mes Documents",
scrHst.SpecialFolders("SendTo") renvoie l'adresse du répertoire qui apparait quand on fait "envoyer vers" à partir de l'explorateur Windows.
(On peut aussi utiliser AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms et AllUsersStartup).
Et puis on peut placer le raccourcis dans n'importe quel répertoire, en indiquant le chemin d'accès. Par exemple, pour la barre Office :
emplacement = "C:\Program Files\Microsoft Office\Office\gestionnaire office\office"

Un autre exemple :
Sub crée_raccourci()
Set scrHst = CreateObject("WScript.Shell")
emplacement = scrHst.SpecialFolders("StartMenu")
Set raccourci = scrHst.CreateShortcut(emplacement & "\toto.lnk")
raccourci.TargetPath = "c:\toto.exe"
raccourci.Hotkey = "CTRL+J"
raccourci.IconLocation = "C:\WINDOWS\Moricons.dll,7"
raccourci.WorkingDirectory = emplacement
raccourci.Save
Set raccourci = Nothing
Set scrHst = Nothing
End Sub

La macro installe dans le menu démarrer, un raccourci nommé toto, qui pointe vers le programme toto.exe. Le programme est représenté par la 8ème icone de la dll Moricon (les icones sont numérotées à partir de zéro). L'application peut être lancée par CTRL+J.

Autre utilisation, un fichier Excel qui, dès qu'il est ouvert; crée son propre raccourci sur le bureau (macro à insérer dans la page de code associée à ThisWorkbook :
Private Sub Workbook_Open()
Set scrHst = CreateObject("WScript.Shell")
emplacement = scrHst.SpecialFolders("Desktop")
Set raccourci = scrHst.CreateShortcut(emplacement & "\" &
WorksheetFunction.Substitute(ThisWorkbook.Name, ".xls", ".lnk"))
raccourci.WorkingDirectory = emplacement
raccourci.TargetPath = ActiveWorkbook.FullName
raccourci.Save
Set raccourci = Nothing
Set scrHst = Nothing
End Sub



Remarque
Pour trouver les caractéristiques d'un raccourci existant, on utilise aussi CreateShortcut qui permet d'affecter un objet à un raccourci existant.


Dans le même ordre d'idées, on peut faire de manière similaire des raccourcis internet
(Cliquez ici).