Boucle VBA macro Excel
Résolu/Fermé
LeLutin68
Messages postés
12
Date d'inscription
mercredi 15 avril 2015
Statut
Membre
Dernière intervention
16 février 2022
-
15 févr. 2022 à 17:40
Lelutin68 - 16 févr. 2022 à 19:30
Lelutin68 - 16 févr. 2022 à 19:30
A voir également:
- Sapguiauto.getscriptingengine
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
3 réponses
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
Ambassadeur
1 568
15 févr. 2022 à 19:59
15 févr. 2022 à 19:59
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
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
Modifié le 15 févr. 2022 à 20:33
Modifié le 15 févr. 2022 à 20:33
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.
LeLutin68
Messages postés
12
Date d'inscription
mercredi 15 avril 2015
Statut
Membre
Dernière intervention
16 février 2022
>
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
16 févr. 2022 à 08:02
16 févr. 2022 à 08:02
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
LeLutin68
Messages postés
12
Date d'inscription
mercredi 15 avril 2015
Statut
Membre
Dernière intervention
16 février 2022
>
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
16 févr. 2022 à 08:15
16 févr. 2022 à 08:15
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
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
LeLutin68
Messages postés
12
Date d'inscription
mercredi 15 avril 2015
Statut
Membre
Dernière intervention
16 février 2022
>
LeLutin68
Messages postés
12
Date d'inscription
mercredi 15 avril 2015
Statut
Membre
Dernière intervention
16 février 2022
16 févr. 2022 à 11:15
16 févr. 2022 à 11:15
Trouvé :)
Solution :
for nlig = 2 to Columns("A:A").Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Solution :
for nlig = 2 to Columns("A:A").Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
>
LeLutin68
Messages postés
12
Date d'inscription
mercredi 15 avril 2015
Statut
Membre
Dernière intervention
16 février 2022
16 févr. 2022 à 15:51
16 févr. 2022 à 15:51
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