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

  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.

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

    le code suivant est censé répertorié to les liens contenus dans un frame spécifiques. Cependant, il ne donne aucun résultât. Il ne bug pas mais ne trouve rien. Qqun peut-il m'aider?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Dim maPageHtml As HTMLDocument
        Dim Helem As IHTMLElementCollection
        Dim Hsel As IHTMLElementCollection
     
        Set maPageHtml = myIE.document
        Set Helem = maPageHtml.frames.Item(0).document.documentElement.getElementsByTagName("INPUT")
     
        'boucle pour lister les objets type "input" de la page
        '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

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Citation Envoyé par Anthony75
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...    Set Helem = maPageHtml.frames.Item(0).document.documentElement.getElementsByTagName("INPUT")
    Les liens URL ou javascript que tu cherches ne sont pas des balises INPUT mais des balises A.

    Citation Envoyé par Anthony75
    Peux-tu me dire comment je pourrais dire à Excel d'aller cliquer sur le lien "javascript: toggle_branch('TRADE_CAPTURE')" ?
    Il faut rechercher la chaîne "TRADE_CAPTURE" dans l'attribut "href" de l'élement (Helem(i).getAttribute("href"))

    Une fois que l'élément a été trouvé il suffit de faire Helem(i).Click

  7. #7
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    J'ai bien remplacé Input par A et cherché à trouver "Href" cependant ça ne fonctionne pas car helem.length est égale à 0 dc pas de boucle. J'ai essayé de mettre une valeur à la main pour que ça tourne qd mm et dans ce cas ça ne renvoit rien.

    Le seul truc que j'arrive à trouver sur cette fichue page internet sont les "FRAMES" ( en lieu et place de A) qu'il me répertorie très bien mais je ne sais pas trop comment continuer après ça.

    Peut etre faudrait-il désigner le "frames" qui nous interesse puis lui dire de chercher dans ce "FRAME" spécifique? Jsais pas faire ça malheureusement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Dim maPageHtml As HTMLDocument
        Dim Helem As IHTMLElementCollection
        Dim Hsel As IHTMLElementCollection
     
        Set maPageHtml = myIE.document
        Set Helem = maPageHtml.frames.Item(0).document.documentElement.getElementsByTagName("A")
     
        'boucle pour lister les objets type "input" de la page
        For i = 0 To Helem.Length - 1
        MsgBox Helem(i).getAttribute("name") & " / " & Helem(i).getAttribute("HREF")
        Next
    merci

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Ce n'est peut-être pas le frame d'index 0 qui t'intéresse. Il faudrait faire une boucle de test sur la collection des frames et pour chaque frame tu affiches le texte des balises A et leurs propriétés href correspondantes (par Debug.print au lieu de Msgbox, ça évite d'avoir à cliquer sur OK. Le résultat s'affiche dans la fenêtre d'exécution).

  9. #9
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Tu saurais pas me donner un coup de pouce pour le coder. Franchement, j'ai jamais utilisé VBA pr piloter internet ou d'autres appli, j'ai trop de mal, jsuis la dessus depuis un bail et ça ne donne rien. Si je ne mets pas Frames.item(0), il bug
    Qd je recherche les frames celui qui m'interesse est le troisième donc Item(2) je présume mais si je mets item(2) il plante, et puis comment retrouver les input A ds ce frame ça reste un mystère pr moi

    merci de ton aide

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Citation Envoyé par Anthony75 Voir le message
    .... Franchement, j'ai jamais utilisé VBA pr piloter internet ou d'autres appli, j'ai trop de mal ...
    Pourtant en voyant tes exemples tu ne dois pas être loin de la solution.

    Il faut déjà commencer par savoir combien de frames tu as dans ta page. Tu en vois peut-être 3 mais il se peut qu'il y ait 2 sous-frames dans le frame d'index 1. Fais une macro avec la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Debug.Print maPageHtml.frames.length

  11. #11
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    alors là jsuis bluffé, il me dis qu'il y a un seul Frame! Pourtant qd jlui dis de me les chercher il m'en trouve plein.

    Donc si il n'y qu'un seul Frame c ds celui là qu'il fo que je cherche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set Helem = maPageHtml.frames.Item(0).document.documentElement.getElementsByTagName("A")
    mais alors pourquoi, si il ny a qu'un frame d'indice 0, ce code ne fonctionne t'il pas c dingue ce truc?

    Jviens d'essayer un nouveau truc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Set Helem = maPageHtml.frames.Item(0).document.documentElement.getElementsByTagName("frame")
     
        Debug.Print maPageHtml.frames.Length
        Debug.Print Helem.Length
    Pour la première valeur il me renvoie 1 ce qui veut donc dire qu'il ya un FRAME et puis pour la seconde il me renvoie 10 donc qu'il y a 10 sous "FRAMES" dans le frame d'indice 0, c'est bien ça?

    merci de ton aide

    Ps c'est super bien debug.print

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    A priori c'est ça.

    Maintenant il faut faire une boucle sur la collection des frames, et pour chaque frame récupérer la collection des balises A pour trouver dans quel frame se trouvent les balises qui t'intéressent.

    Citation Envoyé par Anthony75 Voir le message
    alors là jsuis bluffé, il me dis qu'il y a un seul Frame! Pourtant qd jlui dis de me les chercher il m'en trouve plein.

    Donc si il n'y qu'un seul Frame c ds celui là qu'il fo que je cherche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set Helem = maPageHtml.frames.Item(0).document.documentElement.getElementsByTagName("A")
    mais alors pourquoi, si il ny a qu'un frame d'indice 0, ce code ne fonctionne t'il pas c dingue ce truc?
    Désolé, j'ai oublié de répondre à la question:

    Si le frame principal ne contient que des sous-frames, les balises contenues dans ces frames ne sont pas accessibles directement (sauf peut-être en utilisant la collection "frames.Item(0).document.all.tags("A")". A tester. De toute façon, pour le pilotage de l'appli, il faut déterminer le bon frame à utiliser)

  13. #13
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Voilà mais mon problème est toujours le mm j'arrive pas à coder pour boucler dans les frames en question, j'arrive à boucler sur les Frames mais j'arrive pas à entrer dedans


    Boucle sur les Frames

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Set maPageHtml = myIE.document
        Set Helem = maPageHtml.frames.Item(0).document.documentElement.getElementsByTagName("FRAME")
     
     
        'boucle pour lister les objets type "input" de la page
        For i = 0 To Helem.Length - 1
        Debug.Print Helem(i).getAttribute("NAME") & " / " & Helem(i).getAttribute("HREF")
        Next
    Renvoi rien car ne rentre pas dans les frames:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Set maPageHtml = myIE.document
        Set Helem = maPageHtml.frames.Item(0).document.documentElement.getElementsByTagName("A")
     
     
        'boucle pour lister les objets type "input" de la page
        For i = 0 To Helem.Length - 1
        Debug.Print Helem(i).getAttribute("NAME") & " / " & Helem(i).getAttribute("HREF")
        Next
    Si j'arrive à boucler dans un frame alors ce sera bon mais jsais pas comment le coder

    en tout cas tu m'as bien aidé!

    C'est le troisième sous frame que je voudrais utiliser, il semble que "alltags" donne rien aurais tu une autre idée pr cette fameuse boucle?

    merci

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Pour le parcours des balises A du sous-frame 3 (d'index 2):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Set Helem = maPageHtml.frames.Item(0).document.frames.Item(2).document.getElementsByTagName("A")
     
        Debug.Print Helem.Length

  15. #15
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    L'horreur il renvoi 0...

    Djib29, si jte passe le code HTML du site tu crois que tu saurais me dire ce qu'il faudrait chercher parce que là jvois plus comment faire du tout?

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Ton site à l'air bien complexe, je ne suis pas sûr que ça serve à grand chose.

    Tu peux essayer le code suivant (à intégrer avec le tien):

    Je ne suis pas sûr du type "HTMLFrameElement"

    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
     
      Dim iHTMLColFrame As IHTMLElementCollection
      Dim iHTMLColA As IHTMLElementCollection
      Dim iHTMLEle As IHTMLElement
      Dim iHTMLFrame As HTMLFrameElement
      Dim i%, j%
     
      Set iHTMLColFrame = maPageHtml.frames.Item(0).document.frames
     
      'Parcours de la collection des sous-frames
      For i = 0 To iHTMLColFrame.Length - 1
        Set iHTMLFrame = iHTMLColFrame.Item(i)
     
        Set iHTMLColA = iHTMLFrame.document.getElementsByTagName("A")
     
        If iHTMLColA.Length > 0 Then
          Debug.Print "Des balises A existent dans le frame " & i
     
          For Each iHTMLEle In iHTMLColA
            Debug.Print "Texte: " & iHTMLEle.innerText & " href: " & iHTMLEle.getAttribute("href")
          Next
        Else
          Debug.Print "Aucune balise A dans le frame " & i
        End If
      Next
    Citation Envoyé par Anthony75 Voir le message
    alors là jsuis bluffé, il me dis qu'il y a un seul Frame! Pourtant qd jlui dis de me les chercher il m'en trouve plein.
    2 questions par curiosité: c'est qui "lui" ? comment fait "lui" pour trouver les frames ? Merci.

  17. #17
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    et bien le programme! J'espère que tu ne l'as pas pris pour toi!

    Ce qui m'étonnait c t qu'il (le programme) m'affichait qu'il y avait 10 frames. Cependant, il ne s'agissait que de un frames avec 10 sous frames. Or je ne savais même pas qu'il existait des sous frames!

    Le morceau de code que tu m'as donné...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Set Helem = maPageHtml.frames.Item(0).document.frames.Item(2).document.getElementsByTagName("A")
    ...permet d'aller dans un frames et de parcourir les sous frames? Right?

    donc si je mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Set Helem = maPageHtml.frames.Item(0).document.frames.Item(2).document.getElementsByTagName("NAME")
    il devrait me ramener le nom des frames. Or il ne ramène rien

    merci de ton aide je vais essayer ton code c'est Sympa.

    Le site ne doit pas être trop trop compliqué le truc c que je ne sais pas bien ce que sont les liens "A", et je ne sais pas si il parcours effectivement le frame.

    Bref c la galère et mon chef me saoule avec ça!

    Merci de ton aide

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Citation Envoyé par Anthony75 Voir le message
    donc si je mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Set Helem = maPageHtml.frames.Item(0).document.frames.Item(2).document.getElementsByTagName("NAME")
    il devrait me ramener le nom des frames. Or il ne ramène rien
    Non, cette instruction ramènerait la collection des balises NAME (<NAME></NAME>) s'il y en avait dans le frame, sauf que cette balise n'existe pas en HTML.

    Si tu veux le nom du frame:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      nomFrame = maPageHtml.frames.Item(0).document.frames.Item(2).name

  19. #19
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    J'ai voulu essayer ton code que je te remercie de m'avoir envoyé mais il bug bizarrement, serait-il possible à ton avis que ce ne soit pas de balises de type "A"?

    sinon si qqun a déjà connu ce genre de problème: à savoir aller chercher dans un "frame" ou plutôt un sous "Frame" une donnée qu'il se manifeste au plus vite avant que mon cerveau ne tombe du coté obscur!

    mon code au cas où ça inspirerait qqun...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Dim maPageHtml As HTMLDocument
        Dim Helem As IHTMLElementCollection
     
        Set maPageHtml = myIE.document
        'Set Helem = maPageHtml.frames.Item(0).document.documentElement.getElementsByTagName("frame")
        Set Helem = maPageHtml.frames.Item(0).document.frames.Item(1).document.getElementsByTagName("A")
     
        Debug.Print maPageHtml.frames.Length
        Debug.Print Helem.Length
     
        'boucle pour lister les objets type "A" de la page
        For i = 0 To Helem.Length - 1
        Debug.Print Helem(i).getAttribute("name") & " / " & Helem(i).getAttribute("HREF")
        Next

  20. #20
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Si ton site a plusieurs frames ça ne servira à rien de sortir le HTML de la page tel que IE peut le fournir. Par contre s'il peut fonctionner avec FireFox, on peut obtenir le code source d'un frame en particulier (il me semble qu'on ne peut pas le faire avec IE. A confirmer)

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