Microsoft 365 Modification prix SAP

Rouach

XLDnaute Nouveau
Bonjour tout le monde.

j'ai besoin de votre aide car je n'arrive pas a schématiser mon besoin avec vba....
en gros, j'ai une liste de 10'000 lignes avec 2 informations importantes ( N° article "colonne C" et prix "colonne I").

Dans mon fichier en Feuil 3 j'ai un exemple qui fonctionne:

une partie rouge qui doit restée là où elle est et invariable.
4 blocs avec chacun 2 lignes en vert qui sont variable ( les chiffres entre "Guillemets" doivent changer).

mon but: créer un fichier texte avec en en-tête ce bloc invariable puis autant de bloc variable de 12 lignes avec les infos modifiés en vert.

J'espère que vous avez compris car moi j'ai de la peine ;-)

dans le fichier joint je ne vous ai mis que 100 lignes.
 

Pièces jointes

  • Transfere FIA VBS.xlsm
    19.6 KB · Affichages: 4
C

Compte Supprimé 979

Guest
Bonjour Rouach

Pourquoi vouloir créer un fichier texte 🤔 pour pouvoir en faire un VBS apprès, c'est ça !?
C'est une solution que j'ai abandonné depuis longtemps 😝

J'attaque directement SAP depuis Excel, mais pour cela, il faut être sur le menu général
Ensuite vous lancez la transaction et remplissez les champs en VBA

Pour moi dans le code que vous avez donné, il manque l'accès à la transaction
sinon cela donne un code de ce style
VB:
Option Explicit

'https://simpleexcelvba.com/category/sap/
Sub MàJPrix()
  ' Variables objet pour SAP
  Dim App, Connection, Session, Wscript
  Dim SapGui As Object
  ' Variables autre
  Dim dLig As Long, Lig As Long, sTmp As String
  ' Demander à lutilisateur avant lancement
  If MsgBox("Vous devez être sur le menu général de SAP !" & vbCr & vbCr _
    & "Avant de continuer, est-ce bien le cas ?", vbQuestion + vbYesNo, "ATTENTION...") = vbNo Then Exit Sub
  ' Minimiser cette fenêtre
  ThisWorkbook.Windows.Application.WindowState = xlMinimized
  ' Suite pour SAP
  If Not IsObject(App) Then
    Set SapGui = GetObject("SAPGUI")
    Set App = SapGui.GetScriptingEngine
  End If
  If Not IsObject(Connection) Then
    Set Connection = App.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 App, "on"
  End If
  Session.findById("wnd[0]").maximize
  ' Avec la feuille nommée
  With Sheets("Feuil1")
    ' Dernière ligne rempliede la feuil1e
    dLig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Pour chaque ligne
    For Lig = 2 To dLig
      sTmp = .Range("C" & Lig)  ' Récupérer le code article
      Session.findById("wnd[0]/usr/ctxtIF_MATNR-LOW").Text = sTmp
      Session.findById("wnd[0]/tbar[1]/btn[8]").press
      Session.findById("wnd[0]/usr/chk[1,8]").Selected = True
      Session.findById("wnd[0]/tbar[1]/btn[7]").press
      Session.findById("wnd[0]/tbar[1]/btn[8]").press
      Session.findById("wnd[1]/usr/tblSAPLV14ATCTRL_D0102/ctxtVAKE-DATAB[0,0]").caretPosition = 8
      Session.findById("wnd[1]").sendVKey 2
      sTmp = .Range("I" & Lig)  ' Récupérer le prix
      Session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_D0201/txtKONP-KBETR[2,0]").Text = sTmp
      Session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_D0201/txtKONP-KBETR[2,0]").SetFocus
      Session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_D0201/txtKONP-KBETR[2,0]").caretPosition = 16
      Session.findById("wnd[0]/tbar[0]/btn[11]").press
      Session.findById("wnd[0]/tbar[0]/btn[3]").press
    Next Lig
  End With
  ' Effacer la variable objet
  Set Session = Nothing: Set Connection = Nothing: Set App = Nothing: Set SapGui = Nothing
  ' Maximise ce classeur
  ThisWorkbook.Windows.Application.WindowState = xlMaximized
End Sub
A+
 
Dernière modification par un modérateur:

Rouach

XLDnaute Nouveau
Heu quoi??!!! on peut directement y aller avec excel??? Mon Dieu.. Merci
alors j'utilise la ME1M
et c'est cette case que je dois modifier:
1663140663951.png
 
C

Compte Supprimé 979

Guest
Salut Rouach

Et bien oui on peut 😜 bon ça devrait donner quelque chose comme ça

VB:
Option Explicit

'https://simpleexcelvba.com/category/sap/
Sub MàJPrix()
  ' Variables objet pour SAP
  Dim App, Connection, Session, Wscript
  Dim SapGui As Object
  ' Variables autre
  Dim dLig As Long, Lig As Long, sTmp As String
  ' Demander à lutilisateur avant lancement
  If MsgBox("Vous devez être sur le menu général de SAP !" & vbCr & vbCr _
    & "Avant de continuer, est-ce bien le cas ?", vbQuestion + vbYesNo, "ATTENTION...") = vbNo Then Exit Sub
  ' Minimiser cette fenêtre
  ' ThisWorkbook.Windows.Application.WindowState = xlMinimized
  ' Suite pour SAP
  If Not IsObject(App) Then
    Set SapGui = GetObject("SAPGUI")
    Set App = SapGui.GetScriptingEngine
  End If
  If Not IsObject(Connection) Then
    Set Connection = App.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 App, "on"
  End If
  Session.findById("wnd[0]").maximize
  ' Lancer la transaction
  Session.findById("wnd[0]/tbar[0]/okcd").Text = "ME1M"
  Session.findById("wnd[0]").sendVKey 0
  ' Ensuite
  ' Avec la feuille nommée
  With Sheets("Feuil1")
    ' Dernière ligne remplie de la feuil1
    dLig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Pour chaque ligne
    For Lig = 2 To dLig
      sTmp = .Range("C" & Lig)  ' Récupérer le code article
      Session.findById("wnd[0]/usr/ctxtIF_MATNR-LOW").Text = sTmp
      Session.findById("wnd[0]/tbar[1]/btn[8]").press
      Session.findById("wnd[0]/usr/chk[1,8]").Selected = True
      Session.findById("wnd[0]/tbar[1]/btn[7]").press
      Session.findById("wnd[0]/tbar[1]/btn[8]").press
      Session.findById("wnd[1]/usr/tblSAPLV14ATCTRL_D0102/ctxtVAKE-DATAB[0,0]").caretPosition = 8
      Session.findById("wnd[1]").sendVKey 2
      sTmp = .Range("I" & Lig)  ' Récupérer le prix
      Session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_D0201/txtKONP-KBETR[2,0]").Text = sTmp
      Session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_D0201/txtKONP-KBETR[2,0]").SetFocus
      Session.findById("wnd[0]/usr/tblSAPMV13ATCTRL_D0201/txtKONP-KBETR[2,0]").caretPosition = 16
      Session.findById("wnd[0]/tbar[0]/btn[11]").press
      Session.findById("wnd[0]/tbar[0]/btn[3]").press
    Next Lig
  End With
  ' Effacer la variable objet
  Set Session = Nothing: Set Connection = Nothing: Set App = Nothing: Set SapGui = Nothing
  ' Maximise ce classeur
  ThisWorkbook.Windows.Application.WindowState = xlMaximized
End Sub

A+
 

Discussions similaires

Réponses
7
Affichages
294
Réponses
8
Affichages
270

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87