Télécharger les résultats d'une recherches en VBA

Résolu
cs_Aquadrox Messages postés 7 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 avril 2012 - 7 janv. 2011 à 09:41
cs_Aquadrox Messages postés 7 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 avril 2012 - 12 janv. 2011 à 09:22
Bonjour,

Voici mon probleme, je me connecte à un site puis j'effectue une recherche.
J'aimerai pouvoir ensuite télécharger le résultat des recherches, ce sont des fichiers .tif ou .pdf.
Voici le code des résultats de la recherche:

	
<td>/xxx/download/6159326900_1_03%288%29.tif?ID=1294382461759
</td>

<td>/xxx/download/6159326900_PQP_1_01%280%29.pdf?ID=1294382461759
</td>

Je pensais viser la propriété "target" du lien pour charger le lien href, mais je n'y arrive pas.

Ci dessous les variables de ma fonction:
Public Function Connection(Optional str_Login As String "Login", Optional str_Mdp As String "Mdp")
 
Dim ie As InternetExplorer
Dim IEdoc As Object
Dim DOCelement As Object
Dim str_Link As String <== Lien de la page
Dim str_Part As String <== Un variable de recherche, ne pas en tenir compte
Dim winShell As New ShellWindows <== Pour lister les fenetre IE ouvertes
 
Set IEdoc = ie.Document

End Function


Est il possible de faire un balayge des propriétés "target" de la page, et de boucler seulement sur ceux égaux à "download"? Si oui comment?
Merci par avance pour votre aide!
J'ai fait des recherches et n'ai pas trouvé ce que je voulais, veuillez m'excuser si je suis passé à coté de la réponse sur le fofo :(.
Flo

4 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
7 janv. 2011 à 11:38
Salut,

essai à partir de ce qui suit :
Dim IEdoc As Object
Dim DOCelement As Object, UrlSearch() As String
'...
Set DOCelement = IEdoc.getElementsByTagName("a") ' "a" represente une collection d'objets "Element"
        For i = 0 To DOCelement.Length - 1
            If DOCelement(i).getAttribute("target") = "download" Then
                Redim Preserve UrlSearch(i + 1)
                UrlSearch(i) = (DOCelement(i).getAttribute("href")) 'ici "href" renvoi l'url recherchée. "href" est une propriété de "a"
                
        Next
' puis téléchargement par boucle sur le tableau UrlSearch
'...


je ne l'ai pas testé

A+
3
cs_Aquadrox Messages postés 7 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 avril 2012
12 janv. 2011 à 09:22
Ca marche!!
Merci!
Voici le code:
Option Explicit
Option Base 1

