![]() |
|
Forum
|
|
|
#1 (permalink) |
|
XLDnaute Accro
Date d'inscription: février 2005
Localisation: Maurecourt
Version Excel : Excel 2003 (PC)
Messages: 1 523
|
Hello all,
Nouveau défi du jour un peu plus long ! « Comment passer des paramètres au lancement d’un fichier Excel et les récupérer dans Excel bien sûr ?» Bon alors c’est un peu plus long qu’hier mais bon ca peut toujours servir ! Ce coup si il faut utiliser les API et comme je sais que certains ici n’aiment pas trop ca et bien c’est l’occasion ou jamais !! Comme d’habitude Jim, si vous ou l’un de vos agent … Ah non c’est pas ça j’m’a trompé :silly: Comme d’habitude le premier qui trouvera aura le droit à notre reconnaissance éternelle !! A ce soir pour la réponse Creepy
__________________
|
|
|
|
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
XLDnaute Accro
|
Bonjour le fil
extrait du site http://xcell05.free.fr/pages/prog/parametres.htm 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 Auto_Open 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
__________________
@+ ![]()
|
|
|
|
![]() |
| Liens sociaux |
| Outils de la discussion | |
|
|