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 :

Excel choix Système SAP


Sujet :

SAP

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Excel choix Système SAP
    Bonjour,

    j'utilise plusieurs types de connexion SAP et j'aimerais faire plusieurs choses :

    • Identifier si le système est déjà connecté.
      exemple: "If APO is connect then..."
    • Sélectionner un système connecté
      exemple: "with APO system..."


    Types de système utilisé:
    • SAP P93
    • SAP P94
    • SAP APO


    pour me connecter, j’utilise : Set Connection = Appl.OpenConnection("Système utilisé", True)
    merci d'avance

    Fox Leman

  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,

    Je ne sais pas si ça peut t'aider, mais ici on utilise 2 systèmes PRD et PBW (qui passe par le web donc que je ne peux automatiser simplement...)
    Je vérifie donc si une des sessions ouvertes est PRD et si elle n'est pas occupée à rouler une transaction.
    Si elle est occupée, je sors de la Sub

    NB: Je n'utilise pas OpenConnection
    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
        Set SapGuiAuto = GetObject("SAPGUI")
        If Not IsObject(SapGuiAuto) Then
            Exit Sub
        End If
        
        Set AppliSAP = SapGuiAuto.GetScriptingEngine()
        If Not IsObject(AppliSAP) Then
            Exit Sub
        End If
        
        'Choisir la Session PRD non utilisée, si ouverte
        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  'Vérifie si la session est déjà occupée à rouler une transaction
                        Set Session = TmpSession
                        GoTo FoundSession
                    End If
                Next
            End If
        Next
    
    FoundSession:
        If Session Is Nothing Then
            MsgBox "Ouvrir une session SAP-PRD et recommencer" & vbCrLf & _
                    "S'il y a une session ouverte, elle est probablement en cours d'exécution", vbExclamation, "Erreur de connexion"
            Exit Sub
        End If
    .......................
    MPi²

  3. #3
    Membre éclairé
    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
    Points : 764
    Points
    764
    Par défaut
    Super ce bout de code, je ne savais pas le faire . Je l'ai adapté en une fonction pour qu'il soit un peu + souple d'usage, si ça peut servir à d'autres:

    Code de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Set session = get_active_session("NSP", "001", "BCUSER", "EN")
    If Not session Is Nothing Then
        MsgBox "déjà connecté au système " + session.Info.SystemName
    End If
    End Sub
    La fonction:
    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
    Function get_active_session(systemID As String, clientNumber As String, userID As String, languageCode As String, Optional selectNotBusyOne As Boolean = False) As Object
    
    
        Set get_active_session = Nothing
    
        On Error Resume Next
        Set SapGuiAuto = GetObject("SAPGUI")
        If err.Number <> 0 Then
            ' première fois si SAP GUI n'a pas encore été démarré (donc aucune session)
            Exit Function
        End If
        If Not IsObject(SapGuiAuto) Then
            Exit Function
        End If
    
        Set AppliSAP = SapGuiAuto.GetScriptingEngine()
        If Not IsObject(AppliSAP) Then
            Set SapGuiAuto = Nothing
            Exit Function
        End If
    
        'Choisir la Session PRD non utilisée, si ouverte
        For Each connection In AppliSAP.Children
            If Not connection.DisabledByServer Then
                For Each TmpSession In connection.Children
                If TmpSession.Info.SystemName = systemID _
                    And TmpSession.Info.client = clientNumber _
                    And TmpSession.Info.user = userID _
                    And TmpSession.Info.language = languageCode _
                    Then
                    If selectNotBusyOne = False Then
                        Set get_active_session = TmpSession
                        GoTo theend
                    ElseIf selectNotBusyOne = True And TmpSession.Busy = False Then
                        'cas où la session n'est pas occupée à rouler une transaction
                        Set get_active_session = TmpSession
                        GoTo theend
                    End If
                End If
                Next
            End If
        Next
    
        Exit Function
    
    theend:
        Set AppliSAP = Nothing
        Set SapGuiAuto = Nothing
    End Function

  4. #4
    Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    c'est exactement ce que je cherchais, un grand merci à tous pour votre aide.

  5. #5
    Membre éclairé
    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
    Points : 764
    Points
    764
    Par défaut petite correction
    J'ai modifié le code ci-dessus pour gérer le cas où le SAP GUI n'a pas encore été démarré (autour de Set SapGuiAuto = GetObject("SAPGUI"))

  6. #6
    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
    Bien vu
    MPi²

  7. #7
    Membre éclairé
    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
    Points : 764
    Points
    764
    Par défaut Attention tester TmpSession.Busy avant d'accéder à TmpSession.Info !
    Pour information, je viens de voir que mon code posté le 24/05/2017, 11h02 n'est pas tout à fait correct, mais je n'arrive pas à le corriger dans le forum, il faut absolument tester TmpSession.Busy avant d'accéder à TmpSession.Info car si la session est busy l'accès à Info se met en attente jusqu'à ce qu'elle ne soit plus busy.

  8. #8
    Candidat au Club
    Homme Profil pro
    Manager opérationnel
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Manager opérationnel

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Points : 2
    Points
    2
    Par défaut COMPLEMENt D'INFOS
    Bonjour je fouille désespérément les sites pour trouver une réponse a ma question.
    J'essaye de me connecter a SAP a travers les différents code que j'ai pu dénicher. Le plus proche du résulta me bloque sur la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oConnection = SAPGuiApp.OpenConnection("..SAP2000 Production             PGI", True)
    la question est la suivante. A quoi correspond le string ("..SAP2000 Production PGI", True) ?

    Ma fenetre SAP se lance bien mais la sa plante

    Merci d'avance de vos retours.

    question subsidiaire ou pourrais je trouver des tutos pour créer des JOB SAP directement. J'ai pas mal de doc sur l'ABAP mai spas sur les jobs qui me permettrai d'automatiser des extractions.

Discussions similaires

  1. OLE Excel choix imprimante
    Par BOUBOU81 dans le forum C++Builder
    Réponses: 6
    Dernier message: 11/12/2007, 12h26
  2. [excel]choix de plusieurs langues
    Par totofe dans le forum Excel
    Réponses: 8
    Dernier message: 22/06/2007, 11h23
  3. [VBA-Excel] et extraction SAP
    Par Gerard6969 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/06/2007, 08h42
  4. Réponses: 1
    Dernier message: 17/05/2006, 09h26
  5. [VBA]-EXCEL: choix de feuille et somme de plage
    Par silevin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/01/2006, 17h51

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