Bonjour à tous,

Je suis nouveau sur le forum et j'espère que vous pourrez m'aider.

J'utilise Excel pour me connecter à SAP pour ouvrir des transactions afin de créer des raccourcis plus rapidement en pouvant utiliser des variantes et des scripts spécifiques.

Voici mon problème :
Sur mon Excel, j'ai plusieurs boutons qui utilisent une transaction unique qui vient lire le texte du bouton afin d'ouvrir la transaction associé pour faire simple. Or lorsque j'exécute ma macro depuis l'écran d'accueil de SAP, la macro fonctionne mais lorsque je suis déjà dans une transaction je voudrais pouvoir choisir s'il y a une autre session/fenetre SAP ouverte qui n'est pas dans une transaction.

Voici ma macro sur mes boutons :
Code VBA : 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
Sub Tableau_de_bord() ' Macro exécutée dans l'interface de SAP
 
'Lecture du bouton cliqué
With Sheets("Tableau de Bord")
    BtnTab = ActiveSheet.Shapes(application.Caller).TextFrame.Characters.Text
    'BtnTab = "Structure Technique"
End With
 
'Recherche de la transaction suite au clique sur le bouton
Transaction = RECHERCHEV(BtnTab, ThisWorkbook.Sheets("Tableau de Bord").Range("Q4:T30"), "2", "False")
 
'Recherche de la variante suite au clique sur le bouton
Variante = RECHERCHEV(BtnTab, ThisWorkbook.Sheets("Tableau de Bord").Range("Q4:T30"), "3", "False")
 
'Recherche du lancement automatique suite au clique sur le bouton
LancementAuto = RECHERCHEV(BtnTab, ThisWorkbook.Sheets("Tableau de Bord").Range("Q4:T30"), "4", "False")
 
'Lancer la fonction "Connexion_SAP", si la connexion échoue, quitte la macro
W_Ret = Connexion_SAP
If Not W_Ret Then
    Exit Sub
End If
 
'Si une erreur survient dans l'exécution de la macro dans SAP, va à la ligne "myerror"
On Error GoTo myerror
 
'Macro enregistrée au préalable avec SAP
objSess.FindById("wnd[0]/tbar[0]/okcd").Text = Transaction 'Ecrire dans la barre des transactions la transaction suivante.
objSess.FindById("wnd[0]").SendVKey 0 'Touche entrer - validation
 
'Vérification de la présence d'une variante
If Variante = "" Then
    GoTo VerifLancementAuto
End If
 
'Selectionner la variante
objSess.FindById("wnd[0]/tbar[1]/btn[17]").Press 'Double carré pour choisir la variante
objSess.FindById("wnd[1]/usr/txtV-LOW").Text = Variante 'Ecrire le nom de la variante
objSess.FindById("wnd[1]/usr/txtENAME-LOW").Text = "" 'Supprimer le nom d'utilisateur
objSess.FindById("wnd[1]/tbar[0]/btn[8]").Press 'Valider Horloge
 
'Vérification de la présence du lancement automatique
VerifLancementAuto:
If LancementAuto = "O" Then
    session.FindById("wnd[0]/tbar[1]/btn[8]").Press 'Valider Horloge
End If
 
Exit Sub
 
myerror:
    MsgBox "Une erreur est survenue lors de la récupération des données", vbCritical + vbOKOnly   
 
End Sub

Voici le reste (fonctions et déclaration des variables et objets) :
Code VBA : 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
'Declaration des variables pour se connecter à SAP
Public SapGuiAuto, WScript
Public objGui As GuiApplication
Public objConn As GuiConnection
Public objSess As GuiSession
Dim W_System
Dim W_Ret As Boolean
Dim Variante As Variant
Dim Transaction As Variant
Dim LancementAuto As Variant
Dim BtnTab As String
 
'Fonction pour se connecter à l'interface SAP
Function Connexion_SAP() As Boolean
 
Dim il, it, W_conn, W_Sess, TransactionSession
 
