Vérifier si SAP déjà lancé ET/OU connectéou non (vba excel)
Fermé
ZZtopless
-
Modifié le 10 mai 2021 à 09:28
Bonjour,
Je suis en train de développer une macro pour me connecter à sap via un fichier excel et lancer un script avec des données que j'aurais enregistrées dans mon fichier. Actuellement, même s'il n'est pas nécessairement très beau et/ou pratique (je suis un profane qui se débrouille avec ce qu'il trouve sur le net) , il fonctionne à merveille mais seulement si SAP n'est pas lancé du tout. Or j'aimerais pouvoir lancer le script même si SAP n'est pas lancé et même si SAP est lancé mais pas connecté avec les identifiants. Pourriez-vous me dire ce que je dois rajouter comme condition au code pour faire cela svp? D'avance, merci.
Private Sub Workbook_Open()
Dim SessionSAP
Dim LogSAP As String
Dim MDPSAP As String
Dim NSOP As String
'***************Infos de connexion**********
'*******************************************
Application.Visible = False
SAPLogon_Initialize
SAPLogon.Show
If SAPLogon.LogSAP.Value = "" Or SAPLogon.MDPSAP.Value = "" Then
SAPLogon.Hide
Exit Sub
End If
LogSAP = SAPLogon.LogSAP.Text
MDPSAP = SAPLogon.MDPSAP.Text
NSOP = SAPLogon.ComboBox1.Text 'plus qu'à lister dans la col A les SOP intéressantes et mettre un nombre de feuilles à imprimer et à insérer dans le script à la place des valeurs demandées
'*********Ouverture de SAP***********
'************************************
Const Chemin As String = "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\SapLogon.exe"
On Error Resume Next
Set Appli = GetObject(, "SapLogon.Application")
If Appli Is Nothing Then
SessionSAP = Shell(Chemin, 1)
End If
'***********Logon SAP***********
'*******************************
Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\SapLogon.exe", 4
Set WshShell = CreateObject("WScript.Shell")
Do Until WshShell.AppActivate("SAP Logon ")
Application.Wait Now + TimeValue("0:00:01")
Loop
On Error Resume Next
Set SapGui = GetObject("SAPGUI")
Set Appl = SapGui.GetScriptingEngine
Set Connection = Appl.Openconnection("XXXXX", True)
Set session = Connection.Children(0)
On Error Resume Next
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = LogSAP
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = MDPSAP
session.findById("wnd[0]").sendVKey 0
'*********Script**********
'*************************
On Error Resume Next
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "transaction"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tabsMAINSTRIP/tabpTAB1/ssubSUBSCRN:SAPLCV100:0401/subSCR_MAIN:SAPLCV100:0402/ctxtSTDOKNR-LOW").Text = "xxxxxxxxxx"
session.findById("wnd[0]/usr/tabsMAINSTRIP/tabpTAB1/ssubSUBSCRN:SAPLCV100:0401/subSCR_MAIN:SAPLCV100:0402/ctxtSTDOKNR-LOW").caretPosition = 10
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").setCurrentCell 23, "STATUSTEXT"
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").doubleClickCurrentCell
'j'ai trouvé ça mais ne sais pas l'utiliser dans ce cas-ci
'If session.Children.Count > 1 Then
'
' answer = MsgBox("You've got opened SAP already," & _
'"please leave and try again", vbOKOnly, "Opened SAP")
'
' session.findById("wnd[1]/usr/radMULTI_LOGON_OPT3").Select
' session.findById("wnd[1]/usr/radMULTI_LOGON_OPT3").SetFocus
' session.findById("wnd[1]/tbar[0]/btn[0]").press
'
' Exit Sub
'
'End If
End Sub
Private Sub SAPLogon_Initialize()
Dim i As Integer
Dim numrow As Long
numrow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To numrow
SAPLogon.ComboBox1.AddItem (ThisWorkbook.Sheets("Sheet1").Range("A" & i))
Next
End Sub