Microsoft 365 Modification prix SAP

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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:
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
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
212
Réponses
5
Affichages
155
Réponses
1
Affichages
125
Retour