'Nom de la session SAP à laquelle on veut se connecter sous la forme AAABBB : AAA est le nom du système et BBB est le numéro
W_System = "PRD200"
 
'Si connecté à rien, installer les objet
If objGui Is Nothing Then
    Set SapGuiAuto = GetObject("SAPGUI")
    Set objGui = SapGuiAuto.GetScriptingEngine
End If
 
On Error GoTo Erreur 'Si erreur alors message
 
'Boucle sur les sessions SAP Ouvertes jusqu'à trouver celle de notre variable "W_system"
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
 
'Explication : Il faut vérifier les sessions et se connecter à la premiere qui est sur la transaction SESSION MANAGER.
TransactionSession = "SESSION_MANAGER"
 
If Not IsObject(sapApplication) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set sapApplication = SapGuiAuto.GetScriptingEngine()
End If
If Not IsObject(sapConnection) Then
    Set sapConnection = sapApplication.Children(0)
End If
 
If Not IsObject(sapsession) Then
    Set sapsession = sapConnection.Children(0)
End If
 
'Si que une session dans une transaction alors ouvrir une autre
If W_conn.Children.Count < 2 Then
    objSess.CreateSession
End If
 
'Test choix d'une transaction sur le menu d'accueil
For i = 1 To W_conn.Children.Count
    If sapsession.Info.Transaction = TransactionSession Then
        Set objSess = objConn.Children(i)
        Set objConn = objGui.Children(i)
        Set sapsession = sapConnection.Children(i)
        Exit For
    Else
        sapConnection.logoff
    End If
Next
 
Erreur:
If objSess Is Nothing Then
    MsgBox "Pas de session active dans le système " + W_System + ", ou le scripting n'est pas autorisé.", vbCritical + vbOKOnly
    Connexion_SAP = False
    Exit Function
End If
 
'Active le scripting
If IsObject(WScript) Then
    WScript.ConnectObject objSess, "on"
    WScript.ConnectObject session, "on"
    WScript.ConnectObject application, "on"
End If
 
Connexion_SAP = True
End Function
 
Function RECHERCHEV(Valeur_Cherchee As Variant, Table_matrice As Range, No_index_col As Single, Optional Valeur_proche As Boolean)
 
On Error GoTo RECHERCHEVerror
    RECHERCHEV = application.VLookup(Valeur_Cherchee, Table_matrice, No_index_col, Valeur_proche)
    If IsError(RECHERCHEV) Then RECHERCHEV = "#N/A"
 
Exit Function
RECHERCHEVerror:
    RECHERCHEV = "#N/A"
End Function[/QUOTE]
 
La fonction Connexion_SAP() me permet de me connecter à la bonne session et au bon système SAP mais je n'arrive pas à selectionner la session qui se trouve dans le menu (Transaction : SESSION_MANAGER). 
J'ai essayer ce bout de code mais rien à faire : 
[QUOTE]'Explication : Il faut vérifier les sessions et se connecter à la premiere qui est sur la transaction SESSION MANAGER.
TransactionSession = "SESSION_MANAGER"
 
If Not IsObject(sapApplication) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set sapApplication = SapGuiAuto.GetScriptingEngine()
End If
If Not IsObject(sapConnection) Then
    Set sapConnection = sapApplication.Children(0)
End If
 
If Not IsObject(sapsession) Then
    Set sapsession = sapConnection.Children(0)
End If
 
'Si que une session dans une transaction alors ouvrir une autre
If W_conn.Children.Count < 2 Then
    objSess.CreateSession
End If
 
'Test choix d'une transaction sur le menu d'accueil
For i = 1 To W_conn.Children.Count
    If sapsession.Info.Transaction = TransactionSession Then
        Set objSess = objConn.Children(i)
        Set objConn = objGui.Children(i)
        Set sapsession = sapConnection.Children(i)
        Exit For
    Else
        sapConnection.logoff
    End If
Next

J'espère être assez clair.
Merci d'avance.