OVH Cloud OVH Cloud

VBa + IE + sendkey

4 réponses
Avatar
SylVBA
Bonsoir =E0 vous tous,

La petite Sylvie revient avec une question:

Le contexte:

Excel est ouvert
Internet Explorer est ouvert
Ce que je veux:

Je souhaite activer la page Internet Explorer, et sur la page active
faire un F5 (rafraichir) deux fois de suite avec 3 secondes entre
chaque F5.(j'ai un compteur qui change apr=E8s un F5)

Je n'arrive pas =E0 le faire, l'activation semble OK mais F5 une fois
sur la page IE ne fonctionne pas,

Pouvez vous m'aider

Je souhaite un "for x =3D 1 to 2" ce qui permettra de la faire 3 fois ou
plus si besoin

Merci et au plaisir de vous lire

Bien amicalement =E0 nos plus gentils contributeurs

Sylvie

4 réponses

Avatar
Garette
Bonsoir,

Pour que ça fonctionne avec SenKeys, il faut que les n fois {F5} soient dans
des procédures différentes.
Il faut utiliser onTime.
Voici un exemple qui rafraichit toutes les 3 secondes

Pour le onTime j'ai repris les infos de
http://www.excelabo.net/xl/tempo.php#OnTime. Je n'arrivais plus à retrouver
la procédure pour arreter (c'est important de pouvoir l'arreter).

--------------------
Public RunWhen As Variant 'On a besoin de cette variable pour arreter

Sub Demarrage() 'Execute la macro Montest dans 3 secondes
RunWhen = Now + TimeValue("00:00:03")
Application.OnTime RunWhen, "Montest"
End Sub

Sub Montest() 'Active IE, rafraichit IE et relance la macro Demarrage (pour
recommencer dans 3 secondes)
AppActivate ("Microsoft Internet Explorer")
SendKeys "{F5}", True
Application.Run "Demarrage"
End Sub

Sub ArreteTout() 'Permet d'arreter la "boucle" de 3 secondes
On Error Resume Next
Application.OnTime RunWhen, "Montest", , False
End Sub
Avatar
SylVBA
Bonsoir Garette et merci pour ton code

Ilmarche

Pourquoi dans des procédures différentes ?

Comment faire au bout de 3 ou 4 fois pour fermer IE ?

Désolée de ne pas avoir répondu avant, masi j'étais en week end
(bien mérité) et pas de connexion

Avec mes remerciements

Sylvie


Bonsoir,

Pour que ça fonctionne avec SenKeys, il faut que les n fois {F5} soient dans
des procédures différentes.
Il faut utiliser onTime.
Voici un exemple qui rafraichit toutes les 3 secondes

Pour le onTime j'ai repris les infos de
http://www.excelabo.net/xl/tempo.php#OnTime. Je n'arrivais plus à retro uver
la procédure pour arreter (c'est important de pouvoir l'arreter).

--------------------
Public RunWhen As Variant 'On a besoin de cette variable pour arreter

Sub Demarrage() 'Execute la macro Montest dans 3 secondes
RunWhen = Now + TimeValue("00:00:03")
Application.OnTime RunWhen, "Montest"
End Sub

Sub Montest() 'Active IE, rafraichit IE et relance la macro Demarrage (po ur
recommencer dans 3 secondes)
AppActivate ("Microsoft Internet Explorer")
SendKeys "{F5}", True
Application.Run "Demarrage"
End Sub

Sub ArreteTout() 'Permet d'arreter la "boucle" de 3 secondes
On Error Resume Next
Application.OnTime RunWhen, "Montest", , False
End Sub


Avatar
Garette
Bonjour,

En fait, le déroulement d'une macro est séquentiel, chaque instruction
s'execute l'une apres l'autre.
Les SendKeys eux s'executent tous d'un coup.
Exemples ci-dessous :

Sub test1()
Range("C3").Select
SendKeys "toto {ENTER}"
End Sub

Sub test2()
Range("C3").Select
SendKeys "toto {ENTER}"
Range("B4").Select
SendKeys "titi {ENTER}"
End Sub

Test1 ça fonctionne.
Test2, on a "toto" en B4 et "titi" en B5. Comme si les Range.Select
s'executaient en premier et ensuite les 2 SendKeys.
En séparant les procédures avec un OnTime, on isole le SendKeys.

--------------------------
Pour la fermeture d'IE. Tu as plusieurs IE car plusieurs utilisations de
Shell ?
Voici un bout de code qui ouvre et un qui ferme IE

Public X 'Il faut déclarer X en Public car on en a besoin dans la procedure
de fermeture

Sub LancerIE()
'Ouvre IE et mémorise "l'identificateur (ID) de la tâche exécutée"
MonID = Shell("C:Program FilesInternet Exploreriexplore.exe")
End Sub

Sub FermerIE()
AppActivate MonID 'Active l'application mémorisée et la ferme (ALT+F4)
SendKeys "%+{F4}"
End Sub

Attention, si on lance X fois la procédure LanceIE, on ouvre X sessions d'IE
mais seul le dernier MonID sera mémorisé.
Donc on ne pourra fermer que la derniere session lancée !
Il doit etre possible de mémoriser dans un tableau toutes les sessions
ouvertes.

---------------------------
Il également possible de lancer directement la page souhaitée à chaque fois
plutot que de la rafraichir.
Par Exemple :
Sub OuvreDevises()
X = Shell("C:Program FilesInternet Exploreriexplore.exe
http://fr.finance.yahoo.com/q/bc?s=USDEUR%3dX&t=d&c=")
End Sub

Et on peut refermer cette session par FermeIE()

Garette
Avatar
Oliv'
*SylVBA que je salut a écrit *:
Bonsoir Garette et merci pour ton code

Ilmarche

Pourquoi dans des procédures différentes ?

Comment faire au bout de 3 ou 4 fois pour fermer IE ?


tu pourrais aussi controller IE directement

Set ie = CreateObject("internetexplorer.application")

ici un lien
http://www.rgagnon.com/pbdetails/pb-0202.html


--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Outlook : http://faq.outlook.free.fr/
les archives : http://groups.google.com/group/microsoft.public.fr.outlook
Dernière chance http://www.outlookcode.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~