Le Défi du jour ... 23/11/2005

Creepy

XLDnaute Accro
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
 

dg62

XLDnaute Barbatruc
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 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
 

Statistiques des forums

Discussions
314 012
Messages
2 104 532
Membres
109 064
dernier inscrit
medamn