VBA Excel via SAP en IW32
bonjour a tous
je sollicite vos compétence de chacun car je recherche la solution mais je la trouve pas
le but de ce fichier Excel et la liste de travaux que j aurais ,la macro sert a automatisé a crée les OT sur Sap et me les reporter sur l Excel une fois créer
sur plusieurs ligne environ 1000 ligne voir plus.
a l'exécution j ai pas de plantage ouverture Sap ce fait automatique
il va bien sur le Iw32
il me sélection le type d'ordre
et après c'est j ai des erreurs de script :
sur les ligne décrit : SAPLCOIH:7100 obliger de mettre 7120 et refait le test sa fonctionne puis après sa fonctionne plus
et je bloquer sur les autre ligne ou il Saploih:3001
et la je sais plus ou cherchez l erreur car c'est un script enregistrer sur Sap
Merci d avance a ceux qui donnerons leur solution
ci-joint le fichier et le script
Sub Bouton3_Cliquer()
If Not IsObject(Sapplication) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set Sapplication = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = Sapplication.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
Range("A6").Select
Do
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "IW31"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtAUFPAR-PM_AUFART").Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Range("A1").Select
session.findById("wnd[0]/usr/cmbCAUFVD-PRIOK").Key = ActiveCell.Value
ActiveCell.Offset(0, 1).Range("A1").Select
session.findById("wnd[0]/usr/subOBJECT:SAPLCOIH:7100/ctxtCAUFVD-TPLNR").Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Range("A1").Select
session.findById("wnd[0]/usr/subOBJECT:SAPLCOIH:7100/ctxtCAUFVD-TPLNR").SetFocus
session.findById("wnd[0]/usr/subOBJECT:SAPLCOIH:7100/ctxtCAUFVD-TPLNR").caretPosition = 23
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/subSUB_TEXT:SAPLCOIH:1103/cntlLTEXT/shell").Text = ActiveCell.Value + vbCr + ""
ActiveCell.Offset(0, 1).Range("A1").Select
session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/subSUB_TEXT:SAPLCOIH:1103/cntlLTEXT/shell").setSelectionIndexes 4, 4
session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subHEADER:SAPLCOIH:0154/ctxtCAUFVD-INGPR").Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Range("A1").Select
session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subHEADER:SAPLCOIH:0154/ctxtCAUFVD-VAPLZ").Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Range("A1").Select
session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subHEADER:SAPLCOIH:0154/ctxtCAUFVD-ILART").Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Range("A1").Select
session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subTERM:SAPLCOIH:7300/ctxtCAUFVD-REVNR").Text = ActiveCell.Value
ActiveCell.Offset(0, 1).Range("A1").Select
session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subTERM:SAPLCOIH:7300/ctxtCAUFVD-REVNR").SetFocus
session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subTERM:SAPLCOIH:7300/ctxtCAUFVD-REVNR").caretPosition = 7
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[25]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/subSUB_TEXT:SAPLCOIH:1103/cntlLTEXT/shell").setSelectionIndexes 0, 0
session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/subSUB_KOPF:SAPLCOIH:1102/btn%#AUTOTEXT001").press
session.findById("wnd[1]/usr/tblSAPLBSVATC_E/radJ_STMAINT-ANWS[0,1]").Selected = True
session.findById("wnd[1]/usr/tblSAPLBSVATC_E/radJ_STMAINT-ANWS[0,1]").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[0]/tbar[0]/btn[11]").press
session.findById("wnd[0]/tbar[0]/btn[3]").press
Range("A" & ActiveCell.Row).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Loop While ActiveCell.Value <> ""
End Sub
Bonjour stef80400,
Pour gérer SAP, il faut parfois mettre des temps de pause
Essayez donc de mettre la ligne suivante entre vos instructions (pas pour toutes)
Application.Wait Now() + TimeValue("00:00:01")
Mettez un point d'arrêt (F9) sur votre première ligne après le "Do"
Et faite avancer le code pas à pas avec F8
Ainsi vous pourrez peut-être voir à quel moment SAP est long à réagir
A+
ok d accord merci de l info je vais essayé ca
Bonjour,
Votre script a été fait initialement avec l'enregistreur de script ?
A+
bonjour,
oui le script a été fait avec l enregistreur Sap
Hello,
le probleme est sur toutes les lignes ou seulement sur certaines lignes ? Si juste sur certaines faut regarder que contient activecell, par exemple si activecell = rien ça peut generer une erreur
bonjour
pour le problèmes il y a que ligne souligné en jaune dont une ou j ai une erreur avec le numéro 7120 que je transforme en 7100 et ca marche une fois ,tu ferme sap tu relance ta macro et ca plante ,obliger de mettre 7120 enfin bref une fois les étapes passer sa plante a la ligne suite dont la je sait pas , et les autre ligne on la syntaxe de code
ce qui faut savoir le script Sap c'est du Wbs qu'on met dans une vba je pense l erreur serait les syntaxe apprès savoir les quel?
Salut stef80400
ce qui faut savoir le script Sap c'est du Wbs qu'on met dans une vba je pense l erreur serait les syntaxe apprès savoir les quel?
Faux, c'est du langage script SAP Data Service, l'API SAP permet de le gérer comme vous le faite dans le code
Le fait que ce soit le numéro 7120 ou 7100 est je pense lié au 1er ou 2ème choix
Ensuite, perso, je passe par une variable string temporaire pour l'inscrire sur SAP, ce serait du style
Dim sTmp As String
sTmp = ActiveCell.Value
Session.findById("wnd[0]/usr/subOBJECT:SAPLCOIH:7100/ctxtCAUFVD-TPLNR").Text = sTmp
A+
Merci de ton info
après plusieurs essais et comprendre d'où vient l erreur , je me suis aperçu que a la premier exécution de Sap j avais 7120 je ferme SAp je le réouvre le Code passe en 7100
donc ce matin j'ai réussi a avancer après la fermeture de Sap et l'ouverture pour faire mon test en pas a pas
après mon autre soucis pour la suite : l'écriture de mes casse sur Sap
Quand le code
session.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpIHKZ/ssubSUB_AUFTRAG:SAPLCOIH:1120/subHEADER:SAPLCOIH:0154/ctxtCAUFVD-INGPR").text = "01L"
cela fonctionne
et quand je passe
Text = ActiveCell.Value ActiveCell.Offset(0, 1).Range("A1").Select
J ai 0 au lieu d'avoir 01L
lorsque au début ca fonction avant passer sur volet suivant sur Sap
Bonjour,
Il ne faut pas laisser ".select" sinon, la valeur retournée est Vrai