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


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.

Configuration: Windows / Edge 90.0.818.56
A voir également: