Sortir d'une boucle appellee dans une fonction

Postez ici si vous avez des difficultés a comprendre une commande, ou a créer une macro.
Répondre
Afw_force97
Messages : 4
Enregistré le : 01 mai 2018, 16:41

Sortir d'une boucle appellee dans une fonction

Message par Afw_force97 » 01 mai 2018, 18:30

Bonjour, je ne sais pas si ce titre était assez explicite, mais voici mon problème :

Je n'arrive pas a sortir d'une boucle que j'ai crée avec mon programme

La logique serait :

Étape 1 : mise en place du bureau pour l’exécution du programme

Étape 2 : Boucle pour la création du profil 1

Étape 3 : Mise en place des actions que je veux reproduire dans chaque boucle, je sors ensuite de la page et je me remet sur l'écran d’accueil

Étape 4 : Je crée une boucle profil2, je me positionne correctement et je lance la boucle action

Étape 5 : idem boucle profil 3

Étape 6 : idem boucle profil 4, 5, 6, 7, 8, 9.

Étape 7 : Je décale le curseur pour scroller vers le bas, et je relance les opérations précédentes.

les données que mon programme va récupérer il les colle dans un fichier excel.

Mon problème avec mon code est que je reste bloquer dans la boucle du profil 2, n'arrivant pas a la boucle du profil 3 car je ne comprend pas bien comment définir la fin de la boucle action ainsi que celle de profil1.

Voici mon code :

Code : Tout sélectionner

LangEditor=Pascal.OtherLangEditor

Ms(281,707,Direct,ImgRef27);
clk(Left click);
break(00:00:01);
Ms(124,205,Direct,ImgRef28);
clk(Left click);
Ms(525,697,Direct,ImgRef0);
//Positionne curseur excel
//ATTENTION firefox 100 ouvert
clk(Left click);
break(00:00:02);
//Se positionne sur firefox
label(Debut_profil1);
Ms(422,211,Direct,ImgRef2);
clk(Right click);
break(00:00:01);
Ms(473,219,Direct,ImgRef29);
clk(Left click);
Ms(305,41,Direct,ImgRef4);
break(00:00:01);
clk(Left click);
//Ouvre le profil1 en new tab et clic dessus
label(Debut_DATA);
//Debut de la boucle recuperation de donnee DATA
Ms(505,84,Direct,ImgRef5);
break(00:00:02);
clk(Left Down);
Ms(715,79,Direct,);
clk(Left Up);
break(00:00:01);
KbSpl(Ctrl,C);
Ms(272,703,Direct,ImgRef6);
clk(Left click);
//Copie les donnees
break(00:00:01);
Ms(105,207,Direct,ImgRef7);
KbSpl(Ctrl,V);
break(00:00:01);
//Le colle dans excel
Ms(527,699,Direct,ImgRef8);
clk(Left click);
break(00:00:01);
Ms(476,307,Direct,ImgRef9);
clk(Left Down);
Ms(512,305,Direct,ImgRef10);
clk(Left Up);
break(00:00:01);
//Selectionne puis copie 
KbSpl(Ctrl,C);
Ms(275,708,Direct,ImgRef11);
clk(Left click);
break(00:00:01);
KbSpl(Right);
break(00:00:01);
KbSpl(Ctrl,V);
//Les colle dans excel
break(00:00:01);
Ms(526,704,Direct,ImgRef12);
clk(Left click);
break(00:00:01);
Ms(612,307,Direct,ImgRef13);
clk(Left Down);
Ms(674,305,Direct,ImgRef14);
clk(Left Up);
break(00:00:01);
KbSpl(Ctrl,C);
//Selectionne puis copie 
Ms(270,702,Direct,ImgRef15);
clk(Left click);
break(00:00:01);
KbSpl(Right);
KbSpl(Ctrl,V);
break(00:00:01);
//Les colle dans excel
Ms(533,694,Direct,ImgRef16);
clk(Left click);
break(00:00:01);
Ms(765,307,Direct,ImgRef17);
clk(Left Down);
Ms(799,312,Direct,ImgRef17);
clk(Left Up);
break(00:00:01);
KbSpl(Ctrl,C);
Ms(277,711,Direct,ImgRef19);
clk(Left click);
break(00:00:01);
KbSpl(Right);
KbSpl(Ctrl,V);
break(00:00:01);
KbSpl(Down);
KbSpl(Left);
KbSpl(Left);
KbSpl(Left);
break(00:00:01);
Ms(534,704,Direct,ImgRef20);
clk(Left click);
break(00:00:01);
Ms(433,43,Direct,ImgRef21);
clk(Left click);
break(00:00:01);
//Fin boucle recuperation donnee DATA
label(Fin_Profil1);
label(Debut_Profil2);
Ms(108,42,Direct,ImgRef22);
clk(Left click);
//Se positionne sur Profil 2
break(00:00:01);
Ms(401,262,Direct,ImgRef23);
clk(Right click);
Ms(466,274,Direct,ImgRef25);
clk(Left click);
Ms(459,275,Direct,ImgRef24);
break(00:00:01);
Ms(310,37,Direct,ImgRef26);
clk(Left click);
//Va sur l'onglet firefox profil_2
break(00:00:03);
goto(Debut_DATA);
goto(Debut_profil3);
label(Fin_Profil2);
Ms(98,40,Direct);
break(00:00:10);
label(Debut_profil3);
Ms(409,313,Direct,ImgRef0);
break(00:00:01);
clk(Right click);
Ms(472,322,Direct,ImgRef1);
clk(Left click);
Merci beaucoup si quelqu'un arrive a m'aider et a bientot :)

