Interaction avec Internet Explorer via VBA Excel

b2byl - Modifié par pijaku le 19/05/2016 à 08:01
 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

5 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
19 mai 2016 à 08:06
Bonjour,

Le code html donné n'est pas un code permettant d'effectuer une action...
0
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>
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
19 mai 2016 à 08:54
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"

0
Merci ! je vais creuser cette piste, je reviendrai vers vous !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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>
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
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...
0
Malheureusement il faut se connecter sur un portail pour accéder à la page.

Merci !
0
Rejoignez-nous