IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAP Discussion :

Connection à SAP via VBA


Sujet :

SAP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    geek
    Inscrit en
    Mai 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : geek
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 44
    Points : 32
    Points
    32
    Par défaut Connection à SAP via VBA
    Bonjour
    j'ai besoin de me connecter a SAP pour effectuer des taches simples a intervalles réguliers
    j'utilise un code en VBA qui fonctionne bien, et dans ce code j'ai une partie qui concerne la connection


    sur la version de SAP 7.20 cela marche
    par contre sur la version 7.30 j'ai un soucis


    Est ce que quelqu'un aurait un code VBA fonctionnel ?
    ma machine est en WIN7 64bits, Pack Office 32bits

    ci dessous le code que jutilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Sub logonSAP()
    On Error Resume Next
    
     Application.DisplayAlerts = False
     
    If Not IsObject(SAP_applic) Then
        Set SapGuiAuto = GetObject("SAPGUI")
        Set SAP_applic = SapGuiAuto.GetScriptingEngine
    End If
     
     
    er = Err.Number
    On Error GoTo 0
     
    If er <> 0 Then
      er = 0
      On Error Resume Next
       
      Call Shell("C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", vbMinimizedFocus)
      Call Shell("C:\Program Files (x86)\SAP\FrontEnd\SAPGUI\saplogon.exe", vbMinimizedFocus)
      
      On Error GoTo 0
     
      er = 0
      On Error Resume Next
      If Not IsObject(SAP_applic) Then
        Set SapGuiAuto = GetObject("SAPGUI") 'Setting
        Set SAP_applic = SapGuiAuto.GetScriptingEngine
      End If
       
      er = Err.Number
      On Error GoTo 0
          
      If er <> 0 Then
        tmp = MsgBox("SAP Logon not installed on your system" & vbCrLf & _
          "Please install it using eSupport!", vbInformation)
        End
      End If
    End If
     
    'Set Connection = SAP_applic.OpenConnection("Mon choix")
    Set Connection = SAP_applic.openconnection(".Airbus Corporate Production   PAC")    '<========bug here with SAP 730 , but work sith SAP 720
    
    If Connection.Children.Count < 1 Then
    Exit Sub
    Else
    Set session = Connection.Children(0)
    End If
    
    session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "nomuser"
    session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "password"
    session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "FR"
    session.findById("wnd[0]").sendVKey 0
    
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Est-ce que ".Airbus Corporate Production PAC" fait bien partie des choix de la fenêtre de logon SAP ?
    Si oui, il y a peut-être un problème au niveau des espaces.
    Peut-être qu'ils ont ajouté ou supprimer des espaces dans la nouvelle version (?)

    Ceci dit, je te remercie pour ton code qui vient de me donner une méthode de me brancher via SSO... Oh yes
    MPi²

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    geek
    Inscrit en
    Mai 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : geek
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 44
    Points : 32
    Points
    32
    Par défaut
    Oui le texte est le bon,
    je l'ai récupéré d'un raccourci généré pas SAP lui même

    j'ai avancé depuis, et me suis rendu compte d'une chose
    ce code fonctionne avec SAP 7.30 mais avec une version plus récente 7.30 x xxx xxxx
    il a fallu mettre une pause de quelque seconde a un endroit aussi


    j'avais donc une version bugguée


    Le code il vient de ce topic
    https://www.developpez.net/forums/d1...sap-logon-vba/

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    geek
    Inscrit en
    Mai 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : geek
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 44
    Points : 32
    Points
    32
    Par défaut
    ce code fonctionne
    testé sur win7 sap7.30 et win10 sap7.40

    il est plus sécurisé dans le sens ou le password n'est pas écrit en dur dans la macro


    le dernier soucis que j'ai c'est lorsque une connection avec le même user est déjà active sur un autre PC
    ce qui arrive rarement, mais bon...





    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Sub logonSAP()
    On Error Resume Next
    
     Application.DisplayAlerts = False
     
    If Not IsObject(SAP_applic) Then
        Set SapGuiAuto = GetObject("SAPGUI")
        Set SAP_applic = SapGuiAuto.GetScriptingEngine
    End If
     
     
    er = Err.Number
    On Error GoTo 0
     
    If er <> 0 Then
      er = 0
      On Error Resume Next
       
      Call Shell("C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", vbMinimizedFocus)
      Call Shell("C:\Program Files (x86)\SAP\FrontEnd\SAPGUI\saplogon.exe", vbMinimizedFocus)
      
      Application.Wait Time + TimeSerial(0, 0, 5)
      
      On Error GoTo 0
     
      er = 0
      On Error Resume Next
      If Not IsObject(SAP_applic) Then
        Set SapGuiAuto = GetObject("SAPGUI") 'Setting
        Set SAP_applic = SapGuiAuto.GetScriptingEngine
      End If
       
      er = Err.Number
      On Error GoTo 0
          
      If er <> 0 Then
        tmp = MsgBox("SAP Logon not installed on your system" & vbCrLf & _
          "Please install it using eSupport!", vbInformation)
        End
      End If
    End If
     
    Set Connection = SAP_applic.openconnection(".Airbus Corporate Production   PAC")    
    
    If Connection.Children.Count < 1 Then
    Exit Sub
    Else
    Set session = Connection.Children(0)
    End If
    
    On Error Resume Next 'evite de planter sur le fichier pwd non present
    
    Dim pwd As String
    Open Environ("userprofile") & "\Documents\pwd.txt" For Input As #1
    Line Input #1, pwd                                                                          '  <=============the password is in this file
    Close #1
    
    'si le password n'a pas été trouve on alerte et on sort du programme
    If pwd = "" Then
    Application.WindowState = xlMaximized
    MsgBox "le mot de passe SAP PAC doit être stocké dans C:\Users\nz.....\Documents\pwd.txt"
    Dim RetVal As Variant
    RetVal = Shell("Taskkill /im saplogon.exe /f", 0) 'tue SAP
    Application.Quit        'quite excel
    End If
    
    session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = Environ("username")
    session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = pwd '"paasword"
    
    session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "FR"
    session.findById("wnd[0]").sendVKey 0
    
    End Sub

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Ce n'est pas nécessaire d'appeler 2 fois le programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Call Shell("C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", vbMinimizedFocus)
      Call Shell("C:\Program Files (x86)\SAP\FrontEnd\SAPGUI\saplogon.exe", vbMinimizedFocus)
    De mon côté, j'ai utilisé une API pour chercher la fenêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #If VBA7 Then
        Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    #Else
        Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    #End If
    Comme je travaille avec la version 7.40, mais que ça peut éventuellement changer, j'ai mis une constante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const Titre As String = "SAP Logon 740"
    Et je cherche cette fenêtre durant 10 secondes max, au cas où la fenêtre change de nom et éviter la boucle sans fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
        
        #If VBA7 Then
            Dim lhWnd As LongPtr
        #Else
            Dim lhWnd As Long
        #End If
    
        Dim SapGuiAuto As Object
        Dim Temps As Double
    
        Temps = Timer
        
        'Vérifier si la fenêtre Logon est ouverte - sinon l'ouvrir
        lhWnd = FindWindow(vbNullString, Titre)
        If lhWnd = 0 Then
            Call Shell("C:\Program Files (x86)\SAP\FrontEnd\SAPGUI\saplogon.exe", vbMinimizedFocus)
            Do
                lhWnd = FindWindow(vbNullString, Titre)
                If Timer - Temps > 10 Then  '10 secondes de délai pour ouvrir la fenêtre
                    MsgBox "Impossible d'ouvrir la fenêtre Logon de SAP", vbExclamation, ""
                    Exit Sub
                End If
            Loop Until lhWnd > 0
        End If
    Il me reste à peaufiner un peu, mais je sens que ça s'en vient.
    Je ne connaissais pas la commande OpenConnection qui me permet maintenant d'ouvrir une session SSO sans même devoir entrer les username, password,...
    Et je n'ai aucun On Error Resume Next (que j'évite autant que je peux)
    MPi²

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    geek
    Inscrit en
    Mai 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : geek
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 44
    Points : 32
    Points
    32
    Par défaut
    tu pourras me montrer ta version finale si elle est en VBA ou VBS ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Voici où j'en suis
    Ça reste à tester, mais ça semble bien fonctionner pour l'instant après plusieurs tests.

    Comme j'ouvre une connexion SSO, je n'ai pas à entrer de mot de passe UserID et autres...
    Il faut donc ajuster au besoin.

    La procédure est une Function qui retourne un booléen (True si logué, False si problème...)

    En entête de module
    Déclaration de l'API pour trouver la fenêtre de logon, déclaration des objets SAP et Titre de la fenêtre de logon à modifier au besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Option Explicit
    
    #If VBA7 Then
        Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    #Else
        Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    #End If
    
    Const Titre As String = "SAP Logon 740" 'Changer au besoin
    
    Public SapGuiAuto As Object
    Public AppliSAP As Object
    Public Connection As Object
    Public Session As Object
    Public TmpSession As Object
    Appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub Requete()
        If Not logonSAP Then Exit Sub
        
        MsgBox "OK"
        
    '######################################
    
    'Traitement    ........................
    
    '######################################
        
        Set Connection = Nothing
        Set AppliSAP = Nothing
        Set Session = Nothing
        Set TmpSession = Nothing
        Set SapGuiAuto = Nothing
        
    End Sub
    Et la Function de log
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Function logonSAP() As Boolean
        #If VBA7 Then
            Dim lhWnd As LongPtr
        #Else
            Dim lhWnd As Long
        #End If
    
        Dim Temps As Double
        
        On Error GoTo Erreur
        
        Temps = Timer
        
        'Vérifier si la fenêtre Logon est ouverte - sinon l'ouvrir
        lhWnd = FindWindow(vbNullString, Titre)
        If lhWnd = 0 Then
            Call Shell("C:\Program Files (x86)\SAP\FrontEnd\SAPGUI\saplogon.exe", vbMinimizedFocus)
            Do
                lhWnd = FindWindow(vbNullString, Titre)
                If Timer - Temps > 10 Then  '10 secondes de délai pour ouvrir la fenêtre sinon on sort
                    MsgBox "Impossible d'ouvrir la fenêtre SAP Logon", vbExclamation, ""
                    Exit Function
                End If
            Loop Until lhWnd > 0
        End If
        
        If AppliSAP Is Nothing Then
            Set SapGuiAuto = GetObject("SAPGUI")
            Set AppliSAP = SapGuiAuto.GetScriptingEngine
        End If
         
        'Ouverture d'une session PRD - SSO
        If Connection Is Nothing Then
            Set Connection = AppliSAP.OpenConnection("PRD - SSO")   'Changer au besoin
        End If
        
        'Délai de 3 secondes pour ouverture de la fenêtre SAP - Ajuster selon systèmes...(?)
        '2 secondes n'est pas toujours suffisant dans mon cas
        Application.Wait Now + TimeSerial(0, 0, 3)
        
        'Choisir la Session PRD non utilisée, si ouverte
        If Not Connection.DisabledByServer And Left(Connection.Description, 3) = "PRD" Then
            For Each TmpSession In Connection.Children
                If TmpSession.Busy = False Then
                    Set Session = TmpSession
                End If
            Next
        End If
        
        If Session Is Nothing Then
            MsgBox "Impossible de trouver une session libre", vbExclamation, "?!?"
            Set TmpSession = Nothing
            Set Connection = Nothing
            Set AppliSAP = Nothing
            Set SapGuiAuto = Nothing
            Exit Function
        Else
            logonSAP = True
        End If
            
        Exit Function
    Erreur:
        MsgBox Err.Number & vbCrLf & Err.Description
        Stop    'pour débogage - F8 passe à la ligne suivante
        Resume  'F8 se rend sur la ligne en défaut
        
    End Function
    MPi²

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Le code que j'ai mis n'est pas concluant...
    Je vais revenir dès que je peux avec quelque chose de plus "béton"
    MPi²

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    geek
    Inscrit en
    Mai 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : geek
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 44
    Points : 32
    Points
    32
    Par défaut
    en effet
    je n'ai pas réussi a le faire fonctionner correctement

    par contre je n'ai pas SSO, mais même en l'adaptant

    je suis moi aussi sur du 7.40 maintenant

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Il y avait un bogue si SAP était ouvert et qu'on re-roulait la macro.
    Rien de bien grave, mais avec ce code, ça devrait passer mieux.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Function logonSAP() As Boolean
        #If VBA7 Then
            Dim lhWnd As LongPtr
        #Else
            Dim lhWnd As Long
        #End If
        Dim Temps As Double
        
        On Error GoTo Erreur
        
        'Vérifier si la fenêtre Logon est ouverte - sinon l'ouvrir
        Temps = Timer
        lhWnd = FindWindow(vbNullString, Titre)
        If lhWnd = 0 Then
            Call Shell("C:\Program Files (x86)\SAP\FrontEnd\SAPGUI\saplogon.exe", vbMinimizedFocus)
            Do
                lhWnd = FindWindow(vbNullString, Titre)
                If Timer - Temps > 10 Then  '10 secondes de délai pour ouvrir la fenêtre sinon on sort
                    MsgBox "Impossible d'ouvrir la fenêtre SAP Logon", vbExclamation, ""
                    Exit Function
                End If
            Loop Until lhWnd > 0
        End If
        
        If AppliSAP Is Nothing Then
            Set SapGuiAuto = GetObject("SAPGUI")
            Set AppliSAP = SapGuiAuto.GetScriptingEngine
        End If
         
        'Ouverture d'une session PRD - SSO
        'Si SAP est déjà  ouvert, on cherche une session libre
        If AppliSAP.Connections.Count > 0 Then
            For Each Connection In AppliSAP.Children
                If Not Connection.DisabledByServer And Left(Connection.Description, 3) = "PRD" Then
                    For Each TmpSession In Connection.Children
                        If TmpSession.Busy = False Then
                            Set Session = TmpSession
                            logonSAP = True
                            Exit Function
                        End If
                    Next
                End If
            Next
        Else
            'Si SAP est fermé
            Set Connection = AppliSAP.OpenConnection("PRD - SSO")   'Changer au besoin
            Temps = Timer
            Do
                Set Session = Connection.Sessions(0)
                If Timer - Temps > 10 Then
                    MsgBox "Impossible de créer une session", vbExclamation, ""
                    Exit Function
                End If
            Loop While Session Is Nothing
        End If
        
        
        If Session Is Nothing Then
            MsgBox "Impossible de trouver une session libre", vbExclamation, "?!?"
            Set TmpSession = Nothing
            Set Connection = Nothing
            Set AppliSAP = Nothing
            Set SapGuiAuto = Nothing
            Exit Function
        Else
            logonSAP = True
        End If
            
        Exit Function
    Erreur:
        MsgBox Err.Number & vbCrLf & Err.Description
        Stop    'pour débogage - F8 passe à la ligne suivante
        Resume  'F8 se rend sur la ligne en défaut
        
    End Function
    MPi²

  11. #11
    Membre à l'essai
    Homme Profil pro
    Stagiaire Informatique
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Stagiaire Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par parmi Voir le message
    Il y avait un bogue si SAP était ouvert et qu'on re-roulait la macro.
    Rien de bien grave, mais avec ce code, ça devrait passer mieux.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    Function logonSAP() As Boolean
        #If VBA7 Then
            Dim lhWnd As LongPtr
        #Else
            Dim lhWnd As Long
        #End If
        Dim Temps As Double
        
        On Error GoTo Erreur
        
        'Vérifier si la fenêtre Logon est ouverte - sinon l'ouvrir
        Temps = Timer
        lhWnd = FindWindow(vbNullString, Titre)
        If lhWnd = 0 Then
            Call Shell("C:\Program Files (x86)\SAP\FrontEnd\SAPGUI\saplogon.exe", vbMinimizedFocus)
            Do
                lhWnd = FindWindow(vbNullString, Titre)
                If Timer - Temps > 10 Then  '10 secondes de délai pour ouvrir la fenêtre sinon on sort
                    MsgBox "Impossible d'ouvrir la fenêtre SAP Logon", vbExclamation, ""
                    Exit Function
                End If
            Loop Until lhWnd > 0
        End If
        
        If AppliSAP Is Nothing Then
            Set SapGuiAuto = GetObject("SAPGUI")
            Set AppliSAP = SapGuiAuto.GetScriptingEngine
        End If
         
        'Ouverture d'une session PRD - SSO
        'Si SAP est déjà  ouvert, on cherche une session libre
        If AppliSAP.Connections.Count > 0 Then
            For Each Connection In AppliSAP.Children
                If Not Connection.DisabledByServer And Left(Connection.Description, 3) = "PRD" Then
                    For Each TmpSession In Connection.Children
                        If TmpSession.Busy = False Then
                            Set Session = TmpSession
                            logonSAP = True
                            Exit Function
                        End If
                    Next
                End If
            Next
        Else
            'Si SAP est fermé
            Set Connection = AppliSAP.OpenConnection("PRD - SSO")   'Changer au besoin
            Temps = Timer
            Do
                Set Session = Connection.Sessions(0)
                If Timer - Temps > 10 Then
                    MsgBox "Impossible de créer une session", vbExclamation, ""
                    Exit Function
                End If
            Loop While Session Is Nothing
        End If
        
        
        If Session Is Nothing Then
            MsgBox "Impossible de trouver une session libre", vbExclamation, "?!?"
            Set TmpSession = Nothing
            Set Connection = Nothing
            Set AppliSAP = Nothing
            Set SapGuiAuto = Nothing
            Exit Function
        Else
            logonSAP = True
        End If
            
        Exit Function
    Erreur:
        MsgBox Err.Number & vbCrLf & Err.Description
        Stop    'pour débogage - F8 passe à la ligne suivante
        Resume  'F8 se rend sur la ligne en défaut
        
    End Function
    Bonjour, j'essaye de lancer ton code dans vba mais sa ne fonctionne pas.

    Voici l'erreur affiché :

    Nom : connection.PNG
