IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA & Internet


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut VBA & Internet
    Bonjour à tous,

    J'ai dernièrement découvert que l'on pouvait piloter internet depuis VBA chose que je n'imaginais pas auparavant. J'aimerais donc piloter un site internet afin d'y saisir automatiquement des données à l'aide d'une macro.

    En regardant un peu sur le net j'ai recompilé une macro qui permet d'ouvrir un site style "boursorama", puis d'y saisir des infos. Cependant quand j'essai de la faire fonctionner sur le site en question (celui que je voudrais piloter) elle ne fonctionne pas.

    En fait j'aimerais pouvoir faire une bouble afin que VBA me répertorie tous les liens possibles et plus particulièrement des liens de types URL. Quand je click droit sur les liens de ce site puis regarde properties, il est écrit: "adresse URL:javascript: toggle_branch('TRADE_CAPTURE')". C'est ce genre de lien que j'aimerais activer.
    Comment simuler un click et activer ces liens afin de naviguer?

    De plus, lorsque je me connecte à ce site, il me faut rentrer un Id et mot de passe dans une fenêtre "pop up" j'ai essayé plein de trucs mais rien n'y fait.

    QQun a t'il une réponse à mon problème?

    Merci de votre aide

    Anthony

    Mon code est le suivant, la fonction principale est Sub Explorer Test? J'ai mis un lien là où ça commence à déconner il me semble.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Function GetOpenIEByTitle(i_Title As String, _
                                      Optional ByVal i_ExactMatch As Boolean = True) As SHDocVw.InternetExplorer
    'finds an open IE site by checking the title
    Dim objShellWindows As New SHDocVw.ShellWindows
     
      If i_ExactMatch = False Then i_Title = "*" & i_Title & "*"
      'ignore errors when accessing the document property
      On Error Resume Next
      'loop over all Shell-Windows
      For Each GetOpenIEByTitle In objShellWindows
        'if the document is of type HTMLDocument, it is an IE window
        If TypeName(GetOpenIEByTitle.document) = "HTMLDocument" Then
          'check the title
          If GetOpenIEByTitle.document.Title Like i_Title Then
            'leave, we found the right window
            Exit Function
          End If
        End If
      Next
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    'loads a web page and returns True or False depending on
    'whether the page could be loaded or not
    Function LoadWebPage(i_IE As SHDocVw.InternetExplorer, _
                                 i_URL As String) As Boolean
      With i_IE
        'open page
        .navigate i_URL
        'wait until IE finished loading the page
        Do While .readyState <> READYSTATE_COMPLETE
          Application.Wait Now + TimeValue("0:00:05")
        Loop
        'check if page could be loaded
        If .document.URL = i_URL Then
          LoadWebPage = True
        End If
      End With
    End Function

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'returns new instance of Internet Explorer
    Function GetNewIE() As SHDocVw.InternetExplorer
      'create new IE instance
      Set GetNewIE = New SHDocVw.InternetExplorer
      'start with a blank page
      GetNewIE.Navigate2 "about:Blank"
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Sub ExplorerTest()
    Const myPageTitle As String = "FundManager"
    Const myPageURL As String = "http://bftparis/"
    Const mySearchForm As String = "searchform"
    Const mySearchInput As String = "searchInput"
    Const mySearchTerm As String = "Document Object Model"
    Const myButton As String = "Go"
     
    Dim myIE As SHDocVw.InternetExplorer
     
      'check if page is already open
      Set myIE = GetOpenIEByTitle(myPageTitle, False)
     
      If myIE Is Nothing Then
        'page isn't open yet
        'create new IE instance
        Set myIE = GetNewIE
        'make IE window visible
        myIE.Visible = True
        'load page
        If LoadWebPage(myIE, myPageURL) = False Then
          'page wasn't loaded
          MsgBox "Couldn't open page"
          Exit Sub
        End If
      End If
      '
             '***********TOUT FONCTIONNE JUSQU ICI*************
     
        Dim maPageHtml As HTMLDocument
        Dim Helem As IHTMLElementCollection
        Dim Hsel As IHTMLElementCollection
     
        Set maPageHtml = myIE.document
        Set Helem = maPageHtml.getElementsByTagName("input")
        Set Hsel = maPageHtml.getElementsByTagName("select")
     
        'boucle pour lister les objets type "input" de la page
        'afin d'identifier ls champs qui t'interessent.
        'Les objets Input peuvent etre des textbox ou des boutons
        For i = 0 To Helem.Length - 1
        MsgBox Helem(i).getAttribute("name") & " / " & Helem(i).getAttribute("value")
        'Helem(i).innerText = "testtesttesttesttesttest"
        Next
        'Helem(4).Click
      '
    End Sub

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 75
    Par défaut
    Ouh là là pas facile facile!!

    Qu'estce que tu veux faire exactement?
    Si tu veux juste trouver les liens de ta page pour par exemple les mettre dans une listbox, regarde là.
    Sinon essai d'expliquer autrement...
    En esperent t'avoir aidé.

    Nicht

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Bonjour nicht,

    C'est vrai que c'est un peu compliqué...

    En fait, je voudrais que VBA me référence tous les liens de la page web afin de lui dire sur lesquels cliquer. J'ai réussi dans le cas des inputs. En fait, j'ai trouvé ce morceau de code qui m'a bien aidé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Dim maPageHtml As HTMLDocument
        Dim Helem As IHTMLElementCollection
        Dim Hsel As IHTMLElementCollection
     
        Set maPageHtml = myIE.document
        Set Helem = maPageHtml.getElementsByTagName("input")
        Set Hsel = maPageHtml.getElementsByTagName("select")
     
        'boucle pour lister les objets type "input" de la page
        'afin d'identifier ls champs qui t'interessent.
        'Les objets Input peuvent etre des textbox ou des boutons
        For i = 0 To Helem.Length - 1
        MsgBox Helem(i).getAttribute("name") & " / " & Helem(i).getAttribute("value")
        'Helem(i).innerText = "testtesttesttesttesttest"
        Next
        'Helem(4).Click
    Ce code permet de faire une boucle et renvoi le nom et la valeur des "inputs" présent dans la page internet il ne me suffit plus après qu'à dire à excel sur quel lien cliquer.

    Mon problème maintenant et que la page sur laquelle je veux travailler ne contient pas d' input, ce ne sont que des liens URL: javascript: toggle_branch('TRADE_CAPTURE') et je n'arrive pas à dire à excel de cliquer sur ces liens.

    Peux-tu me dire comment je pourrais dire à Excel d'aller cliquer sur le lien "javascript: toggle_branch('TRADE_CAPTURE')" ?

    Merci

    Anthony

  4. #4
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Salut à tous,

    En cherchant, j'ai trouvé qu'il fallait utiliser les "frames" du document afin de pouvoir récupérer les inputs. Ce lien le démontre:

    http://www.ozgrid.com/forum/showthre...t=74589&page=2

    "I found the problem and thought I would share. The reason why the getElementsByTagName method does not work on some sites, is because the website uses frames. The HTML document is contained within the frame and therefore is not available directly using"

    Cependant je n'arrive pas à le faire fonctionner qqun pourrait t'il m'aider à trouver ces fameux frames?

    Ci dessous mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Sub ExplorerTest()
    '
    Const myPageTitle As String = "FundManager"
    Const myPageURL As String = "http://bftparis/"
    Dim myIE As SHDocVw.InternetExplorer
     
    'check if page is already open
    Set myIE = GetOpenIEByTitle(myPageTitle, False)
    '
        If myIE Is Nothing Then
          'page isn't open yet
          'create new IE instance
          Set myIE = GetNewIE
          'make IE window visible
          myIE.Visible = True
          'load page
          If LoadWebPage(myIE, myPageURL) = False Then
            'page wasn't loaded
            MsgBox "Couldn't open page"
            Exit Sub
          End If
        End If
    '
        Dim maPageHtml As HTMLDocument
        Dim Helem As IHTMLElementCollection
        Dim Hsel As IHTMLElementCollection
     
        Set maPageHtml = myIE.document
        Set Helem = maPageHtml.getElementsByTagName("TITLE")
        Set Hsel = maPageHtml.getElementsByTagName("select")
     
        'boucle pour lister les objets type "input" de la page
        'afin d'identifier ls champs qui t'interessent.
        'Les objets Input peuvent etre des textbox ou des boutons
        For i = 0 To Helem.Length - 1
        MsgBox Helem(i).getAttribute("name") & " / " & Helem(i).getAttribute("value")
        'Helem(i).innerText = "test"
        Next
    '
    Set myIE = Nothing
    End Sub
    Alors en vérifiant il s'agit bien d'un problème de "frames" mais comment peux-on faire pour chercher dans un "frame" les "input" possibles, je bloque.

Discussions similaires

  1. Excel VBA et Internet explorer 8
    Par Antoine HUG dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 11/07/2009, 09h49
  2. Access vba et internet
    Par BRUNO71 dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/01/2009, 13h35
  3. VBA et Internet explorer
    Par sechanbask dans le forum Général VBA
    Réponses: 6
    Dernier message: 27/05/2008, 12h24
  4. [VBA-E] Internet Explorer dans Excel ?
    Par iButton dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/01/2007, 19h13
  5. Comment faire Copier/Coller par code VBA sur INTERNET...
    Par GESCOM2000 dans le forum Access
    Réponses: 5
    Dernier message: 02/01/2006, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo