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

Contribuez Discussion :

[Pilotage Internet Explorer] Comment attendre la mise à jour d'un élément d'une page web …


Sujet :

Contribuez

  1. #21
    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,

    Tu as pu faire le test avec timer>60? donc tu la détectes? elle est trés vicieuse (ici un cas d'erreur fréquent table vide car la valeur ne cote pas en ce moment suspension de cotation ou autre!!! donc IE va plus vite que VBA de même si beaucoup de ligne de code entre le onchange et la condition ca plante souvent)
    Sinon l'erreur se produisait ici dans 1-2% des cas, surtout lors de lancement en grand nombre à la suite par exemple >100 fichiers là tu commences à avoir des erreurs, peut être car VBA déjà sur le fichier suivant alors que IE lui non et donc .length=true alors que c'est faux!!!, mais par contre abandon de la résolution car Qwaz et ses requêtes ont trouvé d'autre solution...bien plus efficace dans ce cas là, mais par contre c'est noté ton astuce si pas possible lancer requête ou autre.

    A bientôt

  2. #22
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Citation Envoyé par itwoo Voir le message
    Est ce que tu as fait le test? est ce que tu la détectes ?
    Je n'ai pas besoin car évidemment j'arriverai bien à planter la boucle avec une pause juste avant
    ou juste avec un point d'arrêt !
    Mais le but du jeu étant de détecter quand la table est modifiée, autant éviter …

    Avec une connexion fibre optique (ping entre 1 et 5ms), la boucle prend environ dix secondes
    pour la cotation f et la procédure a besoin en tout de 15 (IE11) à 23 secondes (moyenne IE9).
    Pour la valeur abbv la boucle prend 2s, la procédure 11.5s (IE9).

    Est-ce plus rapide de ton côté ?
    Si tu rencontres le problème avec d'autres codes, merci de me les indiquer …

    Car jusqu'à présent, malgré des dizaines et des dizaines de tests, je n'ai jamais rencontré de souci …
    Sans compter la personne pour laquelle j'ai monté ce type de boucle en lieu et place d'une temporisation,
    avant cette contribution, l'utilisant quasi quotidiennement et ne m'a jamais fait part d'un tel problème …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #23
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Allez, ce coup-ci c'est la bonne !

    Même si cela n'est jamais arrivé ni à moi ni à ceux auxquels j'ai fourni cette méthode (pour une dizaine de sites différents),
    dans la procédure de test ci-dessous je force la mise à jour de la table avant la boucle de la ligne n°14
    par le biais d'une pause de 5 / 6 secondes (ligne n°13) sachant de mon côté le code abbv en a besoin d'à peine 2.
    Un bip indique le lancement de la mise à jour de la table juste avant cette pause.
    En fin de procédure, le temps de la boucle est affiché : zéro si la table est déjà à jour avant la boucle,
    sinon augmenter la pause en ligne n°13 …

    " L'astuce " consiste toujours à verrouiller l'objet (via une variable en ligne n°11)
    mais avant de lancer la mise à jour (ligne n°12), encore le respect de la logique de la programmation objet …

    itwoo, Patrick, d'avance merci de vos retours :
    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
    Sub TestNASDAQ()
        Const URL$ = "http://www.nasdaq.com/symbol/abbv/historical"
        Dim oTAll As Object
     
        With CreateObject("InternetExplorer.Application")
            .Navigate URL
            While .Busy Or .ReadyState < 4:  DoEvents:  Wend
     
            With .Document
                If InStr(.body.innerHTML, URL) Then
                    Set oTAll = .GetElementsByTagName("TABLE")(2).all:  Beep
                    With .all("ddlTimeFrame"):  .Value = "10y":  .onchange:  End With
                                    Application.Wait Now + #12:00:06 AM#:   F! = Timer
                    While oTAll.Length:  DoEvents:  Wend
                    F = Timer - F   ': T$ = .GetElementsByTagName("TABLE")(2).outerHTML
                End If
            End With
     
            .Quit
        End With
     
        MsgBox "Boucle : " & Format$(F, "0.000s"), vbInformation, Space$(13) & "NASDAQ"
        End
    End Sub
    _________________________________________________________________________________________________
    Un problème sans solution est un problème mal posé. (Albert Einstein)
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #24
    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
    bonsoir marc

    je n'ai pas trop suivi les 4 dernières réponse mais en attendant une image parle mieux que les mots
    Pièce jointe 153290

    PS: je voudrais savoir si depuis il y a eu un retour négatif avec ma dernière version 1.0.2 de all equities si itwoo repasse par la

    marc: en effet comme itwoo la dit ca peut être une alternative au cas ou une requête nécessitant des arguments ne soit pas possible

    mais a utiliser en développeur averti ayant une bonne base sur la manipulation de la librairie IE
    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. #25
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Merci Patrick !

    Boucle = 0s donc cela marche, pas de boucle sans fin !

    De mon côté avec la contribution d'origine, il faut moins de 4 millièmes de seconde
    entre le lancement de la mise à jour et le début de la boucle d'attente, donc jamais eu de souci …

    Mais c'est vrai verrouiller l'objet avant la mise à jour doit permettre d'éviter votre souci.
    J'attends le retour d'itwoo avant de proposer une version 2 de la contribution …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  6. #26
    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,

    Hier et ce matin fait tests intensifs sur nasdaq et euronext historique (plus de 6heures) en version Qwaz...Aucune erreur et trés rapide. Donc pour le moment (pas encore testé de manière intensive euronext all equities v1.0.2) ce qui a été fait me semble marcher à 100% dans ce format là. Par contre en version non Qwaz, il y avais toujours des erreurs 1-2% (version non retesté aujourd'hui) et en plus c'était bien plus long...
    En revanche je n'ai pas d'autre code à faire tester (notamment ou l'erreur se produit) pour le moment...Merci de ta/vos propositions et aides...cela sera bien utile et l'a déjà été

    Marc dès que possible (surement d'ici mi-fin de semaine) je reviens vers toi pour le reste...et toutes les questions/réponses (pas encore lu les derniers posts ni commentaires) .

    Patrick merci pour tout (tu sais comme d'habitude je suis en retard) ta dernière version+modif marc tip top mais besoin de tester tout ca...

    Juste pour info VBA peut il lancer Firefox à la place de IE? Et si oui comment?


    Bon dimanche

  7. #27
    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 tout les deux

    une question c'est quoi la version qwaz?je l'ai pas vu moi

    marc: il serait intéressant de faire un essai avec vbs avec la librairie ie et ton astuce sur le length

    pour le moment je suis en plein dans la base de registre j'ai un peu déserté VBA mais je ferais un exemple comme j'ai un toute nouvelle installation je doit tout refaire comme avant je n'ai pas eu la possibilité de sauvegarder
    le seul fichier que j'ai pu récupérer c'est un fichier log de speed fan dans le quel il est dit que mon procc est monter a 102°
    il a fait chaud chez nous j'ai pu garder que la boite de l'ordi

    je suis donc avec un environnement Windows 7 tout ce qui est de plus d'origine bref bidon quoi donc je refait petit a petit toute mes astuces
    mais j'ai excel je peut déjà travailler un peu c'est pas si mal et en plus le nouveau moteur est plus puissant
    avec le gamer c'était pas trop concluant car ca allait trop vite il est pas fait pour ce genre de travail
    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

  8. #28
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Citation Envoyé par itwoo Voir le message
    Juste pour info VBA peut il lancer Firefox à la place de IE? Et si oui comment?
    Directement, apparemment non mais c'est possible via un webdriver wrapper comme Selenium-VBA v2.
    Sa première version ne m'a pas trop convaincu (pour mes besoins de l'époque)
    mais depuis cette nouvelle version (pas testée) j'ai lu d’excellents retours sur divers forums …
    (Les versions d'installation depuis au moins la 1.0.5 contiennent Selenium v2 …)

    Il peut piloter les quatre principaux navigateurs - Chrome, Firefox, IE (32 & 64 bits) & Safari - et dispose aussi
    d'un mode Phantom et je crois bien d'un module pour Firefox générateur de macros VBA !

    Je pensais à en faire une contribution mais pas encore eu le temps de l'explorer …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #29
    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
    oui il parait que la dernière version va déjà mieux mais ca reste assez rudimentaire
    enfin voila ce que j'ai trouvé ici et je me suis permis de te faire un pdf de la page traduite en Français attention les codes ont été traduit aussi alors prend celui du lien c'est mieux
    Images attachées Images attachées
    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. #30
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut





    Je pense plutôt utiliser le module PhantomJS seul …


    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #31
    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
    je connaissais pas je vais regarder ca
    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

  12. #32
    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
    ca a l'air coton quand même!
    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. #33
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    En préparant hier une version 2 de cette contribution, j'aurais pu croire enfin tomber sur votre souci !

    Après environ quarante secondes d'attente je perds patience, je retourne dans le VBE et pause la procédure :
    en plein dans cette fameuse boucle d'attente ! « Victoire ! » crieriez-vous ! Et non, que nenni !

    La modification effectuée dans le code concernant l'affichage final de la table, aucun rapport avec cette boucle !
    Pensais-je encore à un conflit inter-applications … Bref, je relance la procédure et,
    à peine de retour dans la feuille, la table finit par s'afficher !

    Je place alors un mouchard dans la procédure affichant une nouvelle étape dans la barre d'état
    juste avant la boucle d'attente et j'exécute de nouveau la procédure : toujours pas de mouchard après 30 secondes !

    C'est le site qui ramait donc et c'est la boucle juste après le Navigate qui tournait, tournait …
    En fait la première fois le temps d'ouvrir le VBE, la page a fini par se charger passant alors la main
    à la boucle d'attente de la mise à jour de la table …
    Même problème de lenteur (un peu moins mais bien plus qu'en temps normal) constaté avec une procédure de requête …

    J'ai donc prévu un timeout dans la navigation primale de la page et, si le site rame, autant ne pas continuer la procédure !

    Dans le cas du traitement d'une page normale d'une cotation, je n'ai toujours pas eu de souci …

    Dans les fameux 1 - 2% évoqués par itwoo, j'entrevois plutôt un manque de contrôles
    comme par exemple une page erronée, une cotation sans table ou tout autre souci hors cadre normal.

    A suivre après le retour d'itwoo …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  14. #34
    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,

    Patrick la version Qwaz c'est simplement la requête proposée par Qwaz, interrogation du serveur directement avec post ou get, et non pas comme ici avec pasage par IE...

    Si par Firefox c'est compliqué alors ca va être difficile de contourner IE...

    Sinon fait
    1° test sur le temps chargement comme indiqué en mettant le code avec ajout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    debut = Time
    With CreateObject("InternetExplorer.Application")
    et en fin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .Quit
        End With
     
       MsgBox "la requete a demaré a : " & debut & " et a terminé a : " & Time & vbCrLf & "elle aura donc duré : " & _
       Format(Time - debut, "nn:ss") & " secondes"
        Application.StatusBar = False:  End
    End Sub
    aujourd'hui temps : 8 pour abbv et 23 secondes pour f (ce temps est variable cela va vous faire rire mais il pleut donc la wifi rame aujourd'hui!!!)

    2° test avec la boucle timeout dans ta version 1:
    temps de chargement de la boucle 1.8 s pour abbv et 13.5 pour f...
    Seulement ici Marc peux tu m'expliquer ton raisonnement et si j'ai bien compris:
    tu as mis un rupteur de boucle do while .Lenght par le If Timer > F si jamais boucle infinie alors sort aprés 20 secondes et affichage de Timeout...la ok
    Mais par contre qu'est ce que c'est que cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Timer < D Then F = F - 86400: D = 0
    'comment est ce possible???

    la où cela bloque c'est si la table a chargé plus vite sous IE que VBA n'a eu le temps d'arriver donc il faut relever le temps aprés que la table soit chargée sous IE (mais comment le relever???peut être en vérifiant le gif animé?) et relever le temps que met vba pour arriver à la fin de la boucle do while .Length...

    Ok étude de la version 2 d'ici fin semaine...

    Marc pour info au départ j'avais mis beaucoup de code entre le onchange et la lecture de la boucle getelement...par VBA...plantage quasi sytématique...
    Ensuite l'erreur est apparue réguliérement lorsque par ex sur euronext il fallait charger plein de pages...en boucle parfois ca marchait parfois non...
    As tu récupéré ce vieux code sur l'autre post pour tester?
    Mais par contre cela ne venait pas du site mais de la conception du code VBA...surtout que depuis version Qwaz plus aucun probléme.pour la suite (peut être peux tu tester ta boucle en chargeant 10y puis automatiquement derriére les autres durées 5y...1day et recommencer ainsi de suite)
    Attention cependant l'architecture de notre code n'était peut être pas construit exactement comme le tien à savoir sur la condition de ta boucle do while . length =>pour ne pas boucler à l'infini la condition était peut être basée sur une négation c'était peut être do while not length =0 ...car en cas de boucle infinie il fallait bien continuer...si besoin je peux regarder tout cela car de mémoire je ne sais plus exactement...



    A bientôt

  15. #35
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    De mon côté aussi les temps sont variables : de 5 à 7 secondes pour abbv et de 15 à 23s pour la cotation f

    Tu as bien cerné le raisonnement du code dans le post #18 :
    dans le cas d'une improbable boucle infinie ou plutôt si le site rame, interruption au bout de 20 secondes …


    Citation Envoyé par itwoo
    la où cela bloque c'est si la table a chargé plus vite sous IE que VBA
    Moins de 4 millièmes de seconde séparent le lancement de la mise à jour de la boucle d'attente !
    Je ne vois donc pas comment IE peut être plus rapide pour une page d'un code valide de cotation,
    c'est pour cela malgré tous mes tests (et ceux utilisant la même méthode) je n'ai jamais eu de souci.

    J'entrevois juste un manque de contrôle en amont, indépendant donc de cette méthode,
    comme par exemple une page sans table ou un code invalide …

    Par analogie si dans un code une valeur est divisée par une variable, si cette dernière vaut zéro cela déclenche
    forcément une erreur mais, pour autant, le principe de la division ne peut être remis en question !
    Il manque juste le contrôle préalable de la variable devant être différente de zéro …


    Pour Timer, regarder dans l'aide VBA intégrée son fonctionnement : temps passé depuis minuit …
    Donc oui c'est une possible éventualité car à minuit Timer repasse à zéro !

    Je n'ai pas vu ton code itwoo avec boucle entre plusieurs cotations.
    Je l'ai par contre aussi simulé de mon côté en alternant plusieurs fois les cotations abbv et f,
    pas eu de souci non plus … Évidemment la manière de pointer l'objet est primordiale !
    Sans pouvoir reproduire un cas précis, je persiste pour un mauvais pointage et/ou un manque de contrôle en amont …

    J'attends ton retour itwoo pour le test du post #23 avant de livrer une version 2 agrémentée de contrôles en amont …

    Et au fait, suite à ton commentaire du post #10, je ne pouvais déjà pas éditer la contribution d'origine,
    apparemment depuis la migration récente du site, peut-être une limitation temporelle …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  16. #36
    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 Marc,

    Ok pour ton explication post n°18...
    Par contre tu as vu l'idée de chronométrer entre IE et VBA c'est possible ca?

    Sinon voici pour info le code d'origine (une partie du code pour nasdaq) qui m'a servit pour débuter VBA mais qui devrait te permettre de voir l'erreur/décalage sur nasdaq (qui n'est pas tout à fait la même qu'euronext historique qui charge sur plusieurs pages mais vient toujours du même décalage onchange/boucle )...mais en condition opposé (en négation) par rapport à ton étude (par contre là une n'y a pas de sécurité do while .length loop en amont ou autre, ni d'ailleurs quoique se soit c'était déjà magnifique que cela marche...bien que nasdaq change le nombre de table de la page en fonction des pubs et autres...

    'Ouvre la page Web
    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
    54
    55
     IE.Navigate "http://www.nasdaq.com/symbol/f/historical" 'ici f pour Ford
       IE.Visible = True
       WaitIE IE
       Set IEDoc = IE.document
     
     
        Set htmlSelectElem = IEDoc.all("ddlTimeFrame")
     
       duree = InputBox("Veuillez choisir la durée de téléchargement", "6 mois par défaut", duree)
       htmlSelectElem.Value = duree
     
       IEDoc.all("ddlTimeFrame").onchange 'CA MARCHE...cool
     
     
       Set htmlTagCol = IEDoc.getElementsByTagName("table")
     
      'repérage du n° de la table avec innerText car n° table change suivant les jours!!!
      nbretable = htmlTagCol.Length
      For i = 0 To nbretable - 1
      mot = htmlTagCol.Item(i).innerText
     
      l = InStr(mot, "D") 'recherche le 1° d dasn la string pour Date
      l1 = InStr(mot, "O") 'recherche le 1° o dasn la string pour Open
         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)
      strg2 = Mid(mot, l1, 4)
      'l = Len(mot)
        If strg1 = "Date" Then '1° vérif sur date
           If strg2 = "Open" Then
             k = i
             ag = True
             GoTo s5 '2° verif sur open avant de valider...
     
           End If
        End If
    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:
     
       'On laisse 0.1 secondes (= 100 millisecondes) à l'ordi pour souffler pour éviter une erreur en tabledata...
          Sleep 100 'non cette astuce de ralentissement ne marche pas
          'ICI IL Y A UNE ERREUR SI ON LANCE AVEC F5 ALORS QU'AUCUNE ERREUR AVEC F8...
       Set tabledata = htmlTagCol.Item(k) 'modif du nasdaq...ATTENTION ICI PARFOIS RECONNU PARFOIS NON JE NE SAIS PAS POURQUOI
       'MAIS C'EST UN GROS PROBLEME
       'EN REVANCHE SI POINT D'ARRET DESSUS IL N'Y A PAS D'ERREUR DONC UNE ASTUCE VA CONSISTER PAR EX A METTRE UN SLEEP JUSTE
       'AVANT (A TESTER)
       'Set tabledata = htmlTagCol.Item(2)
       'sélection de la table 3
     nbretable = tabledata.all.Length
    'de mémoire nbretable n'est pas le bon suivant la durée choisit il reste parfois la longueur de 3 mois (celle par défaut)

    Aujourd'hui il fait rire ce code...mais bon c'est vrai que l'erreur avec des vérificateurs bien placés aprés les set... ce serait quand même pas de chance si juste 2-3 pages chargées...

    d'ici fin semaine je regarde ton post 23

    Bonne continuation

  17. #37
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut




    Je ne visualise pas trop ce que tu veux mesurer, n'est-ce pas ce que fait déjà le post #18 ?
    VBA et IE étant liés dans le code …

    En survolant ton code, cela n'a rien à voir avec la méthode de cette contribution
    car il n'y a pas d'attente après le lancement de la mise à jour de la page, je comprends mieux le décalage évoqué !
    A chaque mise à jour d'une page, il faut attendre qu'elle s'accomplisse avant de poursuivre la procédure …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  18. #38
    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,

    Pour le post 18 tu n'as mesuré qu'un des 2 paramétres (je pense que tu as mesuré la vitesse de la boucle avec VBA...mais pas la vitesse de chargement de IE) cela dit comment faire mystére...en repérant le gif animé et son changement de statut block?(seulement mettre du code pour faire cela ralentit VBA...)
    l'erreur se produit simplement si IE (ou une relance de IE plus rapide que VBA)

    l'exemple précédent est sans paramétre de sécurité ce qui montre l'erreur de décalage (mais pas trés clair il est vrai et en plus bien vieux lol

    Sinon une idée voici une tentative convertion de ton code mais je bloque sur la boucle .Length...pour mettre la condition de manière appropriée pourrais tu le faire stp(est ce possible en utilisant les set...ou cela fausse .length?)
    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
    Sub DemoNASDAQie()
        Const URL$ = "http://www.nasdaq.com/symbol/abbv/historical"
        'Const URL$ = "http://www.nasdaq.com/symbol/f/historical"
        Const TXT$ = "        Import en cours "
        Application.StatusBar = TXT & "…"
     
        Set IE = CreateObject("InternetExplorer.Application")
          IE.Navigate URL
            While IE.Busy Or IE.readyState < 4:  DoEvents:  Wend
          IE.Visible = True
     
        Set IEDoc = IE.Document
                If InStr(IEDoc.body.innerHTML, URL) Then
                Set htmlSelectElem = IEDoc.all("ddlTimeFrame")
                htmlSelectElem.Value = "10y"
                IEDoc.all("ddlTimeFrame").onchange
                End If
     
                    Set htmlTagCol = IEDoc.getElementsByTagName("table")
    ICI MARC PEUX TU METTRE TON WHILE... .LENGTH qui pointe sur la table item(2) car le Do Until est faux il pointe sur l'ensemble des tables merci
                    Do Until IEDoc.getElementsByTagName("table").Length <> 0
                    DoEvents
                    Loop
                    Set tabledata = htmlTagCol.Item(2)
                    T$ = tabledata.outerHTML
    C'est sûr qu'il y a peu de chance que IE tourne plus vite que VBA...


    pas encore regardé ton post 23

    A bientôt

  19. #39
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    VBA n'étant qu'un donneur d'ordre, la mesure du post #18 concerne le temps pris par IE uniquement
    pour la mise à jour de la table ! Et entre l'ordre de cette mise à jour et le début de la boucle d'attente,
    j'ai mesuré environ 4 millièmes de seconde (0,004s !) : je suis donc sûr de ma contribution initiale !

    Dans le cas d'une page normale de cotation, IE ne peut donc être plus rapide que le VBA !
    C'est en fait le contraire dans ton code du post #36 car il n'attend pas la fin de la mise à jour …

    Suite au problème du site ramant décrit dans le post #33, j'ai placé dans la version à venir un timeout lors du chargement d'IE
    et j'ai donc dû le mesurer pour définir une marge raisonnable : 5 / 6 secondes pour charger la page initiale, timeout à 9s …

    Pour détecter la mise à jour de la table, il n'y a qu'une méthode et peu importe sans variable objet (contribution)
    ou avec une variable comme dans le post #23, à tester donc …

    Il faut pointer un objet (la table dans cette contribution) sur une de ses collections car après la mise à jour,
    le pointeur devient caduque, le nombre d'éléments de la collection est de facto à zéro !
    L'erreur à ne pas commettre est de repointer l'objet pour lire le nombre d'éléments d'une collection
    car là il n'y a pas d'état possible à zéro …

    J'évite les variables objets pour ne les utiliser qu'une fois : gâchis de temps et de ressources !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  20. #40
    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 Marc,

    Pour ne pas trop te retarder pour la suite:
    Ton post 23 c'est bon ça génial comme vérification en entrée de boucle ca élimine le probléme du nasdaq (test en cours mais la ca tient)...une autre vérification possible au même endroit dans le cas du site nasdaq était de vérifier que la condition sur le gif animé soit toujours à block pour être sûr de ne pas tourner en rond...en gardant ton code initial...
    test en cours je reviens vers toi mais là tu as tout bon sauf surprise et en plus tu expliques comment aller chercher la table(2) pour la controler...
    C'est cool ta façon de faire avec les . plutôt que les set...mais c'est pas toujours facile à suivre...
    Si tu veux plus tard d'ici fin du mois (pas avant je t'envoie euronext historique pour que tu fasses les tests si ta méthode tient mais je pense que oui avec cette vérification en entrée...)
    ok pour la version 2...
    A bientôt et bravo

Discussions similaires

  1. [MySQL] Comment extraire des données dans un fichier .svc depuis une page web
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/12/2013, 12h02
  2. Réponses: 1
    Dernier message: 08/07/2009, 11h52
  3. [XL-2003] Faire mise à jour fichier excel stocké sur une page web
    Par fidecourt dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/04/2009, 17h12
  4. Comment ouvrir Word ou Acrobat Reader à partir d'une page web ?
    Par Kuuei dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 17/05/2006, 15h18
  5. Comment empêcher la mise à jour d'un contrôle à l'écran ?
    Par JojoLaFripouille dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/09/2003, 12h52

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