Interaction avec Internet Explorer via VBA Excel

- 18 mai 2016 à 15:31 - Dernière réponse :  b2byl
- 19 mai 2016 à 10:28
Bonjour a tt le monde
si qu'elqu'un veux bien m'aider !
j'ai une macro vba qui permet :

1) de me connecter sur un page web
2) d'inserer les valeurs date debut, date de fin
3) de charger les donner
4) Exporter les données dans un format( Excel, word, csv, pdf) , le bouton est sous la forme d'une liste deroulante.

le probléme c'est que je me suis bloqué à la quatriéme étape, c'est a dire j'arrive pas à acceder au bouton exporter
avec le code html de la page.

je me suis inspirer du tutoriel sur developpez.com : Interaction avec Internet Explorer via VBA Excel:
http://qwazerty.developpez.com/tutoriels/vba/ie-et-vba-excel/

voici le code html qui correspond au bouton sur la page web:

<IMG id=ctl31_ctl05_ctl04_ctl00_ButtonImg style="BORDER-TOP: 0px;
 HEIGHT: 16px; BORDER-RIGHT: 0px; WIDTH: 16px; BORDER-BOTTOM: 0px;
 BORDER-LEFT: 0px" alt=Exporter 
src="/Reports/Reserved.ReportViewerWebControl.axd?OpType=Resource&
Version=10.50.4302.0&Name=Microsoft.Reporting.WebForms.Icons.Export.gif">


voici mon code:

Sub WaitIE(IE As InternetExplorer)
   'On boucle tant que la page n'est pas totalement chargée
   Do Until IE.readyState = READYSTATE_COMPLETE
      DoEvents
   Loop
End Sub
'*****************************************************************************************************************************************************************
Sub ExplorerShel()
'Déclaration des variables
Dim IE As New InternetExplorer
Dim InputGoogleZoneTextefirst As HTMLInputElement
Dim InputBouton As HTMLInputElement
Dim onclick As HTMLDocument
Dim InputBoutonbis As HTMLInputElement
Dim htmlSelectElem As Range

'Affichage de la fenêtre IE
IE.Visible = True
IE.navigate "http://reports.flexiblecontactcenter.orange-business.com/Reports/Pages/Report.aspx?ItemPath=%2fG2R1C5%2fFRA%2fFile+d'attente%2fFile+d'attente+Export"
'*****************************************************************************************************************************************************************
'On attend le chargement complet de la page
WaitIE IE
'On pointe le membre Document
Set IEDoc = IE.document

'On pointe notre Zone de texte
Set InputGoogleZoneTextefirst = IEDoc.all("ctl31$ctl04$ctl05$txtValue")
'On définit le texte que l'on souhaite placer à l'intérieur
InputGoogleZoneTextefirst.Value = "01/03/2016"
WaitIE IE
'*****************************************************************************************************************************************************************
'*****************************************************************************************************************************************************************
WaitIE IE
'On pointe notre Zone de texte
Set InputGoogleZoneTextesecond = IEDoc.all("ctl31$ctl04$ctl07$txtValue")
'On définit le texte que l'on souhaite placer à l'intérieur
WaitIE IE
InputGoogleZoneTextesecond.Value = "05/03/2016"
'*****************************************************************************************************************************************************************
WaitIE IE
'On pointe notre bouton
Set InputBouton = IEDoc.all("ctl31$ctl04$ctl00")
'On simule un clic
InputBouton.Click
'*****************************************************************************************************************************************************************
#Quatriéme étape : Exporter les données sur excel
WaitIE IE
'Set onclick = IEDoc.all("ctl31_ctl09")
'htmlSelectElem = IEDoc("ctl31_ctl09")

'*************************************************************************************************************************************************************
'On libère la variable IE
Set IE = Nothing
End Sub
Afficher la suite 

Votre réponse

7 réponses

Messages postés
12247
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
2 novembre 2018
- 19 mai 2016 à 08:06
0
Merci
Bonjour,

Le code html donné n'est pas un code permettant d'effectuer une action...
Commenter la réponse de pijaku
0
Merci
Bonjour pijaku, merci de vous êtes intéressé à mon problème
le code html que j'ai fourni correspond au bouton exporter sous :

