Rapport de message :*
 

Re: Piloter des pages intranet est-il possible?

Titre du sujet : Re: Piloter des pages intranet est-il possible?
par JackyAmiens le 12/03/2008 11:41:28

Mon problème était le suivant
Accéder à une page Html d'un intranet pour récupérer un fichier csv au format Txt via excel.

1-Identification sur la page d'entrée
2-passer à la page d'interrogation (formulaire) qui génére un tableau avec lien sur un fichier téléchargeable.
3-sauvegarder le fichier téléchargeable sur un disque local.
l'opération 2 et 3 devant être (pour l'instant) faite 4 fois.

Grace à MichelXld, j'ai compris comment piloter html pour saisir des données dans des zones de texte, radio ou combobox (liste déroulante).

l'instruction IE.readyState permet de savoir si la page est chargé en cache sur le micro.

J'ai dû ajouter une temporisation pour pouvoir aller lire le code HTML générer (intranet + page ASP) qui termine de se charge dans le navigateur après readyState=4.

Après validation des éléments du formulaire, la page générée contient en code HTML l'adresse du fichier à télécharge.

répérage du code grace à MaPageHtml.getElementsByTagName("a").Item(1).outerHTML
le 1 correspond au nombre URL présent dans le code HTML.


Mon objectif est atteind à 100%, merci à myDearFriend et à vous pour l'aide obtenu.

Ci-dessous le code complet de mon projet ( à ma sauce of course)



Public IE As InternetExplorer
Public HlmIdentHlmMdpHlmBaseHlmBoutonHlmddebHlmdfinHlmgo As HTMLElementCollection
Public MaPageHtml As HTMLDocument
Public DateDebutDateFin As String

Sub Calabrio
()
 
'Auteur Jacky Bruiant
 '
Programme principale

 
 Set IE 
CreateObject("InternetExplorer.Application")
 
IE.Visible True
 IE
.navigate ("http://monacces/page1.asp")
 
 
'Attendre l'affichage de l'info htlm terminé dans IE 
 Do Until IE.readyState = 4 '
 
DoEvents
 Loop
 
 
'Liste des paramètres des pages HTML
 Set MaPageHtml = IE.document
 Set HlmIdent = MaPageHtml.getElementsByName("login").Item
 Set HlmMdp = MaPageHtml.getElementsByName("pwd").Item
 Set HlmBase = MaPageHtml.getElementsByName("connexion").Item(0)
 Set HlmBouton = MaPageHtml.getElementsByName("Submit2").Item
 
 '
Lecture et mise en forme de la période d'extraction
 DateDebut = DateSerial(Year(Range("ddebut").Value), Month(Range("ddebut").Value), 1)
 datedfin = DateSerial(Year(Range("ddebut").Value), Month(Range("ddebut").Value) + 1, 1) - 1

 DateDebut = CStr(DateDebut)
 DateFin = CStr(datedfin)
 
'
Habilitation d'access
HlmIdent.Value = "Identifiant"
HlmMdp.Value = "MdP"
HlmBase.setAttribute "checked", "true"
HlmBouton.Click
Call PauseWait(4)

'
Rapatriement des données Ja
Exfunct 
goHTML(7"Cmiens")
Exfunct goHTML(8"CAmiens")
Exfunct goHTML(11"CLille")
Exfunct goHTML(19"CTroyes")

Call PauseWait(2)
IE.Quit
gbox 
MsgBox("Rapatriement achevé"vbInformation"Source Calabrio")
End Sub

'********************************************************************************
Function sauvcalabrio(urlnum, lienurl)
'
' Bruiant J.
'
realise par l'enregistreur de macro

Application.DisplayAlerts = False '
empêche l'apparition des boites de dialogue de confirmation
    Workbooks.OpenText Filename:= _
        lienurl, _
        Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
        Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), TrailingMinusNumbers _
        :=True
    
'
Sauvegarder les données au format TXT avec un séparateur 
ActiveWorkbook.SaveAs Filename:="F:Projetdonnees" urlnum ".txt"_
        FileFormat
:=xlCSVCreateBackup:=False
        ReadOnlyRecommended
:=FalseCreateBackup:=False
        
    ActiveWorkbook
.Close
Application
.DisplayAlerts True  'réactive les message d'alertes
End 
Function

'**********************************************************************************
Sub PauseWait(tps)
'
' Attendre x secondes (voir l'
aide en ligne d'Excel)
'
inspiration du net

Lheure 
Hour(Now())
LesMinutes Minute(Now())
LesSecondes Second(Now()) + tps  'tps le temps de pause
waitTime = TimeSerial(LHeure, LesMinutes, LesSecondes)
Application.Wait waitTime

End Sub

'
**********************************************************************************
Public Function 
goHTML(positionNomFichier)
 
'fonction de génération de la page html contenant le code du fichier de téléchargement
 
 Set MaPageHtml = IE.document
 
IE.navigate ("http://monacces/page2.asp?idsite=370")  '
page de saisie des informations

 
'Attendre l'affichage l'info htlm terminé
 Do Until IE.readyState = 4
 DoEvents
 Loop
 
Call PauseWait(2)
'
Selection de l'équipe ou 0 est le premier élément de la liste
Set HlmSelSite = MaPageHtml.getElementsByTagName("select")
HlmSelSite(1).selectedIndex = position
 

Set Hlmgo = MaPageHtml.getElementsByName("go").Item  '
Image fléche de validation données
Set Hlmddeb 
MaPageHtml.getElementsByName("ddeb").Item  'date de début
Set Hlmdfin = MaPageHtml.getElementsByName("dfin").Item '
date de fin

 
'Attendre l'affichage de l'info htlm terminé dans IE
 Do Until IE.readyState = 4
 DoEvents
 Loop

'
Saisie de la période d'extration des JA
Hlmddeb.Value = DateDebut
Hlmdfin.Value = DateFin

Set HlmImgok = MaPageHtml.getElementsByName("go").Item
HlmImgok.Click

'
Attendre l'affichage complet de la page demandée
 Do Until IE.readyState = 4
 DoEvents
 Loop
 
 Call PauseWait(15)
 
'
Repérage le l'URL du fichier dans le code html 

letxt = MaPageHtml.getElementsByTagName("a").Item(1).outerHTML

'
suppression de la chaine devant le numéro du fichier
letxt 
Replace(letxt"<A class=lienorange_10 href=""../upload/temp/extraction""")  

'suppression de la chaine après le numéro du fichier
letxt = Replace(letxt, ".txt"" target=_blank>Télécharger le fichier TXT</A>", "") 

lelien = " http://monacces/upload/temp/extraction" & letxt & ".txt"  '
constitution de l'URL de téléchargement

exfonct = sauvcalabrio(NomFichier, lelien)  '
recupération du fichier
Call PauseWait
(2)
End Function