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. #81
    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 677
    Points
    18 677
    Par défaut



    Le Timeout dans la boucle d'attente de la mise à jour de la table comme dans le post #18
    sert juste à éviter une boucle sans fin mais plus dans le cas où n'est pas ciblée la bonne table.

    Ce n'est plus nécessaire dans la version alternative car il ne pourra y avoir d'erreur de table
    et ce, sans procéder comme dans le post #42 ni y effectuer un contrôle particulier !

    Par contre, au cas où le site rame, un Timeout est prévu dès le chargement initial de la page …

    A noter ce matin, le site a eu un problème pendant moins d'une minute, aucune donnée pour la cotation abbv,
    deux échecs puis tout est rentré dans l'ordre lors de la troisième tentative.
    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)

  2. #82
    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
    re
    bonjour marc
    disons que pour une table avec un nombres de lignes assez important je préfère utiliser une requête par contre si le site bug il faudrait insérer dans la requête un time out par un "application on time now +....." lancer juste avant parce que des que la requête est parti rien sinon bug ne peut l'arrêter on ne peut don pas mettre de doevents il ne servirait a rien moi c'est ce que je fait moi j'envoie un application ontime + 15 secondes sur une sub avec un end (raisonnable pour un requête sur une table de 1000 lignes)je ferais un exemple en rentrant ce soir
    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. #83
    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 677
    Points
    18 677
    Par défaut



    Je vois bien mais si tu le postes, fais-le directement dans la discussion d'itwoo pour éviter un nouveau hors sujet, merci !

    J'ai vu la possibilité de gérer un Timeout interne à une bibliothèque de requêtes mais je n'ai pas encore réussi à l'utiliser;
    voir peut-être avec Stéphane dans la discussion d'itwoo …

    Par contre j'en ai déjà codé un à ma sauce pour un site ramant chaque jour via la fonction Timer
    en utilisant la méthode Open de la requête en mode asynchrone via son troisième paramètre à True !
    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. #84
    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
    Respecter la règle TBTO …au fait qu'est ce que cela signifie TBTO?

    Sinon lors de l'initialisation ou de la réinitialisation de l'élèment son length repasse à 0 pour remise à jour des données de l'élèment mais donc il est par la suite automatiquement et obligatoirement remis à bonne taille? par exemple si son length =15 000 alors son length ne pourra être que 15 000 et non pendant son chargement 9000 (par exemple), puis 12 000 et ce jusqu'à 15 000?

    Le DoEvents en quelque sorte arrête VBA pour laisser le processeur travailler sur les taches en attente donc par exemple laisser le navigateur travailler c'est ca?

  5. #85
    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
    re
    effectivement remettre le 3 Emme paramètre a true et dans la boucle le timer

    je trouvait simplement jolie d'utiliser application on time

    je ferais un essai ce soir en rentrant


    et le rappel c'était juste pour rappeler a itwoo que la solution pour Nasdaq "F" marche de la même manière que "ABBV"

    et c'est bien plus efficace que 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

  6. #86
    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 677
    Points
    18 677
    Par défaut

    itwoo, s'agissant d'un pointeur d'un élément, la propriété length de l'élément reste inexorablement à zéro après la mise à jour.
    Comme tu peux le constater en exécutant le code du post #42 !
    Une fois cette propriété à zéro, signe de la mise à jour terminée, de nouveau pointer sur l'élément pour lire son contenu.
    En suivant ce schéma, pas de donnée erronée possible. D'où l'universalité de cette méthode …

    DoEvents laisse temporairement l'OS exécuter d'autres évènements en attente le cas échéant, permettant ainsi
    de détecter la touche Echap afin de suspendre l'exécution de la procédure VBA ou de l'interrompre via le VBE …
    Plus nécessaire avec IE via un Timeout bien géré mais l'est toujours pour une requête XmlHttp en mode asynchrone !

    Quant à la règle TBTO, c'est juste un p'tit principe ou conseil, on y reviendra après ton retour du post #42 …


    Patrick, j'utilisais déjà les bibliothèques de requêtes bien avant cette contribution, connaissant donc bien leurs avantages !
    Encore une fois, le but de cette contribution n'est pas de comparer IE avec l'utilisation d'une bibliothèque
    mais dans le cas du pilotage d'Internet Explorer comment attendre la mise à jour d'un élément
    sans utiliser par exemple une malheureuse temporisation.
    C'est pour cela je préfère voir tout code se rapportant à une requête directement dans la discussion d'itwoo !

    Comme parfois hélas il n'y a apparemment pas d'autre moyen que d'en passer par le pilotage d'IE
    (ou par manque de savoir faire), d'où l'intérêt de cette contribution pour d'autres,
    répondant à l'interrogation d'itwoo, sa discussion me servant juste d'exemple concret …

    Une requête peut directement être exécutée depuis IE, sans utiliser une bibliothèque externe,
    solution intermédiaire donc mais pas eu le temps de m'y atteler …
    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)

  7. #87
    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 désolé je n'ai pas était clair sur la question précédente qui était de savoir si concernant le nombre d'éléments d'un objet, d'une table...si lorsque VBA arrive dessus il voit directement ce nombre ou si celui ci charge progressivement? (le nombre de colonne, de cellules...ou autre par exemple ici lorsque VBA sort de la boucle While oTAll.length alors oTAll1.length a obligatoirement déjà le bon nombre à savoir 3005 pour ne pas avoir d'erreur?)

    Voici trés légérement modifié ton post #23 pour bien voir les étapes successives avec le pointage objet...mais nous sommes d'accord avec ton vérificateur oTAll tu as résolu le probléme...
    i, j, k mis pour information...

    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
    Sub TestNASDAQ()
    'ici test1 de la version 2 (celle du post #23)
        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")(3).all:  Beep
               i = oTAll.Length  '   : i : 471 : Variant/Long 'le nombre d'éléments de la table par défaut lors
                    'du 1° chargement sur la page web
          With .all("ddlTimeFrame"):  .Value = "10y":  .onchange:  End With
                    j = oTAll.Length '  : j : 471 : Variant/Long ' pour info ici on constate toujours le même nombre d'élements
                    'donc IE n'a pas encore mis à jour la nouvelle table
                   'ici la sortie de boucle While oTAll.length...se fera lorsque j=0 => soit uniquement aprés mise à
                    'jour de la page par IE (soit avant la fin de application.wait soit même aprés si IE traine=>
                    'la ligne Application.Wait est devenue inutile donc si on l'enléve on ne perd plus de temps d'attente ...
                    'tu es d'accord Marc?
                                    Application.Wait Now + #12:00:06 AM#:  F! = Timer
                    k = oTAll.Length '  : k : 0 : Variant/Long 'ici on constate bien la remise à 0 donc IE a fini de
                    'charger la page si IE n'avait pas fini il attendrait la fin de la boucle qui suit : while oTAll.length...
                     While oTAll.Length:  DoEvents:  Wend
                   F = Timer - F    ': F : 0 : Single ': T$ = .GetElementsByTagName("TABLE")(2).outerHTML
                    Set oTAll1 = .GetElementsByTagName("TABLE")(3).all:
                    l = oTAll1.Length '  : l : 3005 : Variant/Long
                    'lautre solution celle de Qwaz faire un contrôle block tant que la page n'est pas chargée
                End If
            End With
     
            .Quit
        End With
     
        MsgBox "Boucle : " & Format$(F, "0.000s"), vbInformation, Space$(13) & "NASDAQ"
        End
    End Sub
    je vais ensuite enfin lire ton post #42 avec intérêt...d'ici fin semaine j'espére le temps de convertir tes . en set car sinon j'ai beaucoup de mal sans variables locales apparentes a suivre!!!

    A bientôt et encore bravo pour le oTAll

  8. #88
    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 677
    Points
    18 677
    Par défaut

    Si un élément est de nouveau pointé en cours de mise à jour, trois possibilités pour la propriété length de ses collections :
    - valeur ancienne;
    - valeur zéro (rare mais possible, la fin de la mise à jour est toute proche);
    - valeur nouvelle.

    D'où l'intérêt évident de surtout ne pas le faire mais de verrouiller l'état de l'élément d'avant mise à jour,
    puis d'attendre la valeur zéro définitive, le pointeur devenu caduque lors de la conclusion de ce processus …

    Tu as anticipé sur le code du post #42 en annotant celui du post #23 !
    Comme la mise à jour de la cotation abbv a besoin d'environ deux secondes,
    le Wait de six secondes sert juste à te prouver que la boucle d'attente postérieure est instantanée
    car évidemment la mise à jour est déjà terminée, CQFD !
    Juste imaginer une page web sans gif animé, sans aucun repère et c'est souvent le cas !

    oTAll résoud rien du tout car son pointage est strictement identique au code d'origine,
    il s'est donc logiquement retrouvé totalement à l'Ouest lors de la modification du nombre de tables !
    Vraiment pas une solution en soit, il faut l'oublier ! C'était juste pour ne pas perdre le pointeur en cours
    du Document et peut-être une vue de l'esprit plus aisée pour toi …

    Comme déjà évoqué, peu importe de pointer avec ou sans variable objet, faut-il encore pointer le bon élément ‼

    Je vais à la Gare de Lyon en métro ou en bus, bref, je vais à la Gare de Lyon !
    Qu'importe le transport, la destination est la même ! Mais il y a un souci si je me retrouve à la Gare Saint Lazare …

    Quant au code du post #42, pas besoin de le modifier, juste consulter le résultat dans la fenêtre Exécution
    car vu tes annotations du code précédent, cela me semble bien acquis !
    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. #89
    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 tous les deux

    Si un élément est de nouveau pointé en cours de mise à jour, trois possibilités pour la propriété length de ses collections :
    - valeur ancienne;
    - valeur zéro (rare mais possible, la fin de la mise à jour est toute proche);
    - valeur nouvelle.
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While oTAll.Length:  DoEvents:  Wend
    rassembles ces trois test sans une seule de ses trois variable possible
    c'est beau!!!
    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. #90
    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 677
    Points
    18 677
    Par défaut

    Dit comme cela Patrick, tu risques de mettre une confusion malheureuse dans l'esprit d'un éventuel lecteur
    parvenu jusqu'ici ! Réduisant à néant tous mes efforts pour vulgariser cette méthode !

    Je me vois obligé d'insister : la ligne While oTAll.Length: DoEvents: Wend utilise un élément déjà verrouillé
    sur une de ses collections renvoyant donc soit la valeur d'avant la mise à jour soit zéro !
    Mais jamais la nouvelle valeur vu son état verrouillé (figé, gelé, …) d'avant mise à jour …

    Pour ceux dans le doute, (re)lire les explications du « Oui … mais non ! » du post #42.
    Dans la ligne n°22 de son code Debug.Print .Length, oTables.Item(oTables.Length - 2).all.Length,
    .Length fait référence à un élément verrouillé comparable à la variable objet oTAll tandis que
    oTables.Item(oTables.Length - 2).all.Length pointe de nouveau sur l'état actuel de l'élément
    et renvoie donc la nouvelle valeur suite à la mise à jour !

    Après avoir dupliqué la ligne n°22 en l'insérant avant la ligne n°23, en déplaçant le : Wend de la ligne n°21
    à la fin de la ligne n°22 vous auriez une chance de voir dans l'avant-dernière ligne du résultat affiché
    dans la fenêtre Exécution la valeur zéro dans la colonne de droite …
    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. #91
    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,

    Mais c'est miraculeux ton CTRL+G et ton debut.print avec un exemple je ne savais pas tout ca mais voilà comment tu t'y retrouves avec les . (merci de nous apprendre tout ca)
    Oui le post #23 annoté empiéte sur le post #42 (désolé mais je l'ai torturé ce post #23 car ta découverte du pointeur oTAll.length : valeur d'origine =>repasse à 0 => valeur d'arrivée directement obligatoire sans temps chargement tip top)
    Oui bien sur que le oTAll ne résoud pas les problémes non prévu amont comme tu le dis si bien type cotation erronée ou changement de table pointé qu'il est inutile mais il est trés démonstratif du probléme...enfin à mon sens ca me permet de m'y retrouver avec les variable locales...pour voir ce qui se passe et d'ailleurs là il faut que je te pose une question ...
    Tout d'abord comme tu le soulignes Il y a un point trés important que tu as réussi à faire c'est utiliser comme condition une condition de remise à jour qui comme tu le répêtes a juste titre est universelle et aussi efficace et rapide (maintenant placée comme cela que le block du gif animé)
    Question: Tu pourras aussi constater qu'entre le post #23 et le post initial ton code est devenu stable...et que dans le post #23 quelque soit l'endroit ou tu mets le point d'arrêt, VBA ne fait plus de boucle infinie (hormis bien sur si changement de table, cotation erronée...come tu le dis indépendant de VBA mais erreur du codeur) car cette fois tu as bien totalement verrouillé le onchange...donc je ne crois pas que le point d'arrêt soit un élément perturbateur de VBA...
    Ceci car en lisant ton post #42 tu as remis le set oTAll aprés le onchange, par sécurité il te faut soit en remettre un avant (soit mettre celui ci avant)qui lui pointe vraiment sur la page d'origine (avec oTAll.length qui pointe sur la page d'origine) et comme ca ta boucle While oTAll.length pointera bien par rapport à l'original et non celui rencontré aprés le onchange) en effet si tu remets un point d'arrêt sur ton set oTAll aprés le onchange alors tu as denouveau créé une boucle infinie sur ta condition...elle se retrouve comme dans le cas du post initial pas sûr à 100% notamment si tu mets beaucoup de code entre le onchange et la boucle d'entrée...tu peux tester avec le point d'arrêt dessus
    enfin me semble t'il et c'est le point de discordance d'erreur possible du départ...es tu d'accord?
    en tous les cas sur mon ordi ca plante denouveau a 100% mis comme cela.
    Comment fais tu pour vider le CTRL+G des ses données stp?

  12. #92
    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 677
    Points
    18 677
    Par défaut

    Salut itwoo ! Au contraire tes annotations du post #23 démontrent bien ton intérêt, cela fait plaisir !

    Théoriquement, je ne suis pas d'accord : quand le sablier apparait, les données d'avant mise à jour sont bien là
    et aussi car je n'ai jamais eu de problème à part le changement de numéro d'ordre de la table ou
    cette semaine la page abbv sans la table lors de deux essais consécutifs,
    plus de souci lors du troisième et ce dans la même minute …
    Du reste le code du post #23 s'est retrouvé entre temps planté malgré oTAll, dû au manque de contrôle en amont !
    C'est comme attendre un avion à Orly alors qu'il atterrit à Roissy ‼
    La version 2 abandonnée n'a pas été plantée grâce à un contrôle …

    Mais comme tu me fais part d'un souci, je voudrais juste savoir si c'est bien avec le code tel quel sans modification ?
    (à part la mise à jour du numéro de la table …) Et est-ce bien avec les cotations abbv et f ?

    A part le n° de la table, comment expliques-tu je n'ai eu aucun souci avec la contribution initiale et ce,
    sur quatre ordinateurs (i3 à i7), connexion fibre optique - Wi-Fi - Windows 7 & 8 - Excel 2003 & 2007 - IE9, 10 & 11 ?!
    A moins que tu ne disposes d'un super ordinateur ou d'une super connexion internet ?!

    Pour moi l'erreur ne vient non pas de la position du pointage (avec ou sans variable objet, peu importe)
    avant ou juste après la demande de mise à jour, 4 millièmes de seconde les séparant …
    Évidemment en insérant une tartine de code entre, mais là ce n'est plus ma contribution !

    Le code du post #42 fonctionne bien (tel quel sans modification)
    pourtant il s'agit de l'historique des cinq derniers jours seulement !

    Avec la variante à suivre, la question ne se pose plus car l'élément est figé avant la mise à jour.
    Je n'ai eu aucune modification à faire malgré le changement de numéro d'ordre de la table,
    non pas grâce à l'élément gelé avant la demande de mise à jour, mais seulement car
    il n'y a pas de possibilité d'erreur sur la table via des contrôles en amont entre autres …
    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)

  13. #93
    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 découverte de tes messages...pas mal ton idée de username pour vérifier developpez...à suivre
    Par contre dans les posts apré le #42 vous semblez avoir le même code mais non car l'un place avant et l'autre aprés le onchange la condition donc l'un n'est pas sécurisé à 100% contre une erreur=> pour cela il suffit de mettre le timer vu au tout du début à 60secondes puis de lancer sur les 2 codes avec le debug.print et bien vous n'aurez pas le même réultat avant et aprés le onchange...il faut mettre la vérif avant le onchange...pour éliminer toute erreur possible enfin je pense (ici énormément de code de boucle en relais des délais super court type 1 seconde pour les mise à jour...) sur Nasdaq 3mois c'est une éternité
    A+

  14. #94
    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 677
    Points
    18 677
    Par défaut

    itwoo, par exemple la ligne n°12 du code de mon post #55 placée juste après la ligne de la demande de mise à jour
    ne pose pas de souci car moins d'un centième de seconde est nécessaire ‼
    Évidemment si cela te rassure, tu peux les inverser … Mais en cas de problème, cela ne changera rien !

    Si la table changeait de nouveau d'ordre dans la collection des tables, le code de Patrick du post #54 bouclerait sans fin …

    Encore une fois, ce n'est pas le fait de pointer la table avant ou juste après la demande de mise à jour qui joue
    mais bien si le bon élément (objet table) est pointé ! (et de quelle manière)

    Si la table est toujours l'avant-dernière de la collection, mon code du post #55 s'en sortira toujours, sinon il sera aux fraises !

    Idem pour le hors sujet avec les abonnements de DVP, le code de Patrick du post #65
    comme les miens du post suivant et du #70 fonctionnent idéalement dans le meilleur du Web
    mais, en cas de souci du site, ils comptent les pâquerettes indéfiniment !
    Tandis qu'en respectant une logique objet comme dans le post #76, aucun risque …
    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)

  15. #95
    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
    lecture en cours des posts ...suis encore loin mais ca se rapproche (vais pas finir aujourd'hui pas le temps désolé)...Merci Marc...lu tes 2 derniers...c'est bien le même code je ne le modifie pas en version test sinon on s'y retrouve plus
    En fait si tu veux pour te montrer voici tes codes et celui du post #23…ils se ressemblent mais celui du post #23 est différent Voilà ce que tu vas faire stp :
    Tu lances les 2 codes joints suivants avec une fois sans point d’arrêt sur le onchange et une fois un point d’arrêt sur le onchange ensuite tu vas voir les nombres dans le CTRL+G (en plus dans version non #23 tu vas boucler en infini si tu mets le point d’arrêt)
    Tu vas voir que dans un cas j joue bien son rôle de rupteur quelque soit la situation=> là on rejoint la méthode Qwaz avec sa roullette à block alors que dans l’autre cas j ne joue que par moment ce rôle suivant les circonstances très rare déjà évoquées…
    Pour info
    CTRL+G donne:
    Si point d’arrêt
    51 51 et pas de sortie en 2° boucle possible ici

    Si pas de point d’arrêt :
    471 471
    0 51


    aprés le onchange tu verras une boucle infinie et pas de sortie de boucle possible alors que si tu fais la même chose mais en ayant placé la même ligne avant le onchange la condition et bien tu ne bloqueras pas...=>le fameux blocage du point d'arrêt qui ne provoque une erreur VBA mais fait planter VBA car code mal ordonné
    alors que dans ce cas (voir post #23 avec i,j,k=> j soit = 471 soit vide=> =0 c'est lui ta sécurité que tu mettes on non des point d'arrêt tu n'as pas de blocage mais par contre la valeur en debug varie si point d'arrêt ou non (la variation indique bien comme tu le soulignes la remise à 0 du pointeur


    Mais il vrai que c'est trés peu probable car VBA va trés vite (c'est surtout pas de chance si l'erreur se produit par exemple si tu as mis une tartine de code... cas IE plus rapide que vba en effet peu probable)
    Donc ton code marche mais par sécurité pour enlever cette petite incertitude je remettrai la ligne avant au moins là tu es tranquille...(plus besoin de supposer que lors du lancement de la roulette d'attente tu as toujours l'ancienne table des datas présente)
    Bien il faudrait aussi supprimer avant le onchange le cas ou oTAll.length =0 si pas de cotation ou page abscente pour éviter une erreur du cette fois à la page web, de même il faudrait aussi mettre comme tu le proposais un timeout en cas de probléme imprévu pour sortir de la boucle au cas ou, il faut aussi d'ailleurs vérifier de la tabla pointée soit bien la bonne celle des data...

    Voici les chiffres sans points d’arrêt pour i,j,k (k à 0 car pas repointé bien sur mais pour bien te montrer la sortie de boucle dans tous les cas):
    471
    471
    0
    Voici les chiffres avec point d’arrêts sur le onchange
    471
    0
    0
    Ici tu vois donc bien que ton rupteur c’est j…ce qui n’est pas le cas chez toi tout le temps
    Au fait peux tu me dire comment vider la fenêtre excécution ouverte avec CTRL+G (faut faire clear ???)toute les datas s'accumulent dedans ...

    PS:c'est normal si mon ordi rame depuis les debug ou CTRL+G ???

    ta version:
    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
     
    Sub TestObjetNASDAQ()
    'ici version3 post # 42
     
        Const URL$ = "http://www.nasdaq.com/symbol/abbv/historical"
        Dim oTables As Object
     
        With CreateObject("InternetExplorer.Application")
            .Navigate URL
            While .Busy Or .ReadyState < 4:  DoEvents:  Wend
     
            With .Document
                If InStr(.body.innerHTML, URL) Then
                    Beep
    With .all("ddlTimeFrame"):  .Value = .all(0).Value:  .onchange:  End With
    'fais des tests avec et sans point d'arrêt pour voir la différence avec l'autre version jointe
                    'dasn le post tu vas comprendre l'écart
                    Set oTables = .GetElementsByTagName("TABLE")
     
                    With oTables.Item(oTables.Length - 2).all
                           D = .Item(2).innerText = "Date"
                        If D Then Debug.Print .Length, oTables.Item(oTables.Length - 2).all.Length
                    'End With
                            While .Length:  DoEvents:  Wend
     
                            Debug.Print .Length, oTables.Item(oTables.Length - 2).all.Length
                     End With
    End If
            End With
     
            .Quit
        End With
        End
    End Sub
    version post #23
    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
    Sub TestObjetNASDAQ()
    'ici version3 post # 23
     
        Const URL$ = "http://www.nasdaq.com/symbol/abbv/historical"
        Dim oTables As Object
     
        With CreateObject("InternetExplorer.Application")
            .Navigate URL
            While .Busy Or .ReadyState < 4:  DoEvents:  Wend
     
            With .Document
                If InStr(.body.innerHTML, URL) Then
                    Beep
                     Z! = Timer:  Set oTAll = .GetElementsByTagName("TABLE")(3).all
                     i = oTAll.Length
                     Debug.Print i
     
                    With .all("ddlTimeFrame"):  .Value = .all(0).Value:  .onchange:  End With
                    'ici que tu mettes un point d'arrêt ou non tu ne boucleras pas car ton vérificateur est j
                    'qui prend soit la valeur initial 471 soit vide=0 alors que chez toi
                    'comme tu boucle un rang trop haut en post #42 dans ton set oTAll j ne joue pas toujours son role
                    j = oTAll.Length
                    Debug.Print j
     
                    While oTAll.Length:  DoEvents:  Wend
                    k = oTAll.Length 'ici tu es bien dans tous les cas sorti de boucle k=0...
                    'ensuite ici si tu veux extraire les datas il te faut repointer bien évidemment
                    'set = oTAll puis k = oTAll.Length
                            Debug.Print k
     
                    Set oTAll = Nothing
                End If
            End With
     
            .Quit
        End With
        End
    End Sub

  16. #96
    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 a tous les deux

    marc ta boucle while fonctionne très bien chez moi et n'a pas une seule fois boguer même quand je lance plusieurs fois d'affilé la procédure complète ce qui n'était pas le cas avant
    effectivement chez moi l'item c'est le 3 au bureau de ma secrétaire c'est 2 bon je pense que c'est a ce niveau qu'il faut travailler
    peut être quand on re pointe la table après la boucle le faire par son id ,name,class tout simplement
    on garderait comme ca la simplicité de ton code plutôt que picorer comme itwoo cherche a faire

    car si j'ai bien compris ta boucle tourne tant que le .length n'est pas modifié sur le nombre de table (en tout cas c'était ton idée de départ )comme juste avant la fin de mise a jour le pointeur devient caduque donc 0
    re pointer la bonne table par son id ,name,classname

    ca reste la meilleur solution a mon gout ,éventuellement un timer si le site est au nord aujourd'hui



    mais attention que Nasdaq ne change pas encore son code source car c'est le cas depuis 5 jours


    tu m'a dit en passant que je pouvais faire ma verif abonnement par requête si tuyaux toi avoir ,toi me donner please please
    gracias
    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. #97
    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 677
    Points
    18 677
    Par défaut

    Itwoo, crois-tu prouver quelque chose en plaçant un point d'arrêt mal-opportun ?‼
    Point déjà abordé dans un précédent message …
    Si besoin d'un point d'arrêt, le placer intelligemment une fois l'élément figé, sur la ligne n°21 par exemple …

    En exécution normale, il y a moins d'un centième de seconde entre la demande de mise à jour et
    le verrouillage de la table, donc pas d'erreur possible et ce dès l'origine de cette contribution !
    Évidemment dans mes sources il n'y a pas une plâtrée de code entre …

    S'il y a une boucle sans fin en exécution autonome, encore une fois cela ne peut pas provenir du verrouillage
    de l'objet juste après la demande de mise à jour car cela arrive même en figeant la table avant !
    Comme expliqué dans le post #42 lors du changement d'index de la table dans la collection …
    L'objet pointé n'est juste pas le bon ‼ Ou encore comment il est pointé (cf code du post #42). De la pure logique !

    Avec une dizaine de procédures équivalentes utilisées en France et à l'étranger pour autant de sites
    depuis plus d'un mois, serais-je aussi vernis qu'aucune n'est plantée à ce jour ? Je ne crois pas !

    Comme déjà conseillé pour te rassurer, verrouille la table avant le onchange
    mais en aucun cas tu seras à l'abri pour autant, loin de là !
    Arrête de bloquer sur ce point car l'important est bien ailleurs ! Qui plus est j'ai pourtant indiqué plusieurs fois
    la variante (finale j'espère !) verrouille l'élément avant de demander la mise à jour … What else ?!


    Patrick, la variante ayant prouvée son efficacité lors du changement du code source des pages NASDAQ
    (avant c'était l'index n°2 et depuis quelques jours c'est le n°3 sur plusieurs ordinateurs !),
    comme tu viens de l'évoquer, la solution réside bien par le pointage à coup sûr d'un élément …
    Et là encore c'est vraiment tout bête ! TBTO powaaa ‼

    L'importation de données d'une page web est évidemment liée à son code source.
    Une modification dans le codage de la page et la procédure peut aller à veau-l'eau ! (dans les choux quoi !)

    J'ai déjà vu des requêtes avec mot de passe mais là je me suis un peu trop avancé dans le cas du login DVP, désolé.
    Voir peut-être du côté de Stéphane …
    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. #98
    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
    tout a fait d'accord avec toi le figé de l'élément avant ou après le on change ne change pas grand chose
    mais bon selon la logique et pour rassurer itwoo

    mais rassure toi j'ai très bien compris ton principe


    pour la requête moi aussi j'ai déjà vu des login password dans le SEND mais je ne trouve plus ces exemples d'écriture
    mais si c'est possible je trouverais ca c'est sur

    itwoo tu nous a dit quand tu es rentré de vacance "vous foncez!!!"
    j' ai presque envie de te dire "rallenti!!!"
    avec une requête tu a un exemple concret depuis Nasdaq F valable pour ABBV
    marc t'a donné une solution plus que propre avec IE ne cherche pas plus loin et met le en application
    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. #99
    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 suis là en à jour ca y est (mais juste survolé ton code par username)
    la requête fonctionne nickel depuis 3 mois et environ 3* plus vite que l'ancienne méthode du gif animé (idem pour euronext)

    Marc OK ca marche tu as raison ca tourne bien ta méthode comme ca

    Sinon Patrick pas vraiment réussi à tester ta version Ultimate ca bloque avec l'antivirus...mais je retourne sur l'autre post lire la fin des commentaires (et attaque de ta version v1.0.2 all equities) et continuer

    Au fait vous parlez souvent de vbs et vba...c'est quoi vbs par rapport à vba?

    Bon WE

  20. #100
    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
    re bonjour itwoo

    vba=visualbasic for application (en l'occurrence Excel)
    vbs=visual basic script
    tout 2 dérivé du visual basic

    le vbs peut être utilisé avec ou sans interface (fenêtre Windows )
    on l'utilise souvent dans un hta qui est une application utilisant le languate html comme une page html
    on en reparlera dans ton post si tu veux
    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

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