Manipulation d'Internet Explorer via VB

Les rubriques (actu, forums, tutos) de Développez
Tags
Réseaux sociaux




Le , par Qwazerty, Expert Confirmé Sénior
Salut

Je vous propose un tutoriel sur l’interaction entre Excel VBA et Internet Explorer.

Les sujets développés sont
  • la déclaration des variables
  • la navigation dans le code source d'une page
  • récupérer et saisir des données, agir sur des boutons, des liens, des cases à cocher...
  • le téléchargement de fichiers
  • adapter ses méthodes d'interaction en fonction du contenu de la page
  • un rappel sur l'utilisation des espions et des point d'arrêt


Afin d'y parvenir, vous trouverez dans ce document des exemples concrets mettant en pratique une partie des méthodes fournies par VBA pour manipuler le contenu d'une page Web. Nous développerons par exemple un code visant à obtenir les résultats du loto sportif ou encore la sélection d'un trajet sur le site de la SNCF.

Merci de laisser sur ce topic votre avis sur mon document, toutes les critiques constructives sont les bienvenues .

Si vous avez la flemme de taper, pensez à minima à noter la discussion

Bonne lecture et bon apprentissage

++
Qwaz


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Qwazerty Qwazerty
http://www.developpez.com
Expert Confirmé Sénior
le 20/10/2014 19:39
Salut

Merci pour la précision Marc, je n'ai jamais rencontré ce problème.

bendu31, la déclaration en tant qu'object suffit, VBA va se débrouiller pour les transtypages, tu n'as pas besoin de faire une déclaration de type Set ... = CreateObject(...).

bonne soirée
++
Qwaz
Avatar de Marc-L Marc-L
http://www.developpez.com
Expert Confirmé Sénior
le 20/10/2014 19:55


Autre astuce : quand un Click ne déclenche rien, "activer" l'objet juste avant par .Focus peut suffire …

Avatar de bendu31 bendu31
http://www.developpez.com
Invité régulier
le 21/10/2014 8:17
Citation Envoyé par Qwazerty Voir le message

bendu31, la déclaration en tant qu'object suffit, VBA va se débrouiller pour les transtypages, tu n'as pas besoin de faire une déclaration de type Set ... = CreateObject(...).

Qwaz
Salut,

Je viens de tenter sans déclaration Set.
VBA me renvoi l'erreur "Propriété ou méthode non gérée par l'objet" sur la ligne d'écriture.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
    Dim IE As Object                 
    Set IE = CreateObject("InternetExplorer.application")
 
    Dim IEDoc As Object
    Set IEDoc = CreateObject("htmlfile")
 
    Dim Input_ISIN_Number As Object
 
    IE.navigate "http://www.abcbourse.com/download/historiques.aspx?f=ex"
    IE.Visible = True
 
    waitIE IE
 
 
    'On point la zone de texte IEDoc.all("name", "index si plusieurs noms")
    Set Input_ISIN_Number = IEDoc.GetElementsByName("ctl00$BodyABC$txtOneSico")
 
    'On écrit le texte qu'on veut placer dedans :
    Input_ISIN_Number.Value = "FR0000045072"
L'erreur se produit au niveau de l'exécution de la dernière ligne.

Peut être ai-je loupé une étape ?
Avatar de Marc-L Marc-L
http://www.developpez.com
Expert Confirmé Sénior
le 21/10/2014 9:38


Le B-A-BA : via la fenêtre des Variables locales, vérifier dans le contenu de la variable objet
si elle pointe bien sur quelque chose et si elle dispose de la propriété Value

Avatar de Qwazerty Qwazerty
http://www.developpez.com
Expert Confirmé Sénior
le 21/10/2014 13:09
Salut

Alors 2 problème avec ton code :

Tu ne pointes pas le document
Code :
Set IEDoc = IE.document
Ensuite lorsque tu cherches ton input, tu utilises GetElementsByName, pourquoi pas mais attention y'a un "s" à "Elements", il te retourne donc un tableau d'objet (voir le tuto)

Si cela ne résout pas ton problème, merci de créer un sujet propre à ta question pour ne pas surcharger celui-la qui ne conserne que des problème liés au tutoriel. N'hésite pas à m'envoyer un MP si tu vois que tu n'obtiens pas de réponse.

Bonne fin de journée
++
Qwaz
Avatar de bendu31 bendu31
http://www.developpez.com
Invité régulier
le 21/10/2014 14:23
Merci pour vos réponses,

@Marc-L : Apparemment l'objet Input_ISIN_Number ne pointe sur rien...

@QWAZERTY
Alors j'ai essayé de rajouter le fameux "Set IEDoc = IE.document", ça renvoi une erreur.
Pour le deuxième point, c'est une coquille, j'ai recopié à la main cette portion de code, dans mon éditeur VBA il n'y avait pas le "S".