voici le code qui correspond à l'action exporter sous Excel :
<A onclick="$find('ctl31').exportReport('EXCEL');
" title=Excel class=ActiveLink style="TEXT-DECORATION: none;
 WHITE-SPACE: nowrap; PADDING-BOTTOM: 3px; PADDING-TOP: 3px;
 PADDING-LEFT: 32px; DISPLAY: block; 
PADDING-RIGHT: 8px" href="javascript:void(0)" _selected="true">Excel</A>
Commenter la réponse de b2byl
Messages postés
12247
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
2 novembre 2018
- 19 mai 2016 à 08:54
0
Merci
Alors, dans ce cas, il te faut établir la collection des balises "liens" (<a></a>) de ta page, boucler sur cette collection pour trouver l'élément qui a pour innertext (ou innerhtml franchement je ne sais plus, ça fait longtemps...) Excel.

Un peu comme ceci :
Dim Col_liens As IHTMLElementCollection
Dim Elem As HTMLGenericElement 'ou As HTMLAnchorElement

Set IEDoc = IE.document
Set Col_liens = IEDoc.getElementsByTagName("a")
For Each Elem In Col_liens
    If Elem.innertext = "Excel" Then Elem.Click: Exit For
   'ou :
   'If Elem.innerhtml = "Excel" Then Elem.Click: Exit For
Next


Ou alors, plus simple, si ton bouton lance une fonction javascript, ton code devient :
Set IEDoc = IE.document
IEDoc.parentWindow.execScript "Nom_fonction_Javascript", "JavaScript"

Commenter la réponse de pijaku
0
Merci
Merci ! je vais creuser cette piste, je reviendrai vers vous !
Commenter la réponse de b2byl
0
Merci
Bonjour,
j'ai essayé ! mais ça ne marche pas
il veux pas rentrer dans la boucle car l'objet est vide.
voici le code html qui correspond au Menu du bouton exporter sous peux être que se sera plus clair:

<DIV id=ctl31_ctl05_ctl04_ctl00_Menu class=MenuBarBkGnd style="POSITION: absolute; PADDING-BOTTOM: 1px; PADDING-TOP: 1px; PADDING-LEFT: 1px; DISPLAY: block; PADDING-RIGHT: 1px; VISIBILITY: visible" _oldDisplayMode="block"><DIV class=DisabledButton><A onclick="$find('ctl31').exportReport('XML');" title="Fichier XML avec donn&#233;es de rapport" class=ActiveLink style="TEXT-DECORATION: none; WHITE-SPACE: nowrap; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; PADDING-LEFT: 32px; DISPLAY: block; PADDING-RIGHT: 8px" href="javascript:void(0)" _selected="false">Fichier XML avec données de rapport</A> </DIV>
<DIV class=DisabledButton><A onclick="$find('ctl31').exportReport('CSV');" title="CSV (d&#233;limit&#233; par des virgules)" class=ActiveLink style="TEXT-DECORATION: none; WHITE-SPACE: nowrap; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; PADDING-LEFT: 32px; DISPLAY: block; PADDING-RIGHT: 8px" href="javascript:void(0)" _selected="false">CSV (délimité par des virgules)</A> </DIV>
<DIV class=DisabledButton><A onclick="$find('ctl31').exportReport('PDF');" title=PDF class=ActiveLink style="TEXT-DECORATION: none; WHITE-SPACE: nowrap; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; PADDING-LEFT: 32px; DISPLAY: block; PADDING-RIGHT: 8px" href="javascript:void(0)" _selected="false">PDF</A> </DIV>
<DIV class=DisabledButton><A onclick="$find('ctl31').exportReport('MHTML');" title="MHTML (archive Web)" class=ActiveLink style="TEXT-DECORATION: none; WHITE-SPACE: nowrap; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; PADDING-LEFT: 32px; DISPLAY: block; PADDING-RIGHT: 8px" href="javascript:void(0)" _selected="false">MHTML (archive Web)</A> </DIV>
Messages postés
12247
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
2 novembre 2018
- 19 mai 2016 à 10:07
il veux pas rentrer dans la boucle car l'objet est vide.
As tu, au préalable, actualisé ta variable IEDoc?

voici le code html qui correspond au Menu du bouton exporter sous peux être que se sera plus clair
Non ce ne sera clair que si je peux accéder à la page en question, ce qui n'est pas le cas...
Malheureusement il faut se connecter sur un portail pour accéder à la page.

Merci !
Commenter la réponse de b2byl

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.