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 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.
Avatar de Sebphyto Sebphyto
http://www.developpez.com
Candidat au titre de Membre du Club
le 17/02/2015 17:17
Bonjour,

Ne sachant pas si ce sujet pouvait être posté ici, j'ai ouvert une discussion :

C'est ici

En tout cas merci pour ce tuto.....Et merci de ta futur aide

A+
Avatar de Qwazerty Qwazerty
http://www.developpez.com
Expert Confirmé Sénior
le 20/02/2015 7:54
Salut

Merci de prendre en compte pour l'exercice avec la page google le code suivant
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Option Explicit
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
Sub RechercheVBAExcel()
'Inscrire du texte dans une zone de texte ex: zone de recherche google
'*********************************************************************
 
'Déclaration de variables
 
'Dim IE As New InternetExplorer 'en référencant
Dim IE As Object 'en Late Binding
Dim IEDoc As HTMLDocument
Dim InputGoogleZoneTexte As HTMLInputElement
'Dim InputGoogleBouton As HTMLInputElement
Dim SelectGoogleBouton As HTMLSelectElement
 
 
    Set IE = CreateObject("internetexplorer.application") 'en Late Binding
 
    'Chargement d'une page Web
    IE.Navigate "https://www.google.fr/"
 
    'Affichage de la fenêtre IE
    IE.Visible = True
 
    'Attente chargement
    WaitIE IE
 
    'on pointe le membre du document
    Set IEDoc = IE.document
        WaitDoc IEDoc
 
    'on pointe notre zone de texte
    Set InputGoogleZoneTexte = IEDoc.all("gbqfq")
 
    'on définit le texte que l'on veut saisir dans zone de rech
    InputGoogleZoneTexte.Value = "VBA Excel"
    InputGoogleZoneTexte.FireEvent "OnPaste"
    'on pointe le bouton rech
    Set SelectGoogleBouton = IEDoc.getElementById("gbqfba") ' ou Set InputGoogleBouton = IEDoc.all("btnK")
 
    ' on simule un clic
    SelectGoogleBouton.Click
 
    'Attente la fin de chargement
    WaitIE IE
    WaitDoc IEDoc
 
    'libération de la variable
    Set IE = Nothing
    Set IEDoc = Nothing
 
    'Permet de quitter la page web
    'IE.Quit
 
 
End Sub
Sub WaitIE(IE As InternetExplorer)
'Boucle tant que la page n'est pas totalement chargée
'****************************************************
    Do Until IE.readyState = READYSTATE_COMPLETE
        DoEvents
    Loop
 
End Sub
Sub WaitDoc(doc As HTMLDocument)
  Do While Not doc.readyState = "complete"
    DoEvents
  Loop
End Sub
Le fait que la page modifie sont apparence modifie légérement le fonction dnas le sens ou si lors du clique la page ne s'est pas modifier, google ne lance pas la recherche. Pour forcer la modification de la page ici je force l'événement OnPaste.

Bonne journée

++
Qwaz
Avatar de Marc-L Marc-L
http://www.developpez.com
Expert Confirmé Sénior
le 20/02/2015 11:23


Salut Stéphane !

De mon côté en naviguant sur cette page Google avec IE comme avec Firefox,
le résultat est automatiquement affiché sans même cliquer sur un bouton …

Edit : je viens de tester ton code en ajoutant un stop après l'insertion du texte et là effectivement, le "clic" est nécessaire …

Désolé SebPhyto, j'ai eu du mal à te suivre dans ta discussion !
Avatar de Sebphyto Sebphyto
http://www.developpez.com
Candidat au titre de Membre du Club
le 20/02/2015 11:48
Re,
#Marc-L
y-a-pas de quoi, je me suis peut-être mal exprimé également.

Bonne journée
Offres d'emploi IT
Consultant fonctionnel Microsoft CRM Dynamics (H/F)
CDI
OVH SAS - Nord Pas-de-Calais - Roubaix (59100)
Parue le 19/02/2015
Chef de projet java-delphi
CDI
delta assurances - Provence Alpes Côte d'Azur - Marseille (13000)
Parue le 02/02/2015
Ingénieur linux redhat
CDI
WRS - Wilson Recrutement & Services - Ile de France - Arceuil (94110)
Parue le 16/02/2015

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

PlanetHoster