Boucle VBA macro Excel
Résolu
LeLutin68
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
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
A voir également:
- Sapguiauto.getscriptingengine
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
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
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é):
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.
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
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
https://docs.microsoft.com/fr-fr/dotnet/visual-basic/language-reference/statements/do-loop-statement
for, d'utiliser un
do, et de tester une condition d'arrêt.
https://docs.microsoft.com/fr-fr/dotnet/visual-basic/language-reference/statements/do-loop-statement