Bonjour,
J'ai développé dans le passé plusieurs VB scripts qui permettent de se connecter à SAP afin de répéter de manière automatique une série de tâches. Or avec cette macro qui est basée sur le recording suivant
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 If Not IsObject(application) Then Set SapGuiAuto = GetObject("SAPGUI") Set application = SapGuiAuto.GetScriptingEngine End If If Not IsObject(connection) Then Set connection = application.Children(0) End If If Not IsObject(session) Then Set session = connection.Children(0) End If If IsObject(WScript) Then WScript.ConnectObject session, "on" WScript.ConnectObject application, "on" End If session.findById("wnd[0]").maximize session.findById("wnd[0]/tbar[0]/okcd").text = "QP02" session.findById("wnd[0]").sendVKey 0 session.findById("wnd[0]/usr/ctxtRC27M-MATNR").text = "" session.findById("wnd[0]/usr/ctxtRC27M-WERKS").text = "1211" session.findById("wnd[0]/usr/ctxtRC271-PLNNR").text = "rmmr0001" session.findById("wnd[0]/usr/ctxtRC271-AENNR").text = "500000287151" session.findById("wnd[0]/usr/ctxtRC271-AENNR").setFocus session.findById("wnd[0]/usr/ctxtRC271-AENNR").caretPosition = 12 session.findById("wnd[0]").sendVKey 0 session.findById("wnd[0]/mbar/menu[0]/menu[5]").select session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/txtMAPL-PLNAL[0,0]").text = "1" session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/txtMAPL-PLNAL[0,1]").text = "1" session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-MATNR[2,0]").text = "120609" session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-MATNR[2,1]").text = "125780" session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-WERKS[3,0]").text = "1211" session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-WERKS[3,1]").text = "1211" session.findById("wnd[1]/tbar[0]/btn[0]").press session.findById("wnd[0]/tbar[0]/btn[11]").press
j'essaie d'ajouter des articles à un plan d'inspection. Je dois définir les positions qui correspondent aux 3 colonnes. Voir ci-dessus en rouge
Pour ce faire, je définis la variable i
Or quand j'exécute et arrive à l'endroit suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Dim i As Integer i = 0
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/txtMAPL-PLNAL[1," & i & "]").Text = Group_Counter session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-MATNR[2," & i & "]").Text = Material session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-WERKS[3," & i & "]").Text = Plant
Je reçois le message d'erreur suivant.
Si vous avez des idées ou suggestions, un grand merci d'avance ...
Bàv
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
79
80
81
82
83
84
85
86
87
88
89
90
91 'désactive les message d'excel lorsque le réseau ou SAP est trop lent Private Declare Function _ CoRegisterMessageFilter Lib "OLE32.DLL" _ (ByVal lFilterIn As Long, _ ByRef lPreviousFilter) As Long Sub RPRVMLSD() 'On Error Resume Next ' Gestion de l'interception desmessages OLE Dim lMsgFilter As Long ' Intercepter les messages OLE CoRegisterMessageFilter 0&, lMsgFilter 'synchronisation avec sap Set SapGuiAuto = GetObject("SAPGUI") Set Connection = SapGuiAuto.GetScriptingEngine.Children(0) Set session = Connection.Children(0) 'Vérifie si les 3 conditions setter ci-haut sont existantes If Not IsObject(SapGuiAuto) Then Set SAPguiApp = CreateObject("Sapgui.ScriptingCtrl.1") End If If Not IsObject(Connection) Then Set Connection = SAPguiApp.OpenConnection("1.4-R/3 Sandbox 1", True) End If If Not IsObject(session) Then Set session = Connection.Children(0) End If 'Dim cptRow As Integer 'cptRow = 2 Dim cptRow, Id, Id_Prec As Integer cptRow = 2 Id = Cells(cptRow, 1) 'RUPTURE DE SEQUENCE While (Cells(cptRow, 1) <> "") Id_Prec = Id session.findById("wnd[0]/tbar[0]/okcd").Text = "qp02" session.findById("wnd[0]").sendVKey 0 Plant = Sheets("QP02").range("B" & cptRow).Value Group = Sheets("QP02").range("C" & cptRow).Value Change_Num = Sheets("QP02").range("D" & cptRow).Value session.findById("wnd[0]/usr/ctxtRC27M-WERKS").Text = Plant session.findById("wnd[0]/usr/ctxtRC271-PLNNR").Text = Group session.findById("wnd[0]/usr/ctxtRC271-AENNR").Text = Change_Num session.findById("wnd[0]").sendVKey 6 session.findById("wnd[0]/mbar/menu[0]/menu[5]").Select 'Dim i As Integer 'i = 0 While (Id_Prec = Id And Cells(cptRow, 1) <> "") 'TRAITEMENT SUR LA LIGNE 'INIT POUR TRAIT SUIVANT Group_Counter = Sheets("QP02").range("E" & cptRow).Value Material = Sheets("QP02").range("F" & cptRow).Value Plant = Sheets("QP02").range("G" & cptRow).Value Dim i As Integer i = 0 session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/txtMAPL-PLNAL[1," & i & "]").Text = Group_Counter session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-MATNR[2," & i & "]").Text = Material session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-WERKS[3," & i & "]").Text = Plant i = i + 1 cptRow = cptRow + 1 Id = Cells(cptRow, 1) session.findById("wnd[1]/tbar[0]/btn[0]").press session.findById("wnd[0]/tbar[0]/btn[11]").press Wend Wend End Sub
Partager