J'ai créé un nouveau sujet pour ne pas polluer celui ci sur tes conseils :
http://www.developpez.net/forums/d14...g/#post8005015

Merci
Avatar de itwoo itwoo
http://www.developpez.com
Membre habitué
le 09/11/2014 9:02
Bonjour Qwaz,

Encore une fois merci pour ton tuto qui m'a bien servit pour débuter...
En ce moment relecture pour corriger le dernier probléme persistant (sur un autre post)
Mais en revoyant ici ton tuto et aprés l'aide de Pat et Marc et la tienne (ton pointage du gif entre autre) et l'idée du pointage d'un élément précis d'une page web je me demande si pas mal de questions posées ici à propos du chargement des pages/ probléme wait IE... et du décalage entre tout ne viennent pas justement de l'absence d'un pointage correct d'un élément (ce que Marc a souligné dans sa discussion...) pour attendre la fin du chargement de cet élèment avant de pouvoir continuer et qui dans le cas contraire fait que cela prend IE par défaut car dans ce cas les bonnes infos n'ont pas fini de charger par exemple...
bonne journée
Avatar de phtou phtou
http://www.developpez.com
Invité de passage
le 26/01/2015 14:33
Bonjour,
je souhaite suivre le tutoriel "Interaction avec Internet Explorer via VBA Excel" qui m'a l'air particulièrement bien fait.
Mais, je bute sur le déploiement de l'expression espion sur la variable IE au chapitre "III-C-1. Comparaison de contenu".
En effet quand je clique sur l'icone + devant IE dans la fenêtre "Espions", puis sur le + devant l'objet document, je n'ai rien qui s'affiche et donc je ne peux visualiser
l'objet "all"


J'ai essayé les 3 méthodes de déclarations de variables et rien n'y fait.
Merci pour votre aide afin que je puisse m'initier à la manipulation d'IE via le VBA.
Avatar de noftal noftal
http://www.developpez.com
Membre confirmé
le 26/01/2015 16:50
Re-salut,

En fait je t'avais conseillé de poser ta question plutôt ici car, là, il s'agit ici du fil correspondant aux remarques sur le tuto proprement dit. Par expérience tu auras plus de chance d'avoir une réponse là-bas.

Toutefois, essaye déjà de remplacer
Code :
IE.navigate "www.google.fr"
par
Code :
IE.navigate "http://www.google.fr"
Dans ma macro, je n'avais pas déclaré la variable IE ou plutôt j'avais mis sa déclaration en commentaire. Je ne sais plus pourquoi.
Avatar de phtou phtou
http://www.developpez.com
Invité de passage
le 26/01/2015 17:44
Idem, l'objet document reste vide.
Je vais suivre tes conseils et copier coller le message dans l'autre discussion.
Merci
Avatar de Qwazerty Qwazerty
http://www.developpez.com
Expert Confirmé Sénior
le 26/01/2015 19:04
Salut

[Edit]

Il suffisait de lire 2 messages plus haut et la question était posée.
Marc-L faisait même remarqué dans la discussion proposé en lien, que document apparaissait vide en cas de déclaration tardive, VBA ne reconnaissant donc pas le contenu Document puisque qu'il ne comprend pas ce que contient Document.
[/Edit]

Cette remarque a été fait sur une autre discussion, le problème a semble t il était résolu en pointant document dans une variable (comme je le fait systématiquement plus loin dans le tuto).

Code :
1
2
3
4
5
6
Dim IEDoc as HTMLDocument
 
IE.Navigate www.google.fr
waitie ie
 
iedoc = IE.document
Au lieu d'espionner IE.Document, tu espionnes IEDoc.

Dans l'absolu c'est exactement la même chose, sauf que visiblement VBA n'arrive pas à lire ou à interpréter le contenu de ie.document, alors qu'une fois pointé par une variable correctement typé (as HTMLDocument) ça ne lui pose plus de problème.
Je n'ai pas d'explication certaine à ce phénomène, j'espère que cette solution te permettre de continuer.

Bonne fin de journée

++
Qwaz

PS: Ta demande est bien au bon endroit car le problème va sans doute se poser à ceux qui utiliseront mon tuto.
Offres d'emploi IT
Technicien Support h/f
Intérim
Kobaltt - Midi Pyrénées - TOULOUSE
Parue le 09/01/2015
INGENIEUR ETUDE ET DEVELOPPEMENT PHP H/F
CDI
M PLANET - Provence Alpes Côte d'Azur - SOPHIA ANTIPOLIS
Parue le 30/01/2015
Consultant Supply Chain Grade A H/F
CDI
Capgemini - Nord Pas-de-Calais - Lille (59000)
Parue le 25/01/2015

Voir plus d'offres Voir la carte des offres IT
 
 
 
 
Partenaires

PlanetHoster