Boucle VBA macro Excel

Résolu
LeLutin68 Messages postés 12 Statut Membre -  
 Lelutin68 -
Bonjour :)

Je vous contacte car je suis novice en Macro et je souhaiterai un coup de main pour finaliser un code.

L'objectif est de copier pour chaque lignes des données présentes dans un onglet (dans 4 colonnes) puis de les coller (en l'occurence sur SAP... ) pour une référence (Material number) puis passer à la suivante ...

Material number Plant Planned price 3 date
3104486 1100 0,01 01.01.2022
3104487 1100 0,01 01.01.2022
....

Code qui fonctionne pour la première ligne et que je souhaiterai répéter jusqu'à la fin (Material number)

Sub ma8cro()

Set SapGuiAuto = GetObject("SAPGUI")
Set objGui = SapGuiAuto.GetScriptingEngine
Set objConn = objGui.Children(0)
Set session = objConn.Children(0)

session.FindById("wnd[0]").Maximize
session.FindById("wnd[0]/tbar[0]/okcd").Text = "/NMM02"
session.FindById("wnd[0]").SendVKey 0

session.FindById("wnd[0]/usr/ctxtRMMG1-MATNR").Text = Range("A2")
session.FindById("wnd[0]/usr/ctxtRMMG1-MATNR").CaretPosition = 7
session.FindById("wnd[0]").SendVKey 0

session.FindById("wnd[1]/usr/ctxtRMMG1-WERKS").Text = Range("B2")
session.FindById("wnd[1]/usr/ctxtRMMG1-WERKS").CaretPosition = 4
session.FindById("wnd[1]").SendVKey 0

session.FindById("xxx").Text = Range("C2")
session.FindById("xxx").Text = Range("D2")

session.FindById("xxx").SetFocus
session.FindById("xxx").CaretPosition = 10
session.FindById("wnd[0]").SendVKey 0
session.FindById("wnd[1]/usr/btnSPOP-OPTION1").Press

End Sub

Merci infiniment pour votre aide :)

Alex le lutin

Configuration: Windows / Chrome 98.0.4758.82

3 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    il serait préférable que tu utilises les balises de code auqnd tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
    je crois deviner que tu veux exécuter plusieurs fois un groupe d'instructions (quel groupe?) en faisant varier le numéro de la ligne (deux pour le moment).
    est-ce correct?
    quand la boucle devrait-elle s'arreter?
    le xxx me semble un peu mystérieux.
    0
  2. Lelutin68
     
    Bonjour

    Merci pour la réponse,

    J'aimerai répéter ce code pour les lignes suivantes, en l'occurrence remplacer les valeurs A2, B2, C2, D2 par les valeurs des lignes suivantes, A3, B3, C3, D3.. Ainsi de suite, je ne sais pas si je suis clair.. J'ai en fait 3000 lignes pour lesquels j'aimerai exécuter ce code.

    J'ai remplacé un long texte et remplacé par xxxx dans le code, mais cela reste échangé.

    Les variables sont les cellules des colonnes A à D :)

    Je suis vraiment novice :(

    Merci

    Alex
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Si c'est un nombre précis de lignes, cela peut de faire ainsi (non testé):
      dim nlig as long
      for nlig = 2 to 3001
          ' insérer ici tout le code à répéter
          ' au lieu de Range("B2"), mettre Cells(nlig,"B")
      next nlig

      Souvent, au lieu d'un nombre de lignes connu à l'avance, on souhaite s'arreter en fonction de ce que contient la dernière ligne. Cela peut se programmer aussi.
      0
      1. LeLutin68 Messages postés 12 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Bonjour :)
        Ca fonctionne ! merci beaucoup pour l'aide :)

        Ci dessous le code fonctionnel :


        Sub macro()



        Set SapGuiAuto = GetObject("SAPGUI")
        Set objGui = SapGuiAuto.GetScriptingEngine
        Set objConn = objGui.Children(0)
        Set session = objConn.Children(0)


        'Insert your SAP Script here


        session.FindById("wnd[0]").Maximize
        session.FindById("wnd[0]/tbar[0]/okcd").Text = "/NMM02"
        session.FindById("wnd[0]").SendVKey 0

        Dim nlig As Long
        For nlig = 2 To 3

        session.FindById("wnd[0]/usr/ctxtRMMG1-MATNR").Text = Cells(nlig, "A")
        session.FindById("wnd[0]/usr/ctxtRMMG1-MATNR").CaretPosition = 7
        session.FindById("wnd[0]").SendVKey 0

        session.FindById("wnd[1]/usr/ctxtRMMG1-WERKS").Text = Cells(nlig, "B")
        session.FindById("wnd[1]/usr/ctxtRMMG1-WERKS").CaretPosition = 4
        session.FindById("wnd[1]").SendVKey 0

        session.FindById("wnd[0]/usr/tabsTABSPR1/tabpSP27/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2952/txtMBEW-ZPLP3").Text = Cells(nlig, "C")
        session.FindById("wnd[0]/usr/tabsTABSPR1/tabpSP27/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2952/ctxtMBEW-ZPLD3").Text = Cells(nlig, "D")
        session.FindById("wnd[0]/usr/tabsTABSPR1/tabpSP27/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2952/ctxtMBEW-ZPLD3").SetFocus
        session.FindById("wnd[0]/usr/tabsTABSPR1/tabpSP27/ssubTABFRA1:SAPLMGMM:2000/subSUB3:SAPLMGD1:2952/ctxtMBEW-ZPLD3").CaretPosition = 10
        session.FindById("wnd[0]").SendVKey 0
        session.FindById("wnd[1]/usr/btnSPOP-OPTION1").Press

        Next nlig


        End Sub
        0
      2. LeLutin68 Messages postés 12 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        ReBonjour yg_be

        J'en profite si je peux me permettre; pour perfectionner la Macro ;
        "for nlig = 2 to 3001"

        Comment faire pour pouvoir remplacer "3001" par la dernière ligne avec des cellules non vides ? :)

        Pourrais tu m'aider ?

        Merci beaucoup

        Alex le lutin
        0
      3. LeLutin68 Messages postés 12 Statut Membre > LeLutin68 Messages postés 12 Statut Membre
         
        Trouvé :)

        Solution :

        for nlig = 2 to Columns("A:A").Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
        0