Avatar du membre
Onissius
Messages : 744
Enregistré le : 11 avr. 2014, 22:47
Localisation : Lyon (France)
Contact :

Re: Sortir d'une boucle appellee dans une fonction

Message par Onissius » 01 mai 2018, 22:01

Fait juste un copier coller, là tu exporte au format pascal.
J'ai découvert SM en 99, rapidement Adam m'a promu admin.
Posez vos questions aussi clairement que possible, sans fautes qui piquent les yeux et relisez vous.
Vérifiez sur mon DISCORD si je suis en ligne.

Afw_force97
Messages : 4
Enregistré le : 01 mai 2018, 16:41

Re: Sortir d'une boucle appellee dans une fonction

Message par Afw_force97 » 01 mai 2018, 23:12

Oups ! Voila le copier coller très anarchique de ma macro :

Code : Tout sélectionner

Move Mouse	281;707;Direct;ImgRef27;
Pause	00:00:01
Move Mouse	124;205;Direct;ImgRef28;
Click	Left click;
Move Mouse	525;697;Direct;ImgRef0;
Commentaire	Positionne curseur excel
Commentaire	ATTENTION firefox 100 et abonnes ouvert
Click	Left click;
Pause	00:00:02
Commentaire	Se positionne sur firefox
Label	Debut_profil1
Move Mouse	422;211;Direct;ImgRef2;
Click	Right click;
Pause	00:00:01
Move Mouse	473;219;Direct;ImgRef29;
Click	Left click;
Move Mouse	305;41;Direct;ImgRef4;
Pause	00:00:01
Click	Left click;
Commentaire	Ouvre le profil1 en new tab et clic dessus
Label	Debut_DATA
Commentaire	Debut de la boucle recuperation de donne sur chaque profil 
Commentaire	DATA
Pause	00:00:02
Move Mouse	505;84;Direct;ImgRef5;
Click	Left Down;
Move Mouse	715;79;Direct;;
Click	Left Up;
Pause	00:00:01
Type Special	Ctrl;C;
Commentaire	Copie le pseudo insta
Move Mouse	272;703;Direct;ImgRef6;
Click	Left click;
Pause	00:00:01
Move Mouse	105;207;Direct;ImgRef7;
Type Special	Ctrl;V;
Pause	00:00:01
Commentaire	Le colle dans excel
Move Mouse	527;699;Direct;ImgRef8;
Click	Left click;
Pause	00:00:01
Move Mouse	476;307;Direct;ImgRef9;
Click	Left Down;
Move Mouse	512;305;Direct;ImgRef10;
Click	Left Up;
Pause	00:00:01
Commentaire	Selectionne puis copie les publi

