Boucle VBA macro Excel
Résolu
LeLutin68
Messages postés
12
Statut
Membre
-
Lelutin68 -
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
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
-
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. -
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-
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.- 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 - Il est aussi possible, au lieu d'un
for
, d'utiliser undo
, et de tester une condition d'arrêt.
https://docs.microsoft.com/fr-fr/dotnet/visual-basic/language-reference/statements/do-loop-statement
-
-