Connexion Sapgui / Sapguiserveur

Bonjour,

Voici mon problème :

J'utilise Excel pour automatiser des mouvements sur SAP, jusqu'ici tout va bien...

Voici le code pour me connecter a SAP :

Public SapGuiAuto, Wscript
Public objGui As GuiApplication
Public objConn As GuiConnection
Public objSess As GuiSession
Dim w_System
Dim W_Ret As Boolean

Function connexion_SAP() As Boolean

Dim il, it
Dim W_conn, W_Sess
w_System = "L22060"
If w_System = "" Then
connexion_SAP = False
Exit Function
End If
'If Not objSess Is Nothing Then
    'If objSess.info.SystelName & objSess.info.Client = w_System Then
    'connexion_SAP = True
    'Exit Function
    'End If
'End If
If objGui Is Nothing Then
Set SapGuiAuto = GetObject("SAPGUI")
Set objGui = SapGuiAuto.GetScriptingEngine
End If
For il = 0 To objGui.Children.Count - 1
    Set W_conn = objGui.Children(il + 0)
    For it = 0 To W_conn.Children.Count - 1
    Set W_Sess = W_conn.Children(it + 0)
    If W_Sess.info.SystemName & W_Sess.info.Client = w_System Then

        Set objConn = objGui.Children(il + 0)
        Set objSess = objConn.Children(it + 0)

    Exit For
    End If
    Next
Next
If objSess Is Nothing Then
MsgBox "pas de session active" + w_System + " "
connexion_SAP = False
Exit Function
End If
If IsObject(WScripr) Then
Wscript.ConnectObject objSess, "on"
Wscript.ConnectObject session, "on"
Wscript.ConnectObject Application, "on"
End If
connexion_SAP = True

End Function

J'utilise donc le "SAPGUI" ,sauf que certains de mes collègues utilisent le "SAPGUISERVEUR" et je ne trouve pas comment lui dire de basculer de l'un à l'autre en fonction du SAP utilisé.

Si quelqu'un peut m'éclairer svp :)

Merci,

Bonjour,

Je ne connais pas SAP mais j'ai peut-etre une solution si le soucis est juste "certains de mes collègues ..."

Dans les options qui reste légal, tu peux utiliser :

    Select Case UCase(Application.UserName)
        Case "THAA" 'ton nom d'utilisateur Excel =>(Fichier / Option / Generales / nom utilisateur)
            Set SapGuiAuto = GetObject("SAPGUI")
        Case Else
            Set SapGuiAuto = GetObject("SAPGUISERVEUR")
    End Select

A+

Je me suis peut-être mal exprimé,

ce fichier est utilisé par plusieurs personnes simultanément. Hors il y a 2 "versions" de SAP ( celle de base (SAPGUI) ou la version Business ( SAPGUISERVEUR))

Dans le code actuel, il n'y a que ceux utilisant la version de base qui peuvent utiliser le fichier.

Et je voudrais que le futur code se "cale" en fonction de la version de SAP que l'utilisateur utilise ( Sans utiliser de user Name)

Ou c'est peut etre moi qui n'est pas été clair.

On est d'accord que si tu remplace:

Set SapGuiAuto = GetObject("SAPGUI")
par
Set SapGuiAuto = GetObject("SAPGUISERVEUR")

Il n'y aura que ceux qui utilise la version Buiness qui pourront utiliser le fichier ?

- Si oui, alors pour différencier la "version basique" de la "version buisness",
Il faudra savoir qui utilise l'une des versions

Pour l'exemple :
Mathieu, Laure, Jonathan => version basique
Amandine, Stephane, Julie => version buisness

le code sera :

Public SapGuiAuto, Wscript
Public objGui As GuiApplication
Public objConn As GuiConnection
Public objSess As GuiSession
Dim w_System
Dim W_Ret As Boolean

Function connexion_SAP() As Boolean

Dim il, it
Dim W_conn, W_Sess
w_System = "L22060"
If w_System = "" Then
connexion_SAP = False
Exit Function
End If
'If Not objSess Is Nothing Then
    'If objSess.info.SystelName & objSess.info.Client = w_System Then
    'connexion_SAP = True
    'Exit Function
    'End If
'End If
If objGui Is Nothing Then
'________________________________________________________________________________________________
   Select Case Application.UserName
        Case "Mathieu", "Laure", "Jonathan" 'nom d'utilisateur Excel =>(Fichier / Option / Generales / nom utilisateur)
            Set SapGuiAuto = GetObject("SAPGUI")
        Case Else '(autres utilisateur donc Amandine, Stephane, Julie)
            Set SapGuiAuto = GetObject("SAPGUISERVEUR")
    End Select
'________________________________________________________________________________________________

Set objGui = SapGuiAuto.GetScriptingEngine
End If
For il = 0 To objGui.Children.Count - 1
    Set W_conn = objGui.Children(il + 0)
    For it = 0 To W_conn.Children.Count - 1
    Set W_Sess = W_conn.Children(it + 0)
    If W_Sess.info.SystemName & W_Sess.info.Client = w_System Then

        Set objConn = objGui.Children(il + 0)
        Set objSess = objConn.Children(it + 0)

    Exit For
    End If
    Next
Next
If objSess Is Nothing Then
MsgBox "pas de session active" + w_System + " "
connexion_SAP = False
Exit Function
End If
If IsObject(WScripr) Then
Wscript.ConnectObject objSess, "on"
Wscript.ConnectObject session, "on"
Wscript.ConnectObject Application, "on"
End If
connexion_SAP = True

End Function

- Si non, je seche

"On est d'accord que si tu remplace:

Set SapGuiAuto = GetObject("SAPGUI")
par
Set SapGuiAuto = GetObject("SAPGUISERVEUR")

Il n'y aura que ceux qui utilise la version Business qui pourront utiliser le fichier ?"

Oui je confirme

Je vais essayer ta solution. Je reviens vers toi si cela marche ou non

Merci de ton aide

Il ne trouve pas de session active avec ce code, donc pas de connexion :/

If objSess Is Nothing Then

MsgBox "pas de session active" + w_System + " "

connexion_SAP = False

Juste pour etre sur,

ton code dans ton premier message fonctionne ? (je pose juste la question car il y a également objSess qui a été mis en commentaire)

'If Not objSess Is Nothing Then
    'If objSess.info.SystelName & objSess.info.Client = w_System Then
    'connexion_SAP = True
    'Exit Function
    'End If
'End If

Sinon je seche

Oui il fonctionne ( sans utiliser le code en commentaire )

Rechercher des sujets similaires à "connexion sapgui sapguiserveur"