Type Special	Ctrl;C;
Move Mouse	275;708;Direct;ImgRef11;
Click	Left click;
Pause	00:00:01
Type Special	Right;
Pause	00:00:01
Type Special	Ctrl;V;
Commentaire	Les colle dans excel
Pause	00:00:01
Move Mouse	526;704;Direct;ImgRef12;
Click	Left click;
Pause	00:00:01
Move Mouse	612;307;Direct;ImgRef13;
Click	Left Down;
Move Mouse	674;305;Direct;ImgRef14;
Click	Left Up;
Pause	00:00:01
Type Special	Ctrl;C;
Commentaire	Selectionne puis copie les abonnes
Move Mouse	270;702;Direct;ImgRef15;
Click	Left click;
Pause	00:00:01
Type Special	Right;
Type Special	Ctrl;V;
Pause	00:00:01
Commentaire	Les colle dans excel
Move Mouse	533;694;Direct;ImgRef16;
Click	Left click;
Pause	00:00:01
Move Mouse	765;307;Direct;ImgRef17;
Click	Left Down;
Move Mouse	799;312;Direct;ImgRef17;
Click	Left Up;
Pause	00:00:01
Type Special	Ctrl;C;
Commentaire	copie les abonnements
Move Mouse	277;711;Direct;ImgRef19;
Click	Left click;
Pause	00:00:01
Type Special	Right;
Type Special	Ctrl;V;
Commentaire	les colle dans excel
Pause	00:00:01
Type Special	Down;
Type Special	Left;
Type Special	Left;
Type Special	Left;
Pause	00:00:01
Commentaire	Prepare le curseur excel car nouvelle ligne
Move Mouse	534;704;Direct;ImgRef20;
Click	Left click;
Pause	00:00:01
Move Mouse	433;43;Direct;ImgRef21;
Click	Left click;
Commentaire	Va sur firefox et ferme l'onglet creer
Pause	00:00:01
Label	Fin_DATA
Commentaire	Fin boucle recuperation donnee DATA
Label	Fin_Profil1
Label	Debut_Profil2
Move Mouse	108;42;Direct;ImgRef22;
Click	Left click;
Commentaire	Se positionne sur Profil 2
Pause	00:00:01
Move Mouse	401;262;Direct;ImgRef23;
Pause	00:00:05
Click	Right click;
Move Mouse	466;274;Direct;ImgRef25;
Click	Left click;
Move Mouse	459;275;Direct;ImgRef24;
Pause	00:00:01
Move Mouse	310;37;Direct;ImgRef26;
Click	Left click;
Commentaire	Va sur l'onglet firefox profil_2
Pause	00:00:06
Goto	Debut_DATA
Goto	Fin_DATA
Goto	Debut_profil3
Label	Fin_Profil2
Move Mouse	98;40;Direct;ImgRef30;
Pause	00:00:05
Label	Debut_profil3
Click	Left click;
Commentaire	Se positionne sur Profil 3
Pause	00:00:01
Move Mouse	401;262;Direct;ImgRef23;
Pause	00:00:05
Click	Right click;
Move Mouse	466;274;Direct;ImgRef25;
Click	Left click;
Move Mouse	459;275;Direct;ImgRef24;
Pause	00:00:01
Move Mouse	310;37;Direct;ImgRef26;
Click	Left click;
Commentaire	Va sur l'onglet firefox profil_3
Pause	00:00:06
Goto	Debut_DATA
Goto	Fin_DATA
Goto	Debut_profil4
Label_FinProfil3
Label_DebutProfil4
Désolé ça doit être bien le bordel ! J'ai pas encore de bonnes habitudes de programmation ^^
Comme je disais, mon programme tourne en boucle sur le profil 2 et ne passe pas au profil 3..

