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 13/07/2014 15:40
Salut

Oui Patrick, c'est tout l'intérêt du late binding, c'est justement de ne pas avoir à activer les références, c'est d'ailleurs pour cette raison que le late binding résout les problèmes de versions.

Je le dis d'ailleurs dans mon tutoriel

II-B-1. Late Binding

Si vous choisissez de ne pas utiliser le référencement, voici le type de code que vous utiliserez

Toutefois, j'utilise souvent le early binding pour répondre au gens, car l’auto-complétion est un très bon moyen pour que les gens qui demande de l'aide puisse modifier à leur compte le code, et ainsi, je l'espère, mieux comprendre l'objet qu'ils manipulent.
Et pour être honnête, l'auto-complétion m'arrange bien aussi car je ne connais pas par coeur toutes les propriétés et les fonctions des objets IE. Quand il s'agit de rechercher de nouvelles façon de faire, il est souvent très utile d'aller rechercher et tester des propriétés ou fonctions "nouvelles" et où les trouver si ce n'est dans l'explorateur d'objet VBA ou dans l'auto-complétion, tout deux liés au référencement.

Bonne continuation

++
Qwaz
Avatar de patricktoulon patricktoulon
http://www.developpez.com
Expert Confirmé Sénior
le 13/07/2014 15:51
bonjour qwazerty

ayant basculer très vite avec le Microsoft xmlhttp pour des raison de velocité je n'ai pas lu jusque la

10 coup de fouet pour moi
Avatar de Marc-L Marc-L
http://www.developpez.com
Expert Confirmé Sénior
le 30/07/2014 17:29

Bonjour,

juste une observation à propos du chapitre IV-B-2. GetElementsByName :
cette méthode n'est pas traitée dans cet excellent tutoriel car la méthode all renvoie les mêmes éléments.

Pour des éléments ne possédant pas d'ID (zone de sélection, bouton image, …) mais disposant bien d'un nom (Name),
sur une page tordue (dans le sens où même un form.submit ne déclenche rien) la méthode Document.all ne trouvant pas
un bouton image, j'étais passé par une cascade de children de children …
Hors en testant pour un autre élément, la méthode Document.GetElementsByName trouve bien ce bouton image !

En résumé, si la méthode all ne trouve pas un élément par son nom, penser alors à la méthode GetElementsByName …

_________________________________________________________________________________________________
We are all very ignorant, what happens is that not all ignore the same things … (Albert Einstein)

Avatar de bendu31 bendu31
http://www.developpez.com
Invité régulier
le 20/10/2014 19:17
Bonjour,

J'ai beaucoup aimé ce tutoriel, il est extrêmement puissant et facile à mettre en oeuvre !

J'ai cependant une question sur les déclarations en late binding.

Pour des raisons de compatibilité du fichier sur plusieurs postes, je souhaite tout déclarer en late binding afin de ne pas avoir à activer les références sur chaque machine ou le fichier sera exécuté.
J'ai trouvé pour internetexplorer (message ci dessus) et HTMLDocuments qui est dans create object ("htmlfile"), cependant pour HTMLInputElements je ne trouve pas la bonne syntaxe de déclaration.

Je déclare mes variables "as Object", et ensuite dans le "Set variable = CreateObject("....")"
Je ne sais quoi mettre entre les guillemets.

Pourriez vous me renseigner ?

Merci
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 régulier
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
Offres d'emploi IT
Ingénieur développement .net h/f
CDI
SEPTEO - Languedoc Roussillon - Pérols (34470)
Parue le 24/11/2014
Développeur php5
Alternance
IP-FORMATION - Ile de France - Montreuil (93100)
Parue le 01/12/2014
Ruby on rails - full stack developer
CDI
DOCTOLIB - Ile de France - Paris (75002)
Parue le 12/12/2014

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

PlanetHoster
Ikoula