• Initiateur de la discussion Initiateur de la discussion mutzik
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

mutzik

XLDnaute Barbatruc
Bonjour toutes et tous,

- je lance un fichier excel en ligne de commande en passant un paramètre sur cette ligne de commande (par ex le paramètre = 'pierre'
- une macro dans workbook_open me récupère l'argument de ma ligne de commande, argument que j'ai déclaré en string (dim arg as string)
- j'ai également crée une macro Sub pierre()

Question : comment dois-je déclarer mon argument dans worbook_open pour que je puisse faire un call arg qui ira donc me lancer ma macro sub pierre()

merci à vous
 
Re : instruction Dim

Bonjour,

Si je comprends bien fais ceci pour appeler ta procédure sub pierre() dans la procédure Sub Aut😵pen()

Code:
Call pierre

Je suppose que ta procédure Sub pierre() n'a pas d'arguments.
 
Dernière édition:
Re : instruction Dim

bonjour Raja,

Oui call pierre, je connais, mais il y aura une 20ne de personnes, et c'est l'argument de la ligne de commande qui determinera quelle macro doit être lancée, c'est pour cela que je mets une variable
 
Re : instruction Dim

Bonsoir Mutzik, Raja, Lii

Peut-être une piste, mais je ne suis pas sûr:

1 - Dans un module "Lancement" par exemple, tu crée le code suivant:

Code:
Option Explicit
Sub Lance()
Call Essai
End Sub

2 - dans le code "Workbook_Open()" de Thisworkbook tu ajoutes les lignes suivantes:

Code:
...
With ThisWorkbook.VBProject.VBComponents.Item("Lancement").CodeModule
        .ReplaceLine 3, "Call " & nomproc
End With
Lance
...

nomproc étant l'argument passé dans Workbook open.

A tester.

@+

Gael

PS: cela peut nécessiter de cocher la case "Faire confiance au projet visual basic" dans outils - Macro -sécurité pour éviter le message d'erreur sur la fiabilité du code.
 
Dernière édition:
Re : instruction Dim

Bonsoir à tous,

pas sur d'avoir tout compris de ton besoin...

Le code ci dessous se déclenche à l'ouverture du classeur, lance la procédure "test" en passant comme argument le nom de l'utilisateur, et ce dernier est renvoyé dans un "msgbox" par la procédure.

Si cela peut t'aider à avancer.

Code:
Option Explicit
Private Sub Workbook_Open()
test Application.UserName
End Sub

Code:
Option Explicit
Sub test(pierre As String)
MsgBox pierre
End Sub

bonne soirée
@+
 
Re : instruction Dim

Merci à toutes et tous de vous être penché (pas trop j'espère) sur mon prob, je crois que je vais adopter la solution de Lii, mais quand même tester celle de Gael (soluce que je ne connaissais pas), quand à celle de Pierrot, je vais expliquer mon besoin plus avant :
- Pierre (le manager d'équipe) a besoin tous les jours d'imprimer une liste du personnel présent dans son secteur
- Pierre ouvre donc ce classeur avec cette ligne de commande dans un raccourci du bureau :
- "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /e/Pierre "D:\temp\PassageArgumentsExcel.xls"
- une procédure dans workbook_open récupère cet argument dans une variable (que je ne sais pas comment DIMensionner, d'ou ce post)
- je voulais juste dans la suite de cette procédure workbook_open, après la récupération de cet argument lancer une macro d'impression qui va executer une filtre d'après le critere 'Pierre' (les gens qui travaillent pour lui) et imprimer cette liste
tout ceci sans que l'utilisateur aie à choisir dans un quelconque menu ou dans une liste

Je n'ai qu'une dizaine de managers, l'option select case suffira,
mais un call argument m'aurait plus plu

Ecore Merci et à Bientot
 
Re : instruction Dim

Bonjour à tous,

Après avoir creusé un peu la question, j'ai trouvé une explication et une superbe macro de Laurent Longre qui permet de récupérer les paramètres passés lors de l'ouverture d'un document.

J'y ai ajouté mes pauvres lignes de code et l'ensemble devrait fonctionner.

L'explication:

Les options de démarrage d'Excel ne permettent pas de transmettre des paramètres personnalisés au logiciel (cf. Ce lien n'existe plus) . 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.

La macro est dans le fichier joint.

@+

Gael

J'ajoute le lien internet: Ce lien n'existe plus
 

Pièces jointes

Re : instruction Dim

Bonjour et merci Gael, et toutes mes excuses, car

si j'avais bien fait mon post, j'aurais joint le fichier que j'avais déja fait et qui contenait justement cette macro de notre ami Laurent
cette macro récupère la variable de lancement dans Arg(x) (il peut y avoir plusieurs arguments sur la ligne de commande)
mon objectif était :
- arg 1 : le Id de la personne qui lance le xls
- arg 2 : l'opération à effectuer : imprimer ou autre
- arg 3 : argument facultatif : quelle liste imprimer ... etc

tout cela bien sur dans un but de gagner du temps pour des opérations qui ont lieu 2 à trois fois par jour pour une 10ne de personnes
 
Re : instruction Dim

Salut Mutzik,

Aucun souci, le sujet m'a intéressé et j'ai gardé la macro en bibliothèque.

J'ai pu tester la solution que j'avais envisagée qui fonctionne très bien. Si tu as plusieurs arguments, il suffit de mettre la chaîne souhaitée dans la commande "Replace".

@+

Gael
 
Re : instruction Dim

Bonjour mutzik, Raja, Lii, Gael, Pierrot93, le Forum,

Avec ces précisions, ça devient effectivement plus simple de comprendre et de répondre à ta question mutzik 😉

En complément des propositions précédentes (des amis que je salue bien au passage 🙂), et si j'ai bien compris, je pense que tu devrais pouvoir également tester la procédure Workbook_Open() suivante :

Code:
[COLOR=GRAY][B][I]DANS LE MODULE DE CODE DE L'OBJET THISWORKBOOK[/I][/B][/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] Workbook_Open()
[COLOR=NAVY]Dim[/COLOR] Arg [COLOR=NAVY]As Variant
Dim[/COLOR] CmdLine [COLOR=NAVY]As String
    On Error Resume Next[/COLOR]
    CmdLine = Replace(Left(GetCmd, InStr(1, GetCmd, Application.ThisWorkbook.FullName) - 2), " ", "")
    Arg = Split(CmdLine, "/")
    [COLOR=GREEN]'Tes arguments commencent à l'indice 2 : Arg(2) = "Pierre"[/COLOR]
    Application.Run Arg(2)
[COLOR=NAVY]End Sub[/COLOR]
Ceci devrait fonctionner à condition, bien sûr, que tu aies bien dans un module de code Standard, la procédure Public "Pierre" (ou autre) à lancer.

Pour info : curieusement, les fonctions de l'Api Windows utilisées par cette procédure plante mon Excel sous Vista. Attention donc...

Cordialement,
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
1 K
Retour