Affichages : 5560
Taille : 57,2 Ko

    Merci.

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Regarde le 1er bout de code du message #7
    Il faut déclarer les APIs en entête de module standard si on veut qu'elles soient disponibles partout dans le programme.
    Autrement, on peut les déclarer Private en entête de page de code où on s'en sert...
    MPi²

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour le fil, bonjour Parmi,

    Désolé de déterrer un vieux sujet, mais j'aimerais pouvoir piloter l'ouverture de SAP avec Excel.

    Avec le dernier code que tu as donné, j'ai 2 soucis :
    1) SAP me dit qu'un script ouvre une connexion
    Nom : 2019-02-02_13h13_00.png
Affichages : 4348
Taille : 9,6 Ko

    2) Le nom du système sur lequel je double clique pour me connecter est : PE1 - Prd - NW2004S ECC
    Si je mets cette référence dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Connection = AppliSAP.OpenConnection("PE1 - Prd - NW2004S ECC")
    J'ai une erreur 1000 "SAP Logon Entry not found"

    Qui peut me donner un coup de main SVP ?

    Par avance merci

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Je n'ai plus accès à SAP... Ça risque d'être difficile d'aider maintenant...

    Pour ton premier problème, je pense que ça vient des options de SAP.
    Dans la fenêtre principale, vas dans le menu Options.
    Dans la partie de gauche il y a une section qui concerne le scripting.
    Tu dois décocher 2 boîtes qui forcent ces messages.

    Pour le 2e problème, dans mon cas je me connectais avec SSO qui permet de se connecter sans avoir à donner le UserID, mot de passe, etc...
    Est-ce la même chose de ton côté?
    MPi²

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    geek
    Inscrit en
    Mai 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : geek
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 44
    Points : 32
    Points
    32
    Par défaut
    Bruno, comme le dit Parmi ton premier problème se résout dans les options SAP

    -option
    -accessibilité et Scripting
    -support de scrip => activer support de script, et décocher le reste


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Connection = AppliSAP.OpenConnection("PE1 - Prd - NW2004S ECC")
    pour le 2ieme problème c'est ce que tu as entre les "" qui ne va pas, à mon avis
    je viens de tester avec un de mes macros de logon, et en effet si le nom n'est pas bon, on a le message que tu as
    erreur 1000 "SAP Logon Entry not found"
    connecte toi a PE1, crée un raccourci sur le bureau et édite le
    tu devrais y trouver le nom de la connexion à Description

Discussions similaires

  1. VBA connecté à SAP
    Par Val2000 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 03/10/2013, 17h52
  2. Réponses: 1
    Dernier message: 03/01/2010, 12h49
  3. Réponses: 1
    Dernier message: 31/12/2009, 11h22
  4. Comment piloter SAP via VBA Access ?
    Par megapacman dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/08/2008, 14h12
  5. [JDBC]connection à db2 via websphere
    Par mlequim dans le forum JDBC
    Réponses: 23
    Dernier message: 06/07/2005, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo