Bonjour le fil
extrait du site
Ce lien n'existe plus
Merci à Alain Cros pour avoir adapté ce code (initialement prévu pour Excel 97) à Excel 2000 et XP, ainsi qu'à Tony Proctor pour avoir signalé un bug potentiel lié à GetCommandLine.
Les options de démarrage d'Excel ne permettent pas de transmettre des paramètres personnalisés au logiciel (cf. Options de démarrage d'Excel) . La technique suivante, non documentée, permet de réaliser cette opération.
Le truc consiste à lancer Excel avec une option valide, par exemple /e (empêchant le chargement d'un classeur vide au démarrage) et à greffer immédiatement après cette option les paramètres personnels. En effet, les caractères qui suivent les options de démarrage, jusqu'au premier espace rencontré, sont ignorés par Excel. Ils ne génèrent donc pas d'erreur et sont exploitables par macro, via la fonction API GetCommandLine.
Les paramètres doivent être placés entre Excel.exe et le nom du fichier.
Par exemple, si l'on veut démarrer Excel en ouvrant le classeur 'C:\\Temp\\Test.xls' en lui transmettant les paramètres 'alain', 'pierre' et 'paul', la ligne de commande devrait être de ce type :
Excel.exe /e/alain/pierre/paul 'C:\\Temp\\Test.xls'
Les paramètres doivent suivre immédiatement /e et ne doivent comprendre aucun espace.
Leur récupération peut s'opérer immédiatement après le lancement d'Excel par le biais d'une macro Workbook_Open ou Aut
pen placé dans le classeur ouvert. Cette macro doit récupérer le contenu de la ligne de commande par GetCommandLine et utiliser les fonctions de chaîne de caractères pour localiser et séparer les paramètres personnels.
A titre d'exemple, la macro suivante récupère les paramètres dans une variable tableau (CmdArgs) et copie ce tableau dans la première feuille de calcul du classeur.
Private Declare Function GetCommandLine _
Lib 'kernel32' Alias 'GetCommandLineA' _
() As Long
Private Declare Function lstrlen _
Lib 'kernel32' Alias 'lstrlenA' _
(lpString As Any) As Long
Private Declare Function lstrcpy _
Lib 'kernel32' Alias 'lstrcpyA' _
(lpString1 As Any, lpString2 As Any) As Long
Private Function GetCmd() As String 'Tony Proctor microsoft.public.vb.winapi
Dim lpCmd As Long
lpCmd = GetCommandLine()
GetCmd = Space$(lstrlen(ByVal lpCmd))
lstrcpy ByVal GetCmd, ByVal lpCmd
End Function
Private Sub Workbook_Open()
' L. Longre, complété par Alain Cros
Dim CmdLine As String 'Ligne de Commande
Dim CmdArgs() As String 'Tableau des paramétres de Commande
Dim ArgNb As Integer 'Nombre de paramétres
Dim Pos1 As Integer
CmdLine = GetCmd 'Lire la ligne de Commande
Pos1 = InStr(1, CmdLine, ThisWorkbook.FullName, vbTextCompare)
If Pos1 <> 0 Then CmdLine = Mid(CmdLine, 1, Pos1 - 1) Else Exit Sub
If Right(CmdLine, 1) = '''' Then Pos1 = 2 Else Pos1 = 1
CmdLine = Mid(CmdLine, 1, Len(CmdLine) - Pos1)
CmdLine = Mid(CmdLine, InStr(1, CmdLine, ' /e', _
vbTextCompare) + 4, Len(CmdLine)) & '/'
'CmdLine ne contient plus que les paramétres
Do Until Len(CmdLine) < 2
Pos1 = InStr(1, CmdLine, '/')
ArgNb = ArgNb + 1
ReDim Preserve CmdArgs(1 To ArgNb)
CmdArgs(ArgNb) = Mid(CmdLine, 1, Pos1 - 1)
CmdLine = Mid(CmdLine, Pos1 + 1, Len(CmdLine))
Loop
For Pos1 = 1 To ArgNb
CmdLine = CmdLine & 'Argument ' & Pos1 & ' : ' & CmdArgs(Pos1) & vbCrLf
Next Pos1
MsgBox CmdLine
End Sub
--------------------------------------------------------------------------------
Rappel des options de démarrage d'Excel (97) :
Les paramètres peuvent être utilisés en majuscule ou minuscule. Plusieurs paramètres consécutifs doivent être séparés par des espaces.
/automation : force Excel à démarrer sans charger aucun add-in, ni aucun modèle ou classeur installé dans le répertoire Xlouvrir.
/e, /embedded : fore Excel à démarrer sans créer un classeur vide (Classeur1).
/i : force Excel à démarrer avec une fenêtre occupant tout l'écran.
/m : force Excel à s'ouvrir sur un nouveau classeur contenant seulement une feuille macro Excel 4.
/o : complète les entrées manquantes concernant Excel dans la base de registre. La clé suivante est modifiée (Excel 97) : HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\8.0\\Excel
/p <dossier> : change le dossier (répertoire) actif après avoir chargé Excel.
/r <fichier> : force Excel à ouvrir le fichier indiqué en lecture seule.
/s : force Excel à ignorer tous les fichiers installés dans le répertoire Xlouvrir.
/regserver : réinitialise les entrées de la base de registre d'Excel, puis ferme le logiciel.
/unregserver : vide les entrées de la base de registre et quitte Excel.
Message édité par: dg62, à: 23/11/2005 16:38