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 :

Piloter sap logon en vba


Sujet :

SAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Par défaut Piloter sap logon en vba
    Bonjour à tous,

    Après un certain nombre de recherche j'ai fini par trouver un code qui par VBA qui rentre dans mes attendus.
    Le seul problème c'est que ce code n'est pas stable en cause le paramétrage de SAP GUI enfin je pense...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set session = collection.children(0)
    provoque régulièrement une erreur 614 (index non reconnu).

    C'est à cet endroit que mon code bloque si vous avez une idée ...

    D'avance merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2009
    Messages
    574
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 574
    Par défaut
    Hello,

    Je vois bien l'erreur VBA ("collection" non instancié), mais difficile de dire pourquoi sans + d'infos (code précédent pour en comprendre davantage) Note: SAP fournit de nombreuses "type libraries" COM, ici il doit s'agir de "SAP GUI Scripting", ça sera déjà + facile pour orienter les recherches (i.e. ce n'est pas le "sap logon control").

    Sandra

  3. #3
    Membre confirmé
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Par défaut re
    Bonjour et merci pour cette première réponse.

    Effectivement je me suis tourné vers les différentes librairies de sap (.ocx) mais le résultat est toujours le même.
    Le code si dessous n'est pas stable.

    Je dois automatiser 8 requêtes SAP chaque matin alors si quelqu'un à une soltion altenative ou un code qui fonctionne

    Cdlt

    Voici mon code de connexion:

    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
    Sub sVBScriptSAP()
    On Error Resume Next
    
    'Librairies ajoutées:
    'Window script Host Object model
    'Sap Remote Function call Control
    'SAP GUI scripting API
    
    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\SAP\FrontEnd\SAPGUI\saplogon.exe", vbMinimizedFocus)
      Call Shell("C:\Program Files\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")
    
    
    If Connection.Children.Count < 1 Then
    Exit Sub
    Else
    Set Session = Connection.Children(0)
    End If
    
    Session.FindById("wnd[0]/usr/txtRSYST-BNAME").Text = "user"
    Session.FindById("wnd[0]/usr/pwdRSYST-BCODE").Text = "mdp"
    Session.FindById("wnd[0]/usr/txtRSYST-LANGU").Text = "FR"
    Session.FindById("wnd[0]").sendVKey 0
    
    End sub

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2009
    Messages
    574
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 574
    Par défaut
    ah, ça aide d'avoir le code! Donc en fait tu démarres le SAP GUI, mais je pense que ça se fait en asynchrone, pendant que ton script continue à s'exécuter, d'où l'erreur fréquente que le SAP GUI n'est pas encore démarré.

    Dans une autre situation, j'avais utilisé ce code pour faire une boucle d'attente.

    Sandra

  5. #5
    Membre confirmé
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Par défaut re
    Très bonne piste !!

    Au début j'avais fait un code autour du handle de la fenetre pour être sur que celle-ci était montée mais en vain.

    Je viens de me pencher sur ton bout de code et cela me semble plus prometteur.

    Je vais tester de cette façon et je te tiens au courant et encore merci.

    Franck

    Code final:

    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
    76
    77
    78
    Private Declare Function WaitForSingleObject Lib "kernel32" _
       (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    
    Private Declare Function CloseHandle Lib "kernel32" _
       (ByVal hObject As Long) As Long
       
    Private Declare Function OpenProcess Lib "kernel32" _
       (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
        ByVal dwProcessId As Long) As Long
    
    
    Private Const INFINITE = -1&
    Private Const SYNCHRONIZE = &H100000
    
    
    Sub sVBScriptSAP()
    On Error Resume Next
    
    'Librairies ajoutées:
    'Window script Host Object model
    'Sap Remote Function call Control
    'SAP GUI scripting API
    
    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
      
        Dim iTask As Long, ret As Long, pHandle As Long
        iTask = Shell("C:\Program Files\SAP\FrontEnd\SAPgui\saplogon.exe", vbNormalFocus)
        pHandle = OpenProcess(SYNCHRONIZE, False, iTask)
        ret = WaitForSingleObject(pHandle, INFINITE)
        ret = CloseHandle(pHandle)
       
      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")
    
    
    If Connection.Children.Count < 1 Then
    'Set Session = Connection.Children(clng0)
    Exit Sub
    Else
    Set Session = Connection.Children(0)
    End If
    
    Session.FindById("wnd[0]/usr/txtRSYST-BNAME").Text = "user"
    Session.FindById("wnd[0]/usr/pwdRSYST-BCODE").Text = "mdp"
    Session.FindById("wnd[0]/usr/txtRSYST-LANGU").Text = "FR"
    Session.FindById("wnd[0]").sendVKey 0 
    End if

  6. #6
    Membre confirmé
    Homme Profil pro
    developpeur
    Inscrit en
    Octobre 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 124
    Par défaut re
    Je relance le sujet...

    Malgé une amélioration du code, les symptomes sont toujours présents.

    Je viens de faire une batterie de test mais rien ne change. La connexion reste aléatoire et plante toujours sur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set session = connexion.children(0)
    Cdlt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/02/2015, 09h04
  2. Piloter SAP avec vba et excel
    Par Debutant10 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 09/06/2013, 21h28
  3. [XL-2007] VBA ou Excel pour piloter sap export de fichier
    Par Debutant10 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 02/06/2013, 20h44
  4. Comment piloter SAP via VBA Access ?
    Par megapacman dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/08/2008, 14h12
  5. piloter access depuis macro vba dans excel
    Par debmlc dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/04/2007, 13h41

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