Avatar du membre
Onissius
Messages : 744
Enregistré le : 11 avr. 2014, 22:47
Localisation : Lyon (France)
Contact :

Re: Sortir d'une boucle appellee dans une fonction

Message par Onissius » 01 mai 2018, 23:51

En vrac :
  • Tu utilise beaucoup ta souris pour lancer les programmes, tu n'aime pas la commande "Exécute => Programme" ?

    Code : Tout sélectionner

    Type Special	WINDOWS GAUCHE;
    Type	Excel
    Timer	500;
    Type Special	ENTREE;
  • Tu sais qu'il existe un plugin pour Excel, permettant d'obtenir et de modifier une valeur et/ou formule d'une cellule d'un tableau ?
    Le clique droite peut êtres simulé avec la touche clavier (Type Special APPLICATION;)
  • Utilise un peu plus les raccourcis claviers.
  • Il est possible d'utiliser une variable pour faire varier toutes tes pauses ou timer (plugin) en même temps.
  • Ligne 123-125, seul le Goto Debut_DATA est exécuté. Pour sortir d'une boucle, on utilise le "if...then...else" de SM (commande "Examine").
...
J'ai découvert SM en 99, rapidement Adam m'a promu admin.
Posez vos questions aussi clairement que possible, sans fautes qui piquent les yeux et relisez vous.
Vérifiez sur mon DISCORD si je suis en ligne.

Afw_force97
Messages : 4
Enregistré le : 01 mai 2018, 16:41

Re: Sortir d'une boucle appellee dans une fonction

Message par Afw_force97 » 02 mai 2018, 16:30

Merci pour tes suggestions, mais je pense que je m'exprime mal pour demander ton aide :

Tous les move mouse sont justifié car je vais prendre une donnée qui est visible sur le navigateur mais n'apparait pas sur le code source de la page. je simule donc un copier coller manuel, pour récupérer l'info et la coller dans un tableur Excel.

Excel j'utilise effectivement les touches du clavier, si tu regardes bien je sélectionne la première ligne avant de lancer les boucles, puis je lance ma boucle de copier coller que je termine, selon la colonne de l'information, par un type_special right et avant de passer a une autre ligne je fais un type_special de bas une fois et 3 fois gauche.

Je n'ai pas l'impression qu'il est possible de faire autrement avec supermacro, et n'ayant pas de connaissances en code, j'ai voulu bidouiller un programme sur supermacro qui fonctionne dans sa fonction principale : la récupération de data

Cependant, le problème qui me tracasse est que mon bot reste bloqué à un endroit

Voici ma façon de voir mon programme en algorithme

- mise en place programme (se produit 1 fois)

Boucle récupération profil (9 profil avant scroll vers le bas pour trouver de nouveaux profil, avec le nombre de profil a donner en début de programme)

- Se positionne sur profil_1 (=boucle profil_1 a répéter x fois)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''- algorithme de l'action copier coller sur Excel + repositionnement page d 'accueil = boucle de l'action
- se positionne sur profil_2 (=boucle profil_2 a répéter x fois)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''- Goto boucle _action
- Se positionne sur profil_3 (=boucle profil_3 a répéter x fois)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''- Goto boucle_action
- se positionne sur profil_4, 5, 6, 7, 8, 9 (=boucle profil_4, 5, 6... jusqu’à 9 à répéter x fois)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''- Goto boucle _action

- scroll vers le bas pour revenir sur 9 nouveaux profils

'''''''''''''''''''''''''''''''''''''''''''''''''''''''- go to boucle_recuperation_profil (2/x)

- scroll vers le bas pour revenir sur 9 nouveaux profils

'''''''''''''''''''''''''''''''''''''''''''''''''''''''- go to boucle_recuperation_profil (3/x)

Etc etc etc



et ce indéfiniment jusqu’à ce que le robot ai scanné N nombre de profil

J'arrive bien à faire l'algorithme mais j'ai un peu de mal à réaliser ça sur super macro, mon algorithme tourne sur les 2 premiers profil et puis après répète la récupération de data sur le 2eme profil indefiniement

