Utilisation Application.Run et arguments

PAD095

XLDnaute Nouveau
Bonsoir

Je bloque sur un ligne de code et je me demande si un de vous aurait déjà réglé ce problème. J'ai un code qui fait référence à une macro complémentaire. Lorsque je lance cette ligne de code via Application.Run, j'ai une inputbox qui apparait demandant user et password.

Je voudrai renseigner directement le user et le password via les arguments mais je coince. Normalement, Application.Run est prévu pour recevoir des arguments : Application.Run(macro, Arg1, Arg2,..., Arg30).

Ma question est de savoir comment rentrer mon user et mon password à cette macro

Quand je fais le code: Application.Run "MenuLogin", j'ai bien mon Input Box qui apparait demandant User Id et Password mais je voudrai quelque chose du type:

Code:
Sub Refresh
Dim MyUser As String, MyPassword As String
MyUser = "PAD095"
MyPassword = "Test"
Application.Run "MenuLogin", MyUser, MyPassword
End Sub
J'ai le retour suivant "Erreur 450 - Nombre d'arguments incorrect ou affectation incorrecte d'une propriété"

Si j'essaie
Code:
Sub Refresh
Dim MyUser As String, MyPassword As String
MyUser = "PAD095"
MyPassword = "Test"
Application.Run "MenuLogin", UserId:=MyUser, Password:=MyPassword
End Sub
Je reçois "Erreur de compilation. Argument nommé introuvable".

Existe t'il un moyen de trouver les arguments corrects afin de les renseigner correctement

Si un de vous à une idée, je suis preneur.
Bonne soirée et merci à vous pour ce forum
PAD095
 

JNP

XLDnaute Barbatruc
Re : Utilisation Application.Run et arguments

Bonsoir Pad095 et bienvenue :),
Pour que ta macro puisse recevoir tes arguments, il faut qu'elle attende ses arguments :rolleyes:...
Tu peux éventuellement contourner le problème en déclarant tes variables publiques, mais entre 2 projets VBA, je ne te le conseille pas :p...
Du fait, tu dois avoir de l'autre côté
Code:
Sub MenuLogin(MyUser As String, MyPassword As String)
If MyUser <> "PAD095" And MyPassword <> "Test" Then
MyUser = InputBox("...")
'... tes tests pour vérifier et sortir si c'est pas bon
End If
'... ton code
End Sub
Maintenant, ton problème est que si tu fais ça, quand tu lances ta sub sans arguments, tu vas avoir un message "Argument non facultatif" :p...
Donc il suffit de les rendre facultatifs :rolleyes: :
Code:
Sub MenuLogin(Optional MyUser As String, Optional MyPassword As String)
Bon courage :cool:
 

PAD095

XLDnaute Nouveau
Re : Utilisation Application.Run et arguments

Merci JNP

J'ai oublié de préciser qqchose. La macro complémentaire est un addin type SAP pour Excel ou BusinessQuery pour Excel (dérivé de BusinessObjects) et dans le cas présent EnergyScope. J'ai 2 commandes permettant de me connecter:
- Application.Run "MenuLogin" ou "deskpoint.xla!MenuLogin"
- Application.Run "EnergyLogin" ou "deskpoint.xla!MenuLogin"
Par conséquent, comme toute application de ce type, il demande user et password. Les données sont alors testées et donc stockées (au moins la durée du test pour voir si l'accès est autorisé). Mon pb c'est que je ne sais ni comment ni où (puisqu'évidemment ce genre d'addin est protégé) d'où mon pb

J'ai essayé d'inclure ton code afin de contourner mon pb et j'ai une erreur (mais toute nouvelle erreur me rapproche de la solution)
Code:
Sub BNL_EnergyScope()

Dim MyDirectory, MyFile, MyCode, MyTime As String
Dim MyDate As Date
Dim x As Integer

ThisWorkbook.Sheets("Pilot").Activate
Range("Time_System_Database") = Now
Range("Time_System_Database").Offset(0, 1) = Now

'Define Variables
MyDirectory = Range("Path_BNL_EnergyScope")
MyFile = Range("File_BNL_EnergyScope")
MyCode = "'" & MyFile & "'!Run"
MyDate = Range("Date_To")
'Workbooks.Open (MyDirectory & MyFile), UpdateLinks:=False

Call MenuLogin("PAD095", "Test")

End Sub


Sub MenuLogin(MyUser As String, MyPassword As String)

MyUser = "PAD095"
MyPassword = "Test"
Application.Run "Menulogin", "PAD095", "Test"

End Sub
Quand le Call appele MenuLogin, je rentre dans une boucle qui apparemment stocke les valeurs (mais visiblement trop) et je reçois l'erreur suivante: "Erreur d'écécution '28' - Espace pile insuffisant"

Y a t'il un moyen de connaitre la liste des arguments attendus ou possibles dans une ligne de commande d'une macro complémentaire. Pour info, j'ai régardé dans l'explorateur d'objets sur cette addin et j'ai les infos suivants (entre autres mais je pense que celles qui m'intéressent sont ci dessous):
- Function Login (id as string, password as string): membre de FAMEDeskpoint.menu
- Sub MenuLogin(): membre de FAMEDeskpoint.menu
- Sub EnergyLogin(): membre de FAMEDeskpoint.menu
Ces infos sont elles exploitables?

Bonne soirée et merci de l'intérêt déjà porté à la question
PAD095
 

PAD095

XLDnaute Nouveau
Re : Utilisation Application.Run et arguments

Salut Pierrot.
Merci, je vais chercher de ce côté. C'est une commande que je n'ai jamais utilisé mais c'est effectivement une bonne piste à explorer. Je vous tiens au courant
Merci et bonne journée
PAD095
 

PAD095

XLDnaute Nouveau
Re : Utilisation Application.Run et arguments

Après quelques recherches sur l'utilisation de SendKeys et quelques tests infructueux, ctte commande a finalement résolu mon problème. Il a fallu que je joue un peu avec le Timer pour que tout soit pris en compte mais ça mache

Mefci à tous pour votre aide

Ci joint le code si ça peut servir à quelqu'un
Code:
Sub BNL_EnergyScope()

Dim MyDirectory, MyFile, MyCode, MyTime As String
Dim MyDate As Date
Dim MyTimer As Variant
Dim x As Integer

ThisWorkbook.Sheets("Pilot").Activate
Range("Time_System_Database") = Now
Range("Time_System_Database").Offset(0, 1) = Now

'Define Variables
MyDirectory = Range("Path_BNL_EnergyScope")
MyFile = Range("File_BNL_EnergyScope")
MyCode = "'" & MyFile & "'!Run"
MyDate = Range("Date_To")
Workbooks.Open (MyDirectory & MyFile), UpdateLinks:=False

'Log EnergyScope
MyTimer = Now() + TimeValue("0:00:02")
Application.Run "MenuLogin"

'Fulfill User & Password
Application.Wait (MyTimer)
Application.SendKeys ("PAD095"), True
Application.SendKeys ("{TAB}"), True
MyTimer = Now() + TimeValue("0:00:02")
Application.Wait (MyTimer)
Application.SendKeys ("Test"), True
Application.SendKeys ("{TAB}"), True
MyTimer = Now() + TimeValue("0:00:02")
Application.Wait (MyTimer)
Application.SendKeys ("~"), True
MyTimer = Now() + TimeValue("0:00:02")
Application.Wait (MyTimer)
Application.SendKeys ("~"), True
MyTimer = Now() + TimeValue("0:00:02")
Application.Wait (MyTimer)
Application.SendKeys ("~"), True

'Code intra application

'Log Out
Application.Run "Logout"

End Sub
 

Discussions similaires

Réponses
3
Affichages
384

Statistiques des forums

Discussions
312 347
Messages
2 087 502
Membres
103 563
dernier inscrit
samyezzehar