Manipulation d'Internet Explorer via VB

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




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 - Expert Confirmé Sénior http://www.developpez.com
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 - Expert Confirmé Sénior http://www.developpez.com
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 - Futur Membre du Club http://www.developpez.com
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
Avatar de Richelsdorfite Richelsdorfite - Invité de passage http://www.developpez.com
le 03/03/2015 à 9:40
Bonjour,

Afin de ne pas polluer le fil avec des questions annexes, j'ai ouvert une demande d'aide pour un problème particulier décrit ici

Pourriez-vous y jeter un œil ?

D'avance merci !

Michel
Avatar de michel3131 michel3131 - Invité régulier http://www.developpez.com
le 13/03/2015 à 9:59
Bonjour,

Je démarre juste et j'ai lu le tuto de qwazerty sur IE et vba excel. Merci énormément pour ce travail...

Mon problème : pour me familiariser, j'ai rentré le code du tuto tel quel (qui permet d'ouvrir google et rentrer une recherche dans la case en question). Cela fonctionne. En revanche, je n'arrive pas à obtenir de liste quand je met un espionage. J'ai fait comme dans le tuto (espion juste avant la libération des variables), mais l'objet all dans IE.document n'apparaît pas. Il y a bien une arborescence, mais avec peu de champs.

Quelqu'un a-t-il eu ce genre de problème ? Est-ce qu'il y a une option particulière à déclarer dans Internet explorer pour faire apparaître toute l'arbrescence ? Je comprends que cela est nécessaire pour connaître les types à déclarer pas la suite, sur d'autre pages etc...

Merci d'avance.
Avatar de Qwazerty Qwazerty - Expert Confirmé Sénior http://www.developpez.com
le 13/03/2015 à 12:51
Salut

Remonte un petit peu la discussion jusqu'au message n°97, il y a la solution à ton problème.

Bonne journée

+
Qwaz
Avatar de michel3131 michel3131 - Invité régulier http://www.developpez.com
le 13/03/2015 à 23:27
Merci beaucoup pour ta réponse, cela fonctionne ... et je peux continuer mes essais.

Bonne soirée.
Avatar de michel3131 michel3131 - Invité régulier http://www.developpez.com
le 14/03/2015 à 17:23
Bonjour,

Je continue mes essais : j'ai écrit un code qui récupère des données sur un site web, on remplit un formulaire et on récupère un fichier Excel. Après avoir simulé le clic dans la macro vba, et avant que le fichier Excel distant ne s'ouvre, j'ai une fenêtre Windows qui me demande si je veux ouvrir, enregistrer, ou annuler.

Sauriez-vous svp comment gérer ce type de fenêtre dans la macro vba, Est-ce possible ou connaît-on des contournements ?

merci d'avance
Avatar de Qwazerty Qwazerty - Expert Confirmé Sénior http://www.developpez.com
le 14/03/2015 à 17:48
Salut

Fais quelques recherches sur le forum, plusieurs personnes ont déjà demandé cela, il y a des solution avec des Sendkey, des solution si le fichier à une adresse précise qui peut être appelée sans actionner le bouton.
Il me semble que Marc-L a mis une contribution en ligne pour pallier au problème à l'aide de sendkey je crois.

++
Qwaz
Avatar de patricktoulon patricktoulon - Expert Confirmé Sénior http://www.developpez.com
le 14/03/2015 à 19:23
Bonjour
une approche dont je me sert a adapter a ton cas
les ligne rouge sont a adapter
une méthode parmi d'autre
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
Sub test_recupfichierexcel()
   
    Dim IE As Object
         Set IE = CreateObject("internetexplorer.application")  'instancie l'Object
    URL = "https://www.bla bla bla"
    IE.navigate URL
    IE.Visible = True
    Do: DoEvents: Loop Until IE.readyState = 4 And IE.busy 
  
 ' peut être qu'ici il va te falloir manipuler un bouton pour déclencher la fenêtre de téléchargement voir le tuto de qwazerty sur ce sujet    
    
Application.Wait (Now + TimeValue("0:00:05"))
    SendKeys "{Tab}"
    SendKeys "{Tab}"
    SendKeys "{Enter}"
   
   waitfichier "chemin complet du fichier" '(en général c'est le chemin des téléchargement sur W7)
   
    IE.Quit
  
     Application.DisplayAlerts = False
    Application.ScreenUpdating = False
  
set wbk2 = Workbooks.Open("chemin complet du fichier")    '
    
    
End Sub
Sub waitfichier(fichier)
    Do: DoEvents: Loop Until Dir(fichier, vbHidden) <> ""
End Sub
Avatar de michel3131 michel3131 - Invité régulier http://www.developpez.com
le 14/03/2015 à 22:15
Génial

merci énormément à tous les deux Patrick et Qwaz !
Offres d'emploi IT
Ingénieur en développement mobile ios & web
CDI
Touch And Play - Ile de France - Paris (75000)
Développeur d'application j2ee
CDI
CTS - Ile de France - Paris (75000)
Développeur scala addict pour une agence de pub mobile
CDI
Mobiskill - Ile de France - Paris (75000)

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

PlanetHoster