Private Declare Function URLDownloadToFile _
    Lib "urlmon" Alias "URLDownloadToFileA" _
    (ByVal pCaller As Long, ByVal szURL As String, _
    ByVal szFileName As String, ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long
 
Private Const ERROR_SUCCESS As Long = 0


Public Function Connection_Iview(str_Part As String, str_Description As String, str_Chemin As String, Optional str_Login As String "", Optional str_Mdp As String "")
 
Dim IE As InternetExplorer
Dim IEdoc As Object
Dim DOCelement As Object
Dim str_Link As String
Dim int_Start As Long
Dim int_Step As Long
Dim winShell As New ShellWindows
Dim str_UrlSearch() As String
Dim int_cpt As Integer
Dim str_Html As String
Dim sws As SHDocVw.ShellWindows
Dim bool_Error As Boolean




Select Case MsgBox("Attention, toutes les fenêtres IE vont être fermées (Internet, explorateur etc.)." _
                   & vbCrLf & "Continuer?" _
                   , vbYesNo Or vbQuestion Or vbDefaultButton2, "Continuer?")

    Case vbYes
            For int_cpt = 1 To 2
                For Each IE In winShell
                    If IE.LocationURL <> "" Then
                        IE.Quit 'option pour les fermer
                    End If
                Next IE
            Next int_cpt
            
'            str_Part = InputBox("Part à rechercher?", "Part", "6159326900")

            If str_Chemin <> "" Then
            
                    str_Link = "http://xx.xx.xx.xx:xxxx/iview/iView"
                
                    Set IE = New InternetExplorer
                    IE.Visible = False
                    IE.Navigate str_Link
                 
                     ' attente de fin de chargement
                    Do Until IE.ReadyState = 4
                        DoEvents
                    Loop
                    
                    Set IEdoc = IE.Document
                    'login
                     Set DOCelement = IEdoc.getElementsByName("USERNAME").Item
                On Error Resume Next
                     DOCelement.Value = str_Login
                     
                    'password
                     Set DOCelement = IEdoc.getElementsByName("password").Item
                     DOCelement.Value = str_Mdp
                     DOCelement.Select
                
                    'connexion
                     Set DOCelement = IEdoc.forms(0)
                     DOCelement.submit
                    
                    Do Until IE.ReadyState = 4
                        DoEvents
                    Loop
                    
                On Error GoTo 0
                    
                    str_Link = "http://xx.xx.xx.xx:xxxx/iview/iView?MODUL=HTML&HTML=simple_search.html"
                    IE.Navigate str_Link
                    
                    Do Until IE.ReadyState = 4
                        DoEvents
                    Loop
                
                    Set DOCelement = IEdoc.getElementsByName("DRWNAME").Item
                    DOCelement.Value = str_Part
                    
                
                    IE.Document.forms(0).submit.Click
                    
                    Do Until IE.ReadyState = 4
                        DoEvents
                    Loop
                    
                str_Html = "http://xx.xx.xx.xx:xxxx/iview/iView"
                Set sws = New SHDocVw.ShellWindows
                    
                While IEdoc.Title <> "Untitled Document"
                    For int_cpt = 0 To sws.Count - 1
                        If (Left(sws.Item(int_cpt).LocationURL, Len(str_Html)) str_Html) And (sws.Item(int_cpt).Document.Title) "Untitled Document" Then
                            Set IEdoc = sws.Item(int_cpt).Document
                            Exit For
                        End If
                    Next int_cpt
                Wend
                
                
                    'MsgBox ("Titre de la page pointée: " & IEdoc.Title)
                
                    Set DOCelement = IEdoc.getElementsByTagName("a") ' "a" represente une collection d'objets "Element"
                        For int_cpt = 0 To DOCelement.Length - 1
                            If DOCelement(int_cpt).getAttribute("target") = "download" Then
                                ReDim Preserve str_UrlSearch(2, int_cpt + 11)
                                str_UrlSearch(1, int_cpt + 1) = (DOCelement(int_cpt).getAttribute("href")) 'ici "href" renvoi l'url recherchée. "href" est une propriété de "a"
                            End If
                        Next int_cpt

                    For int_cpt = 1 To UBound(str_UrlSearch, 2)
                        If str_UrlSearch(1, int_cpt) <> "" Then
'                            MsgBox str_Chemin & "" & Right(Left(str_UrlSearch(1, int_cpt), 50), 10) & Left(Right(str_UrlSearch(1, int_cpt), 31), 3) & int_cpt & Left(Right(str_UrlSearch(1, int_cpt), 21), 4)
                                    DownloadFile _
                            str_UrlSearch(1, int_cpt), str_Chemin & "" & Right(Left(str_UrlSearch(1, int_cpt), 50), 10) & Left(Right(str_UrlSearch(1, int_cpt), 31), 3) & " " & str_Description & Left(Right(str_UrlSearch(1, int_cpt), 21), 4)
                        End If
                    Next int_cpt
                    
                        For Each IE In winShell
                            If IE.LocationURL <> "" Then
                                IE.Quit 'option pour les fermer
                            End If
                        Next IE
                
                    If Err.Number <> 0 Then
                        MsgBox "Erreur: " & Err.Number & vbCrLf & Err.Description
                    End If
            Else
                    MsgBox ("Pas de dossier séléctionné")
            End If
    Case vbNo
    
End Select

End Function



Public Function DownloadFile(ByVal sURL As String, _
    ByVal sLocalFile As String) As Boolean
    
    Dim lngRetVal As Long
    DownloadFile = URLDownloadToFile(0&, sURL, _
        sLocalFile, 0&, 0&) = ERROR_SUCCESS
End Function
 
3
cs_Aquadrox Messages postés 7 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 avril 2012
7 janv. 2011 à 12:05
Merci je vais essayer, ne t'en fait pas je ne test jamais un code sans le comprendre donc je vais tout d'abord regarder ca de pres.
Encore merci en tout cas
0
cs_Aquadrox Messages postés 7 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 avril 2012
7 janv. 2011 à 16:28
Hum, je crois que j'ai oublié de préciser quelque chose qui m’apparaît comme essentiel maintenant.

A la fin de ma recherche, le resultat apparait dans une nouvelle fenetre IE qui s'ouvre toute seule, je pensais que le focus passerait automatiquement de l'une a l'autre mais je me rend compte avec quelques tests que je suis toujours sur la premiere.

Comment faire pour que VBA passe sur la nouvelle fenetre IE avec les résultat?

J'ai essayé:
Set DOCelement = IEdoc.forms(1)


Mais il semblerait que ce ne soit pas ça.
0
Rejoignez-nous