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. #61
    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,
    Personnellement je n’ai pas compris quel était le marqueur 100% fiable de fin de chargement des datas ni comment le repérer pour l’utiliser…(si l’information était envoyée à IE par le frame, le form, un script, ou si IE avait une fonction pour le détecter, ou autre…)
    En tout cas il n’est pas nécessaire d’attendre la fin d’affichage de la page web (contrairement à ce que je pensais au départ) En effet comme Patrick l'a découvert et le souligne les datas sont présentes bien avant que l'affichage n'est fini de charger à l’écran voir même sont présentes même si elles ne s’affichent pas à l’écran !!!Les datas sont présentes dans le code de la page web donc de manière dynamique…d’où l’idée de récupérer dynamiquement cela de cette façon timer+ vérification sur comptage nombre de lignes présentes
    Sais tu détecter avec vba la fin du chargement d'un frame ou d'un formulaire? C’est peut être lui le marqueur ?
    La récupération dynamique avec timer en comptant nombre de datas chargées semble fonctionner et être aussi plus rapide (c’est une bonne méthode détournée bien que pas du tout orthodoxe) il peut y avoir cependant des cas d’erreur mais très rare…
    Patrick a mis au point un timer (par ex pour nasdaq) que je teste actuellement qui marche...
    D’où pour le moment utilisation d'un timer avec vérification sur le nombre de lignes présentes. Le timer est trés long pour les valeurs n’ayant pas un nombre de lignes suffisantes faute d’ancienneté importante, sinon pour les autres cela va assez vite…De toute façon pour le moment pas mieux à proposer…
    C'est du code comme dit plus haut type cromagnon mais il a l'avantage de marcher (avec nasdaq) et cela parce qu'il colle au code des pages web en utilisant peu de propriétés d'internet explorer...et en récupérant dynamiquement les datas fournies par les pages web car il va prendre l’information directement dedans...
    Dans le cas d'euronext il faut une éternité pour que la 1° page web s'affiche et après il faut aller en page 2 puis 3 en ainsi de suite bien souvent sur au moins 10 pages!!!
    On tâtonne un peu mais ca avance, merci de tes remarques, faut regarder tout ca...
    Si tu as des idées ou suggestions c’est avec grand plaisir…
    Pour euronext une idée serait peut être de compter le nombre de lignes de la 1° page puis une fois atteint ce nombre de lignes passer à la 2° page et ainsi de suite jusqu’à la page N qui est indiquée dés le départ en page 1…pour le moment en priorité vérification nasdaq en cours…
    et Bravo Patrick car sur cette partie nasdaq et jusqu’à présent cela marche (il faut tester cela dans le temps mais so far so good)
    A bientôt

  2. #62
    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 n'ai jamais vraiment apprécié le pilotage d'IE, vu trop de surprises, par exemple cela fonctionne
    sur des ordinateurs mais pas sur d'autres; dès que je peux l'éviter et utiliser une autre librairie …

    C'était en fait juste pour signaler une page Web CSS rapide ne semblait pas se charger
    à cause de la boucle sans fin de la procédure WaitIE recopiée telle quelle …

    Citation Envoyé par itwoo Voir le message
    Sais tu détecter avec vba la fin du chargement d'un frame ou d'un formulaire?
    Je n'en ai pas vraiment eu besoin mais je crois bien c'est justement dans la
    discussion en lien dans mon précédent message, mentionné par AlainTech …
    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. #63
    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

    MarcL si tu regarde bien le code source de la page il n'y a pas de frames mais simplement des "DIV" amélioré par du css3
    ce qui est vrai fait ressembler a des "forms" ce que je croyait au départ
    c'est sensé améliorer la rapidité et l'aménagement des pages

    pour le ie.busy c'est vraiment tout bête tu a absolument raison il faut la négation soit par le not ou le false

    je me demandais pourquoi ma fonction waitdoc ne fonctionnait pas maintenant je sais
    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

  4. #64
    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

    Jusqu'à présent tout ce qui a été fait pour nasdaq fonctionne c'est vraiment bon signe...Ca fait plaisir
    Pour euronext en faisant un peu pareil ca devrait donc aller aussi j'espére.

    Marc quelle librairie différente utilises tu (en effet d'un ordinateur à l'autre ca n'est pas pratique ou même si l'on peut éviter le maximum d'interférence avec IE c'est l'idéal comme par ex IE.busy)?

    Pour la discussion avec Alain Tech pas réussi à l'appliquer jusqu'à présent, à voir plus tard car pour le moment ca fonctionne et ca avance.

    Bon dimanche
    A bientôt

  5. #65
    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

    Principalement Microsoft.XMLHTTP, MSXML2.XMLHTTP voire WinHTTP.WinHttpRequest
    quand la page Web s'y prête, ce qui n'est pas vraiment le cas d'une page CSS …

    Sinon reste à piloter IE via MSHTML.InternetExplorer, SHDocVw.InternetExplorer …


    Citation Envoyé par patricktoulon Voir le message
    si tu regarde bien le code source de la page il n'y a pas de frames mais simplement des "DIV" amélioré par du css3
    Une fois récupéré le code entier via par exemple .Document.body.outerHTML, s'il y a des repères,
    pourquoi ne pas puiser directement dedans (Split, …) ? (je n'ai pas regardé …)
    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. #66
    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 MarcL

    laisse tomber les split et double split ,avec le dataobject le div complet du tableau est mis en forme dans le sheets

    le problème sur Euronext est le temps des procédures dans le document qui varie a chaque fois

    donc plutôt qu'attendre le wait... patin et couffin

    j'utilise des boucles do loop avec arguments sur des objets bien précis de la page

    j'ai presque abouti a charger toutes les pages du tableau sur 3 années (plus de 800 lignes ) je livre la bête mercredi ou jeudi quand je reviendrais

    j'en suis a réduire les impuretés du code
    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

  7. #67
    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 la preuve pour les splits obsolete
    tiens regarde comment je récupère le tableau page1 sans split et sans chercher la table

    je récupère simplement le div , le met dans le dataobject et le colle dans la feuille

    pour obtenir le bon div regarde la première boucle sur le classname ainsi qu'un mot qui doit être présent que dans celui-ci

    ensuite pour attendre que la page soi a jour on attend que loading data.... ne soit plus dans le texte outerhtml du div

    il ne nous reste plus qu'a coller ce qui est dans le clipboard(le data avec les données) dans la feuille


    et maintenant la marmotte mange tout le chocolat

    qui veut du code scalpé demandez!!! ,demandez!!!!

    cromagion j'ai dis... Neandertal oui

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim LienViewData As HTMLAnchorElement
    Dim InputDateTexte As HTMLInputElement
    Dim Bouton As HTMLButtonElement
    Dim FormatChargement As IHTMLInputElement
    Dim nbreanchor As Integer
    Public Sub WaitIE(IE As InternetExplorer)
    'On boucle tant que la page n'est pas totalement chargée
        Do Until IE.Busy = False And IE.readyState = READYSTATE_COMPLETE
            DoEvents
        Loop
    End Sub
     
    Sub wait_Secondes(SEC)
        SEC = Format(SEC, "00")
        Application.Wait (Now + TimeValue("0:00:" & SEC))
    End Sub
     
    Sub euronextpage1()
        Columns("A:J") = ""
        [A1].Select
        Dim mydata, fich, pag
        'cette sub pour récupérer les données historiques
        'ici l'exemple traité par défaut est AIR LIQUIDE (FR0000120073)
        IE.Navigate "https://europeanequities.nyx.com/en/products/equities/FR0000120073-XPAR/quotes"
        IE.Visible = True
        WaitIE IE
        Set IEDoc = IE.document
        'WaitDoc IEDoc   ' ca on fait peter aussi!!!!!!!!
        Set LienViewData = IEDoc.all("tablesNavigation_hi")    'pour aller directement au tableau historique
        LienViewData.Click    'On exécute le lien
        Set InputDateTexte = IEDoc.all("historicalDatePicker1")    'ici avec id pointe directement sur le bon input!!!
        InputDateTexte.Value = "02/01/2010"    'On inscrit le texte dans l'input soit la date de début
        Set InputDateTexte = IEDoc.all("historicalDatePicker2")    'ici avec id pointe directement sur le bon input!!!
        InputDateTexte.Value = "15/06/2013"    'On inscrit le texte dans l'input soit la date de fin
        'il faut ensuite cliquer sur le bouton dont id="refreshHistoricalPC" type="button" value="Refresh
        Set Bouton = IEDoc.getElementById("refreshHistoricalPC")
        Bouton.Click
        'le Tableau et plein de chose utile pour la suite sont dans les div
        Set divelements = IEDoc.getElementsByTagName("div")
        'on boucle jusqu'a que la bonne classe apparaisse dans les divelements
        ' et comme il y en a plusieur de la meme classe on recupere que celui qui a le (turnover) dans son code
        Do
            e = e + 1
            If e = divelements.Length Then e = 1
            Loop Until divelements(e).className = "dataTables_scroll" And InStr(divelements(e).outerHTML, "Turnover") > 0
        'l'element qui nous concerne c'est un div qui contient tout le tableau page par page
        ' sa classe est "dataTables_scroll" et c'est le 477 eme div
        'on boucle tant que loading est present dans le outerhtml de l'element
        Do: Loop While InStr(divelements(477).outerHTML, "Loading") > 0
        'on repere la premiere ligne libre de la feuille
        Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1).Select
        '********************************************************************************************************************************
        'je n'ai plus besoins de presenter cet object
        Set mydata = New DataObject
        mydata.SetText divelements(477).outerHTML
        mydata.PutInClipboard
        '*****************************************************************************************************************************
        'on envoie la page1  du tableau dans la feuille
        Set fich = ThisWorkbook
        Set pag = fich.Sheets(3)
        pag.Paste
        IE.Quit
        Set IE = Nothing
        Set IEDoc = Nothing
    End Sub

    et allez pour le tableau en entier vais vraiment parceque c'est vous
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim LienViewData As HTMLAnchorElement
    Dim InputDateTexte As HTMLInputElement
    Dim Bouton As HTMLButtonElement
    Dim FormatChargement As IHTMLInputElement
    Dim nbreanchor As Integer
    Public Sub WaitIE(IE As InternetExplorer)
    'On boucle tant que la page n'est pas totalement chargée
        Do Until IE.Busy = False And IE.readyState = READYSTATE_COMPLETE
            DoEvents
        Loop
    End Sub
     
    Sub wait_Secondes(SEC)
        SEC = Format(SEC, "00")
        Application.Wait (Now + TimeValue("0:00:" & SEC))
    End Sub
     
    'vider les temporaires
    Sub Clear_Temp_Files()
    Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 "
    Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1"
    End Sub
    Sub euronextpage1()
      Dim nombre
            Columns("A:J") = ""
        [A1].Select
        Dim mydata, fich, pag
        'cette sub pour récupérer les données historiques
        'ici l'exemple traité par défaut est AIR LIQUIDE (FR0000120073)
        IE.Navigate "https://europeanequities.nyx.com/en/products/equities/FR0000120073-XPAR/quotes"
        IE.Visible = True
        WaitIE IE
        Set IEDoc = IE.document
        'WaitDoc IEDoc   ' ca on fait peter aussi!!!!!!!!
        Set LienViewData = IEDoc.all("tablesNavigation_hi")    'pour aller directement au tableau historique
        LienViewData.Click    'On exécute le lien
        Set InputDateTexte = IEDoc.all("historicalDatePicker1")    'ici avec id pointe directement sur le bon input!!!
        InputDateTexte.Value = "02/01/2012"    'On inscrit le texte dans l'input soit la date de début
        Set InputDateTexte = IEDoc.all("historicalDatePicker2")    'ici avec id pointe directement sur le bon input!!!
        InputDateTexte.Value = "15/09/2013"    'On inscrit le texte dans l'input soit la date de fin
        'il faut ensuite cliquer sur le bouton dont id="refreshHistoricalPC" type="button" value="Refresh
        Set Bouton = IEDoc.getElementById("refreshHistoricalPC")
        Bouton.Click
        'le Tableau et plein de chose utile pour la suite sont dans les div
        Set divelements = IEDoc.getElementsByTagName("div")
        'on boucle jusqu'a que la bonne classe apparaisse dans les divelements
        ' et comme il y en a plusieur de la meme classe on recupere que celui qui a le (turnover) dans son code
     
         '**************************************************************************************************************************
        'ICI ON VA RECUPERER LE NOMBRE DE PAGE A VISTER EN DIVISANT LE NOMBRE DE JOUR QUE L'ON RECUPERE EN DESSOUS DU TABLEAU
        'EXEMPLE : Total Number of Days: 886
     
     
        Do
            Set nbligne = IEDoc.all("historicalTable_info")
            nombre = Fix(Split(nbligne.innerText, ":")(1) / 50) + 1
        Loop While nombre < 2
     
        '***************************************************************************************************************************
         Do
            e = e + 1
            If e = divelements.Length Then e = 1
            Loop Until divelements(e).className = "dataTables_scroll" And InStr(divelements(e).outerHTML, "Turnover") > 0
        'l'element qui nous concerne c'est un div qui contient tout le tableau page par page
        ' sa classe est "dataTables_scroll" et c'est le 477 eme div
        'on boucle tant que loading est present dans le outerhtml de l'element
         Do
       a = a + 1
     
        Do: Loop While InStr(divelements(477).outerHTML, "Loading") > 0
        'on repere la premiere ligne libre de la feuille
        Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1).Select
        ancientexte = divelements(477).outerHTML
      '********************************************************************************************************************************
        'je n'ai plus besoins de presenter cet object
        Set mydata = New DataObject
        mydata.SetText divelements(477).outerHTML
        mydata.PutInClipboard
        '*****************************************************************************************************************************
        'on envoie la page1  du tableau dans la feuille
        Set fich = ThisWorkbook
        Set pag = fich.Sheets(3)
        pag.Paste
    repart:
      Set boutonpagenext = IEDoc.all("historicalTable_next")
        boutonpagenext.Click
     
       Do
       If divelements(477).outerHTML <> ancientexte Then Sort = True
       e = e + 1
       If e = 100 Then Sort = True
          Loop Until Sort = True
     
      Loop Until a = nombre
       nombre = 0
        IE.Quit
        Set IE = Nothing
        Set IEDoc = Nothing
    End Sub
    la marmotte elle vous dis a jeudi
    itwoo copie le 2 eme code dans un fichier vierge et essaie le
    qu'en pensez vous tout les deux
    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. #68
    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,

    Merci, le temps de regarder tout ca et rdv jeudi...
    @

  9. #69
    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 1° code pour récupération de la 1° page cela marche sans faille(remarque il faut adapter le 477 par e car 477 n'est plus ce matin le bon n°)
    Pour récupération toutes les pages étude en cours...ca va prendre un peu de temps mais ce que tu proposes est vraiment bon...bravo la marmotte
    A bientôt
    bonne journée

  10. #70
    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

    oui c'est vrai les index peuvent changer c'est pour ca que la boucle d'attente fonctionne avec un long (e)
    ca te permet de garder le bon div si 477 change

    t la condition sert simplement a na pas générer d'erreur sur le nombre de div
    si la page n'est pas suffisamment charger au bout de tout les div on recommence le décompte a 1

    sinon tu peut arriver a div 1000 hors il n'existe pas donc on ne va pas plus haut que le length même si la boucle elle tourne toujours
    puisque grâce a cette variable (e) on peut boucler 100 fois sans jamais dépasser le nombre de div

    ca reste du code sur mesure pour Euronext
    c'est maintenant certain ,il n'y a pas de form ou de frames c'est donc bien gérer par du css et autre script

    tu pourrais adapter la simplicité du code Euronext a l'autre tu gagnerais du temps

    n'hésite pas si tu a des questions

    tu a d'autre adresse a visiter encore plus arde a coder parce que moi ca m'amuse beaucoup de faire ca
    en même temps je met a jour des codes génériques que j'avais fait il y a un moment
    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

  11. #71
    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,

    Euh pour le moment tu es nettement en avance...ici je suis toujours en phase test de chargement de toutes les pages euronext sur plusieurs valeurs...

    A ca oui ca fait plaisir de s'y coller...je suis bien d'accord avec toi...

    Pour l'évolution euroenxt je te tiens au courant mais besoin d'un peu de temps...

    Une idée possible une adaptation nasdaq semble envisageable pour éviter la fonction timer qui est trés longue si la valeur n'a pas beaucoup d'historique de cotation...par exemple en piochant directement dans le code le nombre de jours s'il existe plutôt que de l'avoir introduit nous même par défaut et de manière aléatoire et t'attendre que ce nombre de jours charge ou que timer le rattrape...

    Bonne journée

    Au plaisir

  12. #72
    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

    apres t'avoir fait bucher comme un diable sur ces satanées boucle d'attente et autre

    je te propose aujourd'hui d'adapter le objectdata a nadasq et oui je rigole
    en fait je me suis rendu compte que au dessus de 6mois le nombre pour le tr dans la boucle pouvais être limité a 100
    donc j'ai hyper simplifié la fonction car maintenant c'est une fonction lancer par la sub test suivi de l'argument "1m" ou "6m" ou "4y" ect......
    et bien sur toute les boucles pour la construction du tableau ont complètement disparues
    voila le code devient vraiment plus propre
    allez colle ca dans un fichier vierge et essai le en changeant l'argument a ton souhait dans la sub test
    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
    56
    57
    58
    59
    60
    61
     
    Option Base 1
     
    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 test()
    '"1m" pour 1 Mois:"3m" pour 3 mois:"6m" pour 6 Mois":"1y" pour 1 Ans:"18m" pour 18 Mois:"2y" pour 2 Ans
        '"3y" pour 3 Ans:"4y" pour 4 Ans:"5y" pour 5 Ans:"6y" pour 6 Ans:"7y" pour 7 Ans:
        '"8y" pour 8 Ans:"9y" pour 9 Ans:"10y" pour 10 Ans
       récuperation_du_tableau_A "4y"
    End Sub
    Function récuperation_du_tableau_A(duré As String)
        Columns("A:F") = ""
        Dim IE As New InternetExplorer, IEDoc As HTMLDocument, htmlTagCol As IHTMLElementCollection, Generic As HTMLGenericElement
        Dim NBlignes
           '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")
    Select Case duré
     Case "1m": NBlignes = 30
     Case "6m": NBlignes = 65
     Case Else: NBlignes = 100
     End Select
        'liste des item a prendre en compte
           htmlSelectElem.Value = duré    ' 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 > NBlignes
        '*******************************************************************************
      Set tablo = IEDoc.getElementsByTagName("table")
         Set mydata = New DataObject
        mydata.SetText tablo(2).outerHTML
      mydata.PutInClipboard
        'le code du tableau est copié dans le presse-papiers
        Set fich = ThisWorkbook
        Set pag = fich.Sheets(2)
        [A2].Select
        pag.Paste
         'pag.usedrange
        With pag.UsedRange
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
        End With
        IE.Quit
        Set IE = Nothing
        Set IEDoc = Nothing
    End Function
    je me suis meme permis d'aligner les données dans les cellules
    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. #73
    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,

    Pas de pause, tu es super rapide
    et si en plus du fait du style pour la présentation alors là
    bon je ragarde tout ca aussi mais pour le moment suis sur euronext...
    RDV bientôt
    Au plaisir

  14. #74
    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

    c'est aujourd'hui la cérémonie de l'enterrement de cette discussion

    avec beaucoup de regret nous sommes ici aujourd'hui pour dire un dernier adieu a notre chère discutions

    elle qui nous quitte bien trop top ,elle qui nous a rapproché a travers le haut débits

    cher discussion que la bande passante t'accompagne a très haute vitesse sur la toile que les codes qui en ont découlé fasse leur chemin

    et soit utile au plus grand nombre

    AMEN

    allez prend ce ficher
    ouvre le
    pour Nasdaq click sur la durée souhaitée dans la listbox

    écrit les dates dans les deux textbox et clique sur valider

    respire, boit un café
    attend
    et jouie de l'information qui par enchantement viens a toi comme une femme amoureuse
    soit patient quand même avec Euronext si la période est longue entre les deux dates
    bon allez j'arrête de déconner récupère ce fichier, il n'y a pas d'erreur chez moi (plus de 50 essais)sur les deux titres
    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

  15. #75
    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,

    Ce n'est qu'un au revoir

    Merci pour tout...

    Besoin de temps pour tester tout cela, surtout euronext...je pense 1 mois...

    A trés bientôt

    Bonne continuation

  16. #76
    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
    a mon avis si la structure general de la page ne change pas
    tu peux tester tant que tu veux on ne peut plus tomber a coté
    c'est l'avantage du teste sur la 1 ere cellule de gauche du tableau a chaque fois que l'on clique sur le bouton "NEXT"(page suivante )

    tu la tester comme ca tel qu'el au moins??
    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. #77
    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,

    Juste essayé de lancer euronext avec clique sur valider de la feuille acceuil sans rien changer mais il bloque d'entrée ici avec nombre =0 (alors que 'laffichage euronext est bon)
    je te confirme que depuis ce matin parfois cela ne marche pas ici...je ne sais pas pourquoi ca ne le faisait pas avant...
    Mais c'est dés le départ de la sub que ca bloque, comme si vba ne chargeait plus les informations même avec une boucle d'attente)...car il irait trop vite
    (tu peux aussi mettre +1 aprés nombre mais alors tu vas rester bloqué a nombre = 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Do
            Set nbligne = IEDoc.all("historicalTable_info")
     
            nombre = Fix(Split(nbligne.innerText, ":")(1) / 50)
        Loop While nombre < 2
    Sur l'ancienne version c'était bloquage sur le chargement de toutes les pages où seul parfois la dernière se chargeait a fois (a=le nombre de fois)

    A+

  18. #78
    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
    par contre ici la connection est beaucoup plus longue que d'habitude aujourd'hui...mais normalement cela ne devrait pas jouer...puisque boucle d'attente (cela dit aprés 10mn d'attente j'arrête d'attendre en sortant)

    Je viens de le relancer et cette fois ca marche!!! vraiment pour le moment ca me dépasse pourquoi ca bloque de temps en temps...
    Suis 100% d'accord avec toi on ne devrait plus tomber à côté si la structure de la page reste la même.
    A+

  19. #79
    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
    Attention des fois avant de copier les pages sur le sheets sa peut prendre une bonne minute et même plus de temps en temps surtout si la période entre 2 date est long
    mais l'erreur est maintenant impossible a moins d'avoir un débit insuffisant ce qui aujourd'hui est kazi impossible
    quand on attend ca peut être long

    mais que veux tu ca fait un paquet de données a mettre en forme a patience est de rigueur

    par exemple 10 ans pour Nasdaq ca fait environ 2600 ligne et 6 colonne a mettre au propre

    pour Euronext une période de 3 ans peut avoir 18 page de 50 lignes sur 7 colonnes a mettre en place proprement dans les cellules

    pour euro next j'ai laisser le IE visible a true pour que tu vois le tableau changer ces pages tout seul , tu peux le mettre a false si tu veux

    tu vois ce que je veut dire

    si les entêtes de colonne a chaque changement de pages te gène j'ai résolu le problème après t'avoir envoyé le fichier

    si tu y tiens il faut changer la partie du "set datobject"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set mydata = New DataObject
        texto = "<table>" & divelements(i).Children(1).Children(0).Children(1).outerHTML
      mydata.SetText IIf(Page < 1, divelements(i).outerHTML, texto)
    voila voila
    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

  20. #80
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Alors, j'ai lu la discussion un peu en diagonal... surtout à la fin mais je pense que ton problème est toujours de savoir quand ta liste est fini de charger?
    Si c'est le cas, je ne sais pas si tu as remarqué mais il y a une petite rosace Nom : ajax-loader-2.gif
Affichages : 1216
Taille : 4,1 Ko qui se charge de te signaler que le tableau est en cours de rafraichissement, il te suffit donc je pense, de faire une boucle WaitIEData par exemple, qui attend sa disparition.
    L'élément à contrôler se nomme "ajaxloader", tu restes dans la boucle d'attente tant qu'il est visible, une fois qu'il disparait le chargement est complet. Il faudra peut-être chercher un meilleur critère que visible, le style "display" par exemple passe de "None" à "Block" au moment des chargements.

    J'espère avoir cerné ton problème. Si tu n'y arrive pas fait signe.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

+ Répondre à la discussion
Cette discussion est résolue.

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