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 :

Pilotage Internet Explorer


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    J'ai lu cette contribution.

    Merci à vous et à alain,

    Cependant j'ai toujours dans certains cas une erreur dûe au temps de chargement...car vba il semblerait que vba contourne le waitIE et le WaitDoc
    En effet lorsque je vais sur la page 1° du site web (avec waiIE et WaitDoc) il y a bien chargement de celle ci avec 4 ou 5 table dedans...
    Ensuite l'une de ces tables est interactive, elle posséde un select avec liste déroulante, donc aprés choix d'un select j'utilise pour charger le tableau une commande onchange mais la en fait la page ne se recharge pas c'est juste la table à l'intérieur de la page web qui change donc apparemment vba va plus vite que le chargement du tableau mais comme waitIe et WaitDoc déjà existants, l'arrêt pour l'attente du téléchargement du tableau ne se fait pas et cela bug par la suite
    voici pour info la page web:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IE.Navigate "http://www.nasdaq.com/symbol/f/historical"
    choix de la durée
    htmlSelectElem.Value = duree

    puis l'activation du select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IEDoc.all("ddlTimeFrame").onchange
     
    'ici remis en plus cette ligne pour essayer 
    Set IEDoc = Nothing
    le code pour réactualiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WaitIE IE
    Set IEDoc = IE.document
    WaitDoc IEDoc
    puis identification des tables avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set htmlTagCol = IEDoc.getElementsByTagName("table")
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim htmlTagCol As IHTMLElementCollection
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbreTable = htmlTagCol.Length
    une petite boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i=0 to nbretable-1
    'la table n°3 item(2) est celle qui contient les data souhaitées (mais parfois suivant les jours il y a 4 ou 5 tables présentes en fonction de la pub...)
    avec une condition pour trouver la bonne table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strg1 = Mid$(mot, l, 4)
    If strg1 <> "Date" Then GoTo s1
    si ne va pas en s1
    k=i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'puis affection de la bonne table ici à generic1 
    Set generic1 = htmlTagCol.Item(k) 'avec donc k=2
    et pour être sûr de ne pas provoquer d'erreur définit soit 
    'Dim generic1 As HTMLGenericElement
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Dim generic1 As Variant
    Si point d'arrêt sur set generic 1 tout va bien, generic1 a le temps de se charger...

    Mais si ici pas un point d'arrêt sur ce set generic

    alors le résultat obtenu est

    nbretable1 = generic1.all.Length = 479 le nbre de ligne d'origine avant le onchange de la table n°3...
    et generic1.all.length dans variable locale lui = 0 !!! et generic1 n'est pas = à nothing, mais il est vide

    Avez vous une idée svp? faut il réinitialiser avec ie.quit? iedoc.quit? iedoc.recalc? pour le moment rien ne marche hormis le point d'arrêt sur generic1...
    merci de votre aide...

    pour info si mise d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sleep 3000 'pour attendre 3 secondes par ex aprés le onchange cela permet bien à generic1 de se charger correctement...
    mais ce n'est pas la bonne méthode...

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    alain tech a apporté une solution plus que satisfesante dans la discution de qwazerty en ce qui concerne le probleme du ie.readystate

    en fait comme vous l'avais remarqué ,meme si le readystate est bon ca plante en fonction de la vitesse du debit que vous avez

    en fait le readystate sur l'object ie n'est pas suffisant
    il faut utiliser aussi le readystate sur le ie.doc

    un merci a alain tech au passage
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    Oui tout à fait d'accord Alain a apporté une réponse parfaite et aussi tout à fait d'accord avec ce qui est dit précédemment, mais apparemment ici il y a une astuce...car ce n'est pas la page web qui est rechargée mais juste une partie de celle ci ( à savoir la table= le tableau contenant les données) donc aprés le onchange waitIE et waitDoc ne sont pas relancés ou pas modifiés (donc vba passe sans s'arrêter ce qui ensuite provoque l'erreur) car la pageweb n'a pas changé, mais seulement une sous partie table de cette page web...et ca pour le moment je ne sais pas comment le détecter et attendre la fin du chargement de cette table.
    Pour le moment une astuce bancale en mettant un sleep 3000 fait s'arrêter vba pour permettre le chargement de la table...

    voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IEDoc.all("ddlTimeFrame").onchange
     
    WaitIE IE 
    Set IEDoc = IE.document 
    WaitDoc IEDoc 
    'non ne marche pas
    mais en mettant juste à la place
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IEDoc.all("ddlTimeFrame").onchange
    sleep 3000
    'marche mais bon c'est aléaoire car si par hasard il faut >3 secondes avec une mauvaise connection ca ne va plus aller
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Si quelqu'un peut m'aider merci

    autant je vais essayer un ready_state sur le htmltagcol...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set htmlTagCol = IEDoc.getElementsByTagName("table")
    waittagcol htmlTagCol
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub waittagcol(htmlCol As IHTMLElementCollection)
        Do While Not htmlCol.readyState = "complete" ' ici se produit l’erreur 438
        DoEvents
        Loop
    End Sub
    non ca ne marche pas il y a un message d’erreur :
    Voici le message : erreur d’exécution ‘438’
    Propriété ou méthode non gérée par cet objet

    donc pour le moment pas moyen de savoir quand la table a fini de se charger pour pouvoir continuer la suite...

    merci pour votre aide...

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    j'avoue ne pas comprendre la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set htmlTagCol = IEDoc.getElementsByTagName("table")
    est quasiment instantané si la page est bien chargée
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    Aprés le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IEDoc.all("ddlTimeFrame").onchange
    il n'y a pas d'erreur sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set htmlTagCol = IEDoc.getElementsByTagName("table") 
    nbreTable = htmlTagCol.Length
       MsgBox ("nombre de table de htmltagcol = " & nbreTable)
    mais plus bas:
    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
    For i = 0 To nbreTable - 1
      mot = htmlTagCol.Item(i).innerText
    l = InStr(mot, "D") 'recherche le 1° D dasn la string pour Date
      If l = 0 Then GoTo s1 's'il n'y a pas de D dans la string il n'y a pas date donc ce n'est pas la bonne string
      strg1 = Mid$(mot, l, 4)
      If strg1 <> "Date" Then GoTo s1 
    ' si date est trouvée  c'est ok, va en s5 pour la suite
    k = i 'ou directement garder i en allant dans set tabledata...
      ag = True
      GoTo s5
     
    s1:
      Next i
      'ici ag sert de controleur pour l'identification de mot...
      If ag = False Then
      intrep = MsgBox("Erreur échec de l'identification avec mot, stop obligatoire", vbYesNo, "arrêt obligatoire")
      If intrep = vbYes Then Exit Sub
      End If
     
    s5:
    Set generic1 = htmlTagCol.Item(k) 'pour récupérer les donneées de la bonne table
    nbretable1 = generic1.all.Length 
    MsgBox ("nombre de table de generic1 = " & nbretable1) 'l'erreur avec F5 vient bien d'ici car nbretable1 = nbretable de htmltagcol.item(k) mais
       'du téléchargement d'origine par défaut soit les 3 months... nbretable=479 et cela même si normalement nbretable1=1781 ou autre et même si generic1.all.length =0 !!!ensuite et generic1.all =0
       'en fait generic1 n'a pas la temps de se charger complétement...il faut trouver un moyen de ralentir ici pour que generic1 soit bien chargé...
    donc le seul moyen pour le moment et de mettre aprés le onchange et pour que la table se charge si elle est longue un sleep...
    mais s'il n'y a pas un sleep x secondes (ici 3 secondes) aprés le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IEDoc.all("ddlTimeFrame").onchange
    alors nbretable1 n'est pas la bonne valeur...

    Est ce que je t'ai bien expliqué?

    merci de ton aide car j'avoue je séche pour le moment...

  6. #6
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    Est ce que quelqu'un peut m'expliquer pourquoi IEDoc ne donne pas le bon résultat? est ce un probléme de durée de téléchargement avec la connection wifi?(et si oui comment le résoudre?)
    Voici les dim:
    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
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
     
    Dim nbreanchor As Integer
     
    voici le code:
    Sub euronextrecuptable()
     
       'Ouvre la page Web
       IE.Navigate "https://europeanequities.nyx.com/en/products/equities/FR0000120073-XPAR/quotes" 'ici
       'fFR0000120073 pour Air Liquide 
       IE.Visible = True 
       WaitIE IE
       Set IEDoc = IE.document
       WaitDoc IEDoc
     
    nbreanchor = IEDoc.anchors.Length 'nbreanchor = nbre d'anchors contenus dans la page web (c'est à dire dans
       'IEDOC + anchor
       MsgBox ("Nombre d'anchor = " & nbreanchor & " nombre avec IEDoc.anchors.length =" & IEDoc.anchors.Length)
       'pourquoi ici parfois nombre d'anchor =25 avec IEDoc.anchors.Length =25 alors qu'en réalité
       'IEdoc.anchors.Length=23 ce qui va être le cas quasi instantanément juste aprés mais en attendant pose une
       'erreur?
     
      IE.Quit  
       Set IE = Nothing
       Set IEDoc = Nothing
     
    End Sub
     
    et avec 
    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 WaitDoc(doc As HTMLDocument)
      Do While Not doc.readyState = "complete"
        DoEvents
      Loop
    End Sub
    Merci pour votre aide et meilleurs voeux

    en fait l'erreur vient du temps de chargement d'un frame qui n'est pas détecté par Waitie et Waitdoc...
    Si quelqu'un à une idée pour détecter la fin du chargement d'un frame merci.

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Voici ce que j'ai pu retrouver dans mes archives:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      Dim objFrame As HTMLIFrame
     
        Set objDoc = objIE.document
        Do While Not objDoc.readyState = "complete"
          DoEvents
        Loop
     
        Set objFrame = objDoc.getElementsByName("page")(0)
        Do While Not objFrame.readyState = "complete"
          DoEvents
        Loop
    Dans mon cas, la frame avait pour nom "page".
    Un objet Frame a une propriété readyState comme un Document.

    Bonne chance
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  8. #8
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut objIE.Document
    Bonjour,

    Merci mais pour le moment ça bloque toujours...
    il faut déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ObjDoc As HTMLDocument
    de la même façon que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim IEDoc As HTMLDocument
    puis ensuite ObjDoc va aller chercher les propriétés objet de IE.Document c'est bien ça?

    Seulement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ObjDoc = objIE.document
    n'est pas reconnu...je n'ai pas du comprendre le sens de objIE.document car je n'arrive pas à le modifier autrement qu'en le remplaçant par IE.Document...

    ensuite l'élément qui contient la table des données historique est un div...
    <div id="left-column-div">

    Et la table des données fait partie d’un sous div
    Est il possible de faire un readystate sur un div?

    Merci de ton aide

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    si tu veux je te propose ceci:

    met ca dans un nouveau classeur et dans un module standard

    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
    Option Base 1
     Dim URL As String, Lapage_en_HTML
     Dim tablo As Variant
     Function GetSourceCode(sURL, Optional au_format_text As Boolean = "false") As String
        Set Lapage_en_HTML = CreateObject("Microsoft.XMLHTTP")    'instancie l'object
        Lapage_en_HTML.Open "GET", sURL    'ouvre l'url dans l'object
        Lapage_en_HTML.Send
        Do: DoEvents: Loop While Lapage_en_HTML.ReadyState <> 4    'attendre que la page soit chargée
        'exemple de code source End of placement</td><td>03/31/2011
        GetSourceCode = Lapage_en_HTML.responseText
    End Function
    Sub recup_table()
    URL = "http://www.nasdaq.com/symbol/f/historical"
    tablevide
    Dim entete(1, 6), grille
    Dim tablogrille(1000, 6)
    tablo = Split(GetSourceCode(URL), "class=""table-headtag"">")(1)
    grille = Split(tablo, "</thead>")(1): grille = Split(grille, "</tbody>")(0): grille = Split(grille, "<tr>")
     
    tabloentete = Split(tablo, "<tbody>")(0): tabloentete = Split(tabloentete, "<th>")
    For i = 1 To UBound(tabloentete)
    entete(1, i) = Replace(Replace(Split(tabloentete(i), "<")(0), " ", ""), Chr(10), "")
    Next
     
    For i = 1 To UBound(grille)
    'ReDim Preserve tablogrille(1 To i, 1 To 6)
    tablogrille(i, 1) = Replace(Replace(Split(Split(grille(i), Chr(10))(3), "<")(0), Chr(10), ""), "                                                ", "")
    tablogrille(i, 2) = Replace(Replace(Split(Split(grille(i), "<td>")(2), Chr(10))(1), "                                                ", ""), "&nbsp;", "")
    tablogrille(i, 3) = Replace(Replace(Split(Split(grille(i), "<td>")(3), Chr(10))(1), "                                                ", ""), "&nbsp;", "")
    tablogrille(i, 4) = Replace(Replace(Split(Split(grille(i), "<td>")(4), Chr(10))(1), "                                                ", ""), "&nbsp;", "")
    tablogrille(i, 5) = Replace(Replace(Split(Split(grille(i), "<td>")(5), Chr(10))(1), "                                                ", ""), "&nbsp;", "")
    tablogrille(i, 6) = Replace(Replace(Split(Split(grille(i), "<td>")(6), Chr(10))(1), "                                                ", ""), "&nbsp;", "")
    Next
    [A2].Resize(1, 6) = entete
    [A3].Resize(1000, 6) = tablogrille
    End Sub
     
    Sub tablevide()
     Columns("A:H") = ""
    End Sub
    la grille sur trois mois i je ne me trompe pas
    c'est quasi instantané
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut
    Bonjour a vous 2,

    Merci tests en cours

    Sur 3 mois c'est en effet instantané car c'est l'option par défaut de la "frame/ table des données" de la page.

    Le temps d'approfondir ObjIE...et le code posté...ça devrait progresser

  11. #11
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut Initialiser ObjIE
    Bonjour,

    Comment initialise t'on ObjIE?

    Si j'ai bien compris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim IE As New InternetExplorer
    Dim ObjIE As New InternetExplorer
    'ObjIE est comme IE, c'est une 2° "type/application" pour surveiller une 2° page internet

    puis ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim IEDoc As HTMLDocument
    Dim ObjDoc As HTMLDocument
    Dim ObjFrame As HTMLIFrame
    ' ObjFrame pour vérifier chargement de la frame
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IE.Navigate "http://www.nasdaq.com/symbol/f/historical"
    'IE est ainsi initialisé...
    puis déroulement du code jusqu'à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IEDoc.all("ddlTimeFrame").onchange
    'pour sélectionner et valider la durée de téléchargement

    c'est ici que le sleep doit être remplacé par le ObjIE...
    seulement comment initialiser ObjIE?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjIE.navigate 'mais quoi mettre ici comme nom, comment appeler la frame ou la nouvelle page?"
    Merci de l'aide, et du temps passé

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    si j'ai bien compris tu initialise 2 variable pour 2 objet IE

    hors tu parle de frame

    c'est peut être la ton erreur enfin si j'ai bien compris
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut Code téléchargement analyse
    Bonjour,

    Tout d'abord merci pour ton code en cours de test:
    Peux tu regarder le point suivant sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Do: DoEvents: Loop While Lapage_en_HTML.readyState <> 4
    ...stp:
    Dans la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function GetSourceCode(sURL, Optional au_format_text As Boolean = "false") As String
    il semblerait que
    si travail hors connexion ou en étant connecté:
    - : Lapage_en_HTML : : Variant/Object/IXMLHTTPRequest
    a : readyState : 0 : Long (avant Lapage_en_HTML.Open "GET", sURL
    puis : readyState : 1 : Long (après F8 sur Lapage_en_HTML.Open "GET", sURL
    et : readyState : 1 : Long (après F8 sur Lapage_en_HTML.send
    et : readyState : 4 : Long après F8 sur le Do
    si travail hors connexion...
    attention même si aucune connexion Lapage_en_HTML.readyState <> 4 est vrai après F8 sur le Do

    étude de la suite en cours...

  14. #14
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut initialiser ObjIE
    Bonjour,

    En fait après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IEDoc.all("ddlTimeFrame").onchange
    avec par exemple sélection 10 years cela provoque un chargement du tableau des données historiques...actuellement pour attendre la fin du chargement de ce tableau il faut soit mettre un sleep 10 000 (10 secondes) ou même plus sûr un point d'arrêt car IEwait et IEdoc ne détecte pas la fin du chargement car il se fait sur un frame (semble t'il) et non sur une nouvelle page web...
    Donc l'objectif est de détecter la fin du téléchargement pour passer à la suite...

    il semblerait que ce téléchargement se réalise avec une frame d'où l'idée de mettre un ObjIE (tout comme IE) pour ensuite y repérer la frame et la fin de son chargement.

    Enfin sous réserve que j'ai bien compris la démarche à suivre...
    seulement je ne sais pas repérer la frame ou initialiser ObjIE pour qu'il la repère...

    Pour info une autre solution de téléchargement consiste à cliquer sur le download en bas mais je ne sais pas valider la pop up qui s'affiche à l'écran en cliquant sur son bouton (c'est la question posée sur l'autre discussion)
    bonne journée

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    Bon comme je vois que ca n'avance pas
    je me suis intéressé a ton soucis
    bien que dans ce cas j'utiliserais ma méthode et pas l'objet IE
    j'ai essayer quand même de le faire avec l'objet IE

    alors le problème pour toi vient de la gestion du temps de travaille de mise a jour de ta page

    du coup tu te retrouve toujours avec ton tableau de trois mois même avec le onchange de la combobox

    alors il m'est venu une idée hyper simplicime

    quand on lance la macro en changeant la duré on s'attend a avoir une liste forcement plus grande que c'elle de trois mois

    et bien servons nous de ca TOUT SIMPLEMENT

    pour ma part je me suis contenté de rechercher les tout (tr)
    chaque tr correspondant a une ligne de la grille

    donc une simple boucle do loop avec la condition du nombre de tr résout le problème
    et voila c'est magique
    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
    48
    49
    50
    51
    52
    53
     
    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 recherche_les_tr()
        Dim IE As New InternetExplorer
        Dim IEDoc As HTMLDocument
        Dim htmlTagCol As IHTMLElementCollection
        Dim Generic As HTMLGenericElement
        Dim tablo(1500, 20)
        [A3:F1000] = ""
     
        'Ouvre la page Web
        IE.Navigate "http://www.nasdaq.com/symbol/f/historical"
        IE.Visible = True
        WaitIE IE
        Set IEDoc = IE.document
        Set htmlSelectElem = IEDoc.all("ddlTimeFrame")
        htmlSelectElem.Value = "3y"    ' on choisi 3ans
        IEDoc.all("ddlTimeFrame").onchange    'on applique le changement
     
        'On attend le chargement complet de la page apres le changement de la combobox de chois de la durrée
        WaitIE IE
     
        '***************************************************************************
       ' le boucle qui resout le probleme !!!!!!!!!!
        Do
            Set htmlTagCol = IEDoc.getElementsByTagName("tr")
            DoEvents
        Loop Until htmlTagCol.Length > 100
    '*******************************************************************************
         For i = 3 To htmlTagCol.Length - 2
            derlig = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row + 1
     
            For e = 0 To 5
                On Error Resume Next
                tablo(i - 2, e + 1) = htmlTagCol(i).Children(e).innerText
                On Error GoTo 0
            Next
     
        Next
        [A3].Resize(UBound(tablo), 20) = tablo
        IE.Quit
        Set IE = Nothing
        Set IEDoc = Nothing
    End Sub
    et la marmotte elle met le chocolat dans le papier alu

    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    tiens juste pour le fun

    récupère le fichier et essaie le
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #17
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut OK
    Bonjour,

    Ok merci pour tout, je regarde ta méthode et aussi ta solution avec IE, tout tes codes et te tiens au courant de l'évolution...l'idée de compter les tr c'est bon ca
    Bon WE

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour itwoo

    pour te faire économiser du temps je peut déjà te dire d'éliminer la solution avec l'objet getcodesource il ne te récupère que ce qui est fixe dans la page


    et ta page se met a jour en fonction de la combobox

    c'est pour cela que je te l'ai fait avec l'object IE
    a tu récupérer le fichier ?car je ne les laisse jamais longtemps j'ai besoins de place pour mes contributions
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  19. #19
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour,

    oui fichier récupéré, étude en cours, noté pour le getcodesource (c'est surement pour ca recherche de la frame...), etude IE ok en cours aussi
    Merci pour tout je te tiens au courant de l'évolution dés que bien avancé...
    Au plaisir

  20. #20
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut Merci
    Bonjour,

    Merci Patrick aprés test une légére modif pour adapter ton code ca marche
    Et en plus c'est beaucoup plus rapide, bravo

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 17 1234511 ... DernièreDernière

Discussions similaires

  1. Réponses: 193
    Dernier message: 13/12/2014, 07h48
  2. [XL-2010] Pilotage Internet explorer contenant javascript depuis excel
    Par anthony14123 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/12/2013, 15h08
  3. [XL-2003] Pilotage Internet Explorer
    Par clarinet dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 25/03/2013, 19h13
  4. Pilotage Internet Explorer
    Par bolof dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/09/2012, 21h25
  5. [OLE] Pilotage internet explorer
    Par yaclo dans le forum MFC
    Réponses: 4
    Dernier message: 22/03/2005, 20h03

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