Je pense que je positionne mal les labels ou que je n'utilise pas la bonne fonction pour faire une "boucle" (peut être je n'utilise pas les bons termes aussi ? ahah) a travers une autre boucle ( ici, la boucle "action_copiercoller" à l’intérieur de "boucle_profil_1" a l’intérieur de la macro).

Mon problème est il plus clair ?

Merci beaucoup pour le temps accordé pour me répondre, je suis novice et j'ai l'impression d'avoir bidouille sur de mauvaises bases !

Avatar du membre
Onissius
Messages : 744
Enregistré le : 11 avr. 2014, 22:47
Localisation : Lyon (France)
Contact :

Re: Sortir d'une boucle appellee dans une fonction

Message par Onissius » 03 mai 2018, 17:20

Bizarre il me semblais avoir poster une réponse.... j'ai du oublier de valider à la fin.

Le nombre de profil est fixe ? Dans ce cas, récupère tout les profils et stock tout dans des variables.
C'est difficile d'imaginer l'ensemble sans voir vraiment comment ça se passe.
Tes profils sont dans l'active directory ?
J'ai découvert SM en 99, rapidement Adam m'a promu admin.
Posez vos questions aussi clairement que possible, sans fautes qui piquent les yeux et relisez vous.
Vérifiez sur mon DISCORD si je suis en ligne.

Afw_force97
Messages : 4
Enregistré le : 01 mai 2018, 16:41

Re: Sortir d'une boucle appellee dans une fonction

Message par Afw_force97 » 03 mai 2018, 19:29

Je viens de trouver une solution plus simple mais j'ai encore besoin d’améliorer le tout ^^

En gros, au lieu de faire une boucle de 9 profil (le nombre de profil affichés par fenêtre), je fais une boucle pour chaque profil qui redescend a la fin de chaque boucle.

Voici la macro quasiment finie ( et qui marche !)

Voici le copier coller

Code : Tout sélectionner

Move Mouse	281;707;Direct;ImgRef27;
Click	Left click;
Pause	00:00:01
Move Mouse	124;205;Direct;ImgRef28;
Click	Left click;
Move Mouse	525;697;Direct;ImgRef0;
Commentaire	Positionne curseur excel
Commentaire	ATTENTION firefox 100 et abonnes ouvert
Click	Left click;
Pause	00:00:02
Commentaire	Se positionne sur firefox
Label	Debut_profil1
Move Mouse	422;211;Direct;ImgRef2;
Click	Right click;
Pause	00:00:01
Move Mouse	473;219;Direct;ImgRef29;
Click	Left click;
Move Mouse	305;41;Direct;ImgRef4;
Pause	00:00:01
Click	Left click;
Commentaire	Ouvre le profil1 en new tab et clic dessus
Label	Debut_DATA
Commentaire	Debut de la boucle recuperation de donne sur chaque profil 
Commentaire	DATA
Pause	00:00:02
Move Mouse	505;84;Direct;ImgRef5;
Click	Left Down;
Move Mouse	715;79;Direct;;
Click	Left Up;
Pause	00:00:01
Type Special	Ctrl;C;
Commentaire	Copie le pseudo insta
Move Mouse	272;703;Direct;ImgRef6;
Click	Left click;
Pause	00:00:01
Move Mouse	105;207;Direct;ImgRef7;
Type Special	Ctrl;V;
Pause	00:00:01
Commentaire	Le colle dans excel
Move Mouse	527;699;Direct;ImgRef8;
Click	Left click;
Pause	00:00:01
Move Mouse	476;307;Direct;ImgRef9;
Click	Left Down;
Move Mouse	589;305;Direct;ImgRef10;
Click	Left Up;
Pause	00:00:01
Commentaire	Selectionne puis copie les publi

Type Special	Ctrl;C;
Move Mouse	275;708;Direct;ImgRef11;
Click	Left click;
Pause	00:00:01
Type Special	Right;
Pause	00:00:01
Type Special	Ctrl;V;
Commentaire	Les colle dans excel
Pause	00:00:01
Move Mouse	521;699;Direct;ImgRef12;
Click	Left click;
Pause	00:00:01
Move Mouse	619;305;Direct;ImgRef13;
Click	Left Down;
Move Mouse	740;306;Direct;ImgRef14;
Click	Left Up;
Pause	00:00:01
Type Special	Ctrl;C;
Commentaire	Selectionne puis copie les abonnes
Move Mouse	270;702;Direct;ImgRef15;
Click	Left click;
Pause	00:00:01
Type Special	Right;
Type Special	Ctrl;V;
Pause	00:00:01
Commentaire	Les colle dans excel
Move Mouse	533;694;Direct;ImgRef16;
Click	Left click;
Pause	00:00:01
Move Mouse	751;307;Direct;ImgRef17;
Timer	500;
Click	Left Down;
Move Mouse	883;307;Direct;ImgRef17;
Timer	500;
Click	Left Up;
Pause	00:00:01
Type Special	Ctrl;C;
Commentaire	copie les abonnements
Move Mouse	277;711;Direct;ImgRef19;
Click	Left click;
Pause	00:00:01
Type Special	Right;
Type Special	Ctrl;V;
Commentaire	les colle dans excel
Pause	00:00:01
Type Special	Down;
Type Special	Left;
Type Special	Left;
Type Special	Left;
Pause	00:00:01
Commentaire	Prepare le curseur excel car nouvelle ligne
Move Mouse	534;704;Direct;ImgRef20;
Click	Left click;
Pause	00:00:01
Move Mouse	433;43;Direct;ImgRef21;
Timer	500;
Click	Left click;
Commentaire	Va sur firefox et ferme l'onglet creer
Pause	00:00:01
Move Mouse	601;214;Direct;ImgRef0;
Click	Middle click;
Move Mouse	601;234;Direct;ImgRef1;
Timer	840;
Click	Middle click;
Commentaire	scroll vers le bas de 1 profil
Label	Fin_DATA
Commentaire	Fin boucle recuperation donnee DATA
Pause	00:00:02
Goto	Debut_profil1
Mon dernier soucis est qu'au bout de 6 boucles, il y a un écart qui se créer que j'ai du mal à résoudre (même en testant tous les timer possible), 840 ne descend pas assez et 841 descend trop

J'aimerai donc créer un système qui me permette qu'au bout de 6 exécution de la boucle DATA, je puisse scroller un tout petit peu vers le bas pour que les valeurs soient a nouveau correcte. Est-ce possible a travers une boucle ?

Merci pour tes réponses, il est vrai que la première version de ma macro était beaucoup trop complique et que celle ci est plus simple.

Avatar du membre
Onissius
Messages : 744
Enregistré le : 11 avr. 2014, 22:47
Localisation : Lyon (France)
Contact :

Re: Sortir d'une boucle appellee dans une fonction

Message par Onissius » 04 mai 2018, 00:29

Ligne 111 Timer 840; la pause sert à quoi ?
Si tu utilise 2 pauses, ça passerait mieux en 2 x 420 par exemple.
A tout hazard, Il existe une solution de contournement ?
J'ai découvert SM en 99, rapidement Adam m'a promu admin.
Posez vos questions aussi clairement que possible, sans fautes qui piquent les yeux et relisez vous.
Vérifiez sur mon DISCORD si je suis en ligne.

Avatar du membre
Feitan
Site Admin
Messages : 301
Enregistré le : 11 avr. 2014, 15:15

Re: Sortir d'une boucle appellee dans une fonction

Message par Feitan » 11 mai 2018, 22:15

Ton Scroll à partir du Middle Click me semble beaucoup trop aléatoire. Essaye avec le plugin Timer pour voir si il est plus précis : http://adam.denadai.free.fr/Plugins/cli ... /Timer.zip

Sinon tu devrais plutôt utiliser la flèche bas ou un raccourci clavier pour atteindre directement le bas de page

Répondre