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 :

Récupérer le contenu d'une page web [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut Récupérer le contenu d'une page web
    Bonjour,
    je sais que la question est posée régulièrement et que dans la FAQ il y a des pistes, mais je ne trouve pas ce que je recherche.

    Je voudrais tout simplement pouvoir lire le contenu d'une page WEB affichée, zone par zone, toutes les zones, ou ligne par ligne, toutes les lignes. ce qui compte c'est de récupérer l'ensemble des zones car ensuite je compte bien me débrouiller pour extraire les zones:champs qui m'intéresse.

    Pour la petite histoire, la page contient 1 ligne par élève, dont au début sont email, ses noms et prénoms, et à la fin la cotation obtenue au test.

    Je voudrais récupérer cela pour éviter de devoir lire ligne par ligne et réencoder les cotations de plusieurs centaines d'étudiants.
    La modif du site pour un export qui répond à mes besoins n'est pas autorisée.

    Même si la technique que vous pouvez proposer est totalement barbare, je suis prêt à la tester, le gain de temps en valant la chandelle.


    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Je ne sais pas si tu trouveras réponses à ta question mais je sais que Jacques Chaussard a fait des choses extraordinaires avec Excel et Internet notamment pour relever les cours de bourse.
    Son lien ici, va dans l'onglet Finances ou peut-être sur le site de Florence Cabon.

  3. #3
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour Philippe,

    je suis sur le site de Jacques Chaussard et c'est effectivement extraordinaire. j'espère y trouver mon bonheur.

    Merci pour ce lien.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Il se trouve que c'est justement ce sur quoi je planche.
    Enfin, ça me parait tellement simple que j'ai des doutes

    J'insère mon historique d'opérations bancaire depuis le site de ma banque sur une feuille de calcul excel.
    Ensuite je re-traite les données pour les formater comme bon me semble et suivre mes comptes.

    Deux piste pour ça.

    - la première :

    consiste à faire un ctrl+A puis ctrl+C sur ta page web.
    puis sous excel tu fait un "collage spécial", choix "texte unicode"

    Il ne te reste plus qu'a gérer tes chaines de caractère avec les fonctions LTrim, RTrim, Mid, Len etc.

    - la seconde :
    Tu fait la même chose mais au lieu de coller tes données sous excel tu les colles sur un fichier texte que tu sauvegarde.

    Puis sous excel tu utilises la fonction :
    "Données" => "Données externes" => "Importer des données..." et tu choisis ton fichier texte.

    Cette deuxième technique te permettra de gérer les espaces et tabulations de ton fichier texte pour démarrer un pré-traitement des données.

    (pour ceux qui ne connaissent pas cette fonction, excel ouvre une fenêtre montrant le contenu du fichier texte et propose de créer des "colonnes fixe" qui seront mise dans des cases séparés)

    ps : cette phase d'import de fichier et de gestion des données peu se faire à l'aide d'une macro.

    Si je n'ai pas été suffisament clair je pourrai revenir sur cette explication succinte.

    J'espère que cette réponse t'aura aidé.

  5. #5
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut Sinn le sage,

    j'ai tenté ceci, mais impossible car la page que je dois récupérer utilise le Plug-in flash player et rien n'est copiable.

    Merci quand même pour cette excellente suggestion.

    Pour l'instant, je travaille à tester ceci, plus précisément le point 4.

    Peut-être y trouveras tu aussi ton bonheur.

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Héhé, très amusant la récup d'info depuis le Web.

    J'avance bien mais je calle au stade suivant :

    La page a accéder nécessite un login.
    Pour ce faire, le code suivant (rendu neutre pour la publication) fonctionne parfaitement et me conduit exactement où je dois aller, càd sur la page voulue avec les données voulues.
    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
    Sub Part_1_connect_ie()
     
    'Page 1 Login
    ThisWorkbook.FollowHyperlink "http://url.WEB/reportingWebApp/base/login.reporting", , True
    Application.Wait (Now + 7 / 3600 / 24)
    For num = 1 To 3
    SendKeys "+{TAB}", True
    Next
    SendKeys "user", True
    SendKeys "{TAB}", True
    SendKeys "password", True
    SendKeys "{TAB}", True
    SendKeys "~"
     
    Application.Wait (Now + 7 / 3600 / 24)
    'Page 2 : Page Welcome
    For num = 1 To 7
    SendKeys "{TAB}", True
    Next num
    SendKeys "~"
     
    End Sub
    J'ai trouvé sur le même site de Jacques Chaussard un code pour lire le contenu de la page, mais ce code n'est pas prévu pour une page avec Login (comme dans le code ci-dessus).

    Voici ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Private Declare Function OuvreInternet Lib "wininet" _
         Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, _
         ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
    Private Declare Function fermeInternet Lib "wininet" _
         Alias "InternetCloseHandle" (ByVal hInet As Long) As Integer
    Private Declare Function code_page Lib "wininet" _
         Alias "InternetReadFile" (ByVal hFile As Long, ByVal sBuffer As String, _
         ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
    Private Declare Function Ouvrepage Lib "wininet" _
         Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, _
         ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, _
         ByVal dwContext As Long) As Long
     
    Sub Part_2_Get_info()
     
    Dim texte_code As String * 1024
     
    page_Web_à_lire = InputBox("URL de la page à lire ?", _
         "code de la page Internet", "http://url.WEB/reportingWebApp/base/reporting")
    internet = OuvreInternet("toto", 1, vbNullString, vbNullString, 0) 'ouvre Internet
    URL = Ouvrepage(internet, page_Web_à_lire, vbNullString, _
        0, &H400000 Or &H4000000 Or &H80000000, 0) 'ouvre la page Web
    'lecture du code de la page par paquet de 1024 caractères
    txt = ""
    nb_caractères_lus = 1
    Do While nb_caractères_lus > 0
    'lit 1024 caractères et les copie dans texte_code
    code_page URL, texte_code, 1024, nb_caractères_lus
    txt = txt & Left(texte_code, nb_caractères_lus)
    Loop
    fermeInternet URL 'ferme la page
    fermeInternet internet 'ferme Internet
     
    MsgBox txt
     
    'recopie dans un fichier texte
    Open "c:\rien.txt" For Output As #1
    Print #1, txt
    Close #1
    'ouverture du fichier téléchargé
    ThisWorkbook.FollowHyperlink "c:\rien.txt", , True
     
    End Sub
    En sachant que
    * le premier code utilise Firefox, mon navigateur par défaut
    * le deuxième code utilise IE et qu'il crée lui même son instance IE sans login
    * que la page où récupérer les infos n'est plus celle du loggin (vu les SendKeys)

    Quelqu'un peut-il m'aider pour mixer ses 2 codes ou me dire comment lire en Draft, comme dans le code 2, tout ce qui est dans la page sélectionnée par le code 1.

    Merci beaucoup d'avance pour votre aide qui me fera gagner un temps de réencodage immense.

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Fais un essai avec ça, sans avoir la structure de la page, c'est pas facile

    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
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Sub IEControl()
    Dim IE As New InternetExplorer
    Dim OneAll As HTMLObjectElement
     
    Dim URL As String
     
    URL = "http://url.WEB/reportingWebApp/base/login.reporting"
    'URL = "https://edit.europe.yahoo.com/registration?.intl=fr&.pd=ym_ver%253D0%2526c%253D%2526ivt%253D%2526sg%253D&new=1&.done=http://mail.yahoo.com&.src=ym&.v=0&.u=domsqfl6km2cd&partner=&.partner=&pkg=&stepid=&.p=&promo=&.last="
     
    'Ouvre la page WEB
    IE.navigate URL
     
    'Affiche IE
    IE.Visible = True
     
    'Attend qu'IE soit dispo
    Do While IE.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
     
    For num = 1 To 3 '12
    SendKeys "{TAB}", True
    Sleep 100
    Next
    SendKeys "user", True
    SendKeys "{TAB}", True
    SendKeys "password", True
    SendKeys "{TAB}", True
    SendKeys "~"
     
    Application.Wait (Now + 7 / 3600 / 24)
    'Page 2 : Page Welcome
    For num = 1 To 7
    SendKeys "{TAB}", True
    Next num
    SendKeys "~"
    J'ai rajouté un sleep 100 dans la boucle des Tab, mais bon j’étais sur un site d'inscription de mail et il me fallait 12 tab avec d'arriver a une zone de texte .... donc il perdait peut être des tab en route
    ++
    Qwaz

  8. #8
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Qwaz,

    encore merci pour ton temps.
    J'ai extrait la source de la page via Firefox (ou IE) mais je crains bien que cela soit du Flash et pas un tableau classique.

    Je n'y trouve donc pas l'elem 232 dont tu m'as parlé.

    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
     
     
     
     
     
     
     
    <!-- saved from url=(0014)about:internet -->
    <html lang="en">
     
    <!-- 
    Smart developers always View Source. 
     
    This application was built using Adobe Flex, an open source framework
    for building rich Internet applications that get delivered via the
    Flash Player or to desktops via Adobe AIR. 
     
    Learn more about Flex at http://flex.org 
    // -->
     
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
    <!--  BEGIN Browser History required section -->
     
    <link rel="stylesheet" type="text/css" href="history/history.css" />
    <!--  END Browser History required section -->
     
    <title></title>
    <script src="AC_OETags.js" language="javascript"></script>
     
    <!--  BEGIN Browser History required section -->
    <script src="history/history.js" language="javascript"></script>
    <!--  END Browser History required section -->
     
    <style>
    body { margin: 0px; overflow:hidden }
    </style>
    <script language="JavaScript" type="text/javascript">
    <!--
    // -----------------------------------------------------------------------------
    // Globals
    // Major version of Flash required
    var requiredMajorVersion = 9;
    // Minor version of Flash required
    var requiredMinorVersion = 0;
    // Minor version of Flash required
    var requiredRevision = 124;
    // -----------------------------------------------------------------------------
    // -->
    </script>
     
    </head>
     
    <body scroll="no">
    <script language="JavaScript" type="text/javascript">
    <!--
    // Version check for the Flash Player that has the ability to start Player Product Install (6.0r65)
    var hasProductInstall = DetectFlashVer(6, 0, 65);
     
    // Version check based upon the values defined in globals
    var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
     
    var additionalFlashVar="detailsURL=..%2Fbase%2FlevelTestDetails.reporting%3Flogin%3D${login}%26scoreId%3D${scoreId}&servicePrefixURL=";
     
    if ( hasProductInstall && !hasRequestedVersion ) {
    	// DO NOT MODIFY THE FOLLOWING FOUR LINES
    	// Location visited after installation is complete if installation is required
    	var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn";
    	var MMredirectURL = window.location;
        document.title = document.title.slice(0, 47) + " - Flash Player Installation";
        var MMdoctitle = document.title;
     
    	AC_FL_RunContent(
    		"src", "playerProductInstall",
    		"FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"&"+additionalFlashVar,
    		"width", "100%",
    		"height", "100%",
    		"align", "middle",
    		"id", "LevelTestReporting",
    		"quality", "high",
    		"bgcolor", "#869ca7",
    		"name", "LevelTestReporting",
    		"allowScriptAccess","sameDomain",
    		"type", "application/x-shockwave-flash",		
    		"pluginspage", "http://www.adobe.com/go/getflashplayer"		
    	);
    } else if (hasRequestedVersion) {
    	// if we've detected an acceptable version
    	// embed the Flash Content SWF when all tests are passed
    	AC_FL_RunContent(
    			"src", "LevelTestReporting",
    			"width", "100%",
    			"height", "100%",
    			"align", "middle",
    			"id", "LevelTestReporting",
    			"quality", "high",
    			"bgcolor", "#869ca7",
    			"name", "LevelTestReporting",
    			"allowScriptAccess","sameDomain",
    			"type", "application/x-shockwave-flash",
    			"FlashVars",additionalFlashVar,
    			"pluginspage", "http://www.adobe.com/go/getflashplayer"
    	);
      } else {  // flash is too old or we can't detect the plugin
        var alternateContent = 'Alternate HTML content should be placed here. '
      	+ 'This content requires the Adobe Flash Player. '
       	+ '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';
        document.write(alternateContent);  // insert non-flash content
      }
    // -->
    </script>
    <noscript>
     
     
     
     
     
     
    			<embed src="LevelTestReporting.swf" quality="high" bgcolor="#869ca7"
    				width="100%" height="100%" name="LevelTestReporting" align="middle"
    				play="true"
    				loop="false"
    				quality="high"
    				allowScriptAccess="sameDomain"
    				type="application/x-shockwave-flash"
    				pluginspage="http://www.adobe.com/go/getflashplayer">
    			</embed>
     
    </noscript>
    <SCRIPT LANGUAGE="JavaScript">
    // Maximize window
    function maximize() {
    	window.moveTo(0,0);
        window.resizeTo(screen.availWidth, screen.availHeight);
    }
    maximize();
    </SCRIPT>
    </body>
    </html>
    J'ai essayé de m'inspirer de download-page-web-javascript ou encore tutoriel-piloter-animation-flash-excel mais cela me dépasse totalement.

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Je te laisse remettre la bonne adresse entre croché

    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
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Sub IEControl()
    'Activer les ref M$ Internet controle et M$ Html Object Library
    Dim IE As New InternetExplorer
    Dim OneAll As HTMLObjectElement
     
    Dim URL As String
     
    'URL = "http://url.WEB/reportingWebApp/base/login.reporting"
    URL = "http://la bonne adresse"
     
    'Ouvre la page WEB
    IE.navigate URL
     
    'Affiche IE
    IE.Visible = True
     
    'Attend qu'IE soit dispo
    Do While IE.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
     
    'Merci de vous rendre sur la page contenant les données a recuperer
    'Ensuite tu te logg a la main
    'Tu affiches le groupe que tu veux recuperer
    'Tu regles l'option show sur "all"
    'Et tu cliques sur Ok de la msgbox
    'De cette facon en plus tes codes ne traine pas dans la macro
    MsgBox "Merci de vous rendre sur la page contenant les données a recuperer", vbOKOnly, "Connexion"
     
    'A partir d'ici, il te faut retrouver ton tableau dans la structure de la page web
    'Ici nous avons affaire a un tableau classic sans Flash
    'Il faut utiliser les iformation contenu dans IE.Document
    'Je n'ai ps trop le temps le matin, je regarderais pour la suite ce soir
    'Pour voir la structure du code, tu as dans IE "Afficher le code source", moi je prefere utiliser son équivalent sur Chrome avec "inspecter l'objet"
    'Avec ca tu vois toute la structure de ta page
     
    With Feuil1.Cells(Rows.Count, "A").End(xlUp).Offset(1)
        .Value = IE.document.all(231).all(0).innerText
        .Offset(0, 1) = IE.document.all(231).all(1).innerText
        .Offset(0, 2) = IE.document.all(231).all(2).innerText
    End With
    End Sub
    Il y avait juste un décalage entre les numéros affichés dans l'explorateur d'objet VBA (232 base 1) et dans la "réalité" (231 base 0).
    ++
    Qwaz
    ++
    Qwaz

  10. #10
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Merci,

    j'ai 2 problèmes :

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Feuil1.Cells(Rows.Count, "A").End(xlUp).Offset(1)
        .Value = IE.document.all(231).all(0).innerText
        .Offset(0, 1) = IE.document.all(231).all(1).innerText
        .Offset(0, 2) = IE.document.all(231).all(2).innerText
    End With
    il calle sur la ligne avec Offset(0,1) avec Object variable not set (err 91).

    Vu que j'ai un excel english, j'ai modifié comme suit, sans amélioration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Sheets(1).Cells(Rows.Count, "A").End(xlUp)
        .Offset(1).Value = IE.Document.all(231).all(0).innerText
        .Offset(0, 1).Value = IE.Document.all(231).all(1).innerText
        .Offset(0, 2).Value = IE.Document.all(231).all(2).innerText
    End With
    2) Es-tu certain de me comprendre? La page que je veux extraire est celle affichée lorsqu'on clique sur le lien "level test management", une page Flash.

    Encore merci pour ton temps.

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Citation Envoyé par Godzestla Voir le message

    2) Es-tu certain de me comprendre? La page que je veux extraire est celle affichée lorsqu'on clique sur le lien "level test management", une page Flash.

    Encore merci pour ton temps.
    Ha ben non, en effet, je suis pas au bon endroit.

    Je regarde
    [Edit]

    Alors, j'ai une solution a te proposé pour ta page en flash.
    En fait lorsque tu ouvres ta page Flash, celle c va récupérer les données pour ensuite les mettre ne forme dans la grille.
    En grattant avec Chrome, j'ai trouvé le lien ou les données sont demandé (server de BD surement) et j'arrive donc a obtenir les données en texte brut.
    Alors ben sur il y aura un gros travail de mise en forme, mais je doute que ce soit insurmontable, j'ai déjà repérer quelques règles dans la structure global des données, ensuite ça ressemble fort a un fichier csv .
    [/Edit]
    ++
    Qwaz

  12. #12
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Voilà, grâce à l'excellent travail de Qwazerty, le code fonctionne magnifiquement;

    Je récupère sous excel les données pour tous mes centres de formation en 1 seule procédure.

    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    Option Explicit
    
    Sub IEControl()
    'Activer les ref M$ Internet controle et M$ Html Object Library
    Dim IE As New InternetExplorer
    Dim URL As String
    Dim StartRecord As Long
    Dim StrBrute As String
    Dim StrRecord As String
    Dim Tab_Split
    Dim Cell_Tab_Split
    Dim iPosition As Integer, iOffsetL As Long
    Dim StrEntete As String, StrValue As String
    Dim TheCell As Range
    
    Dim ws          As String  'Results Storing Worksheet name
    Dim sheet_found As Boolean 'Trouvé feuille resultats
    Dim idx         As Long    'Index scanning feuilles
    Dim ActShName   As String  'Active sheetname
    Dim ctr_nbr     As Long    'Ctr centres
    Dim ctr_max     As Long    'Ctr max centres
    Dim Tabadr()      As String 'Table récup Ctr Max centre
    
    
    'Url de connection en C2
    URL = Sheets("Tools").Range("C2")
    
    'Copy password pour paste
    Sheets("Tools").Range("C4").Copy
    
    'Ouvre la page WEB
    IE.navigate URL
     
    'Affiche IE
    IE.Visible = True
     
    'Attend qu'IE soit dispo
    WaitIE IE
    
    'Merci de vous logger
    MsgBox "Merci de vous logger et d'appuyer ensuite sur 'Ok'", , "Login"
    
    'Récup numéro dernière ligne centre (ctr_max)
    Tabadr = Split(Sheets("Tools").Range("J65535").End(xlUp).Address, "$")
    ctr_max = Tabadr(2)
    
    'Traite 1 centre à la fois. premier centre en Ligne 3.
    For ctr_nbr = 3 To ctr_max
        'Centre code en colonne J
        ws = Sheets("Tools").Cells(ctr_nbr, 10).Value
        'URL Données brutes en colonne K
        URL = Sheets("Tools").Cells(ctr_nbr, 11).Value
        
        'check target Worsksheet exists and if not build
        sheet_found = False
        For idx = 1 To Sheets.Count
            If Sheets(idx).Name = ws Then
                Application.DisplayAlerts = False
                Sheets(idx).Cells.Clear
                Application.DisplayAlerts = True
                sheet_found = True
                Exit For
            End If
        Next idx
        'Build Ws
        If Not sheet_found Then
            ActShName = ActiveSheet.Name
            Sheets.Add
            ActiveSheet.Name = ws
            Sheets(ActShName).Activate
        End If
        
        
        'Tout ce qui suit est du au génie de Qwazerty.....
        
        
        'Une fois loggé, on charge les données brutes
        
        'Ouvre la page WEB
        IE.navigate URL
        
        'Attend qu'IE soit dispo
        WaitIE IE
        
        'On recupere les données brutes
        StrBrute = IE.document.body.innerText
        
       
        'On travaille les données
        Application.ScreenUpdating = False
        
        
        StartRecord = 1
        iOffsetL = 1
        Do
            'On recherche le prochain "{"
            StartRecord = InStr(StartRecord, StrBrute, "{") + 1
            
            'On recupere les données brutes d'un enregistrement
            StrRecord = Mid(StrBrute, StartRecord, InStr(StartRecord, StrBrute, "}") - 1 - StartRecord)
            
            'On éclate le Record dans un tableau
            Tab_Split = Split(StrRecord, ",")
            
            'On passe en revu chaque case
            For Each Cell_Tab_Split In Tab_Split
                'On vire le double quote "
                Cell_Tab_Split = Replace(Cell_Tab_Split, """", "")
                
                
                'On sépare encore en 2 si ":" présent
                iPosition = InStr(1, Cell_Tab_Split, ":")
                If iPosition <> 0 Then
                    'On a une entête de colonne et une valeur
                    StrEntete = Left(Cell_Tab_Split, iPosition - 1)
                    StrValue = Right(Cell_Tab_Split, Len(Cell_Tab_Split) - iPosition)
                    
                    'On recherche si l'entete existe
                    Set TheCell = Sheets(ws).Rows(1).Find(StrEntete, LookIn:=xlValues, lookat:=xlWhole)
                    If TheCell Is Nothing Then 'Pas trouvé
                        'On rajoute une entré
                        Set TheCell = Sheets(ws).Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
                        TheCell = StrEntete
                    End If
                    
                    'On rajoute la donnée lié a l'entete, TheCell defini la colonne
                    ''On cherche la ligne (vu que je sais pas trop quelles données sont imperativement renseigné, je n'utilise pas End(xlup)
                    TheCell.Offset(iOffsetL) = StrValue
                End If 'Si pas ":" on ignore la ligne (a adapter au besoin)
            Next
            'TS : ligne suivante pour debug only
            'Sheets(ws).Cells(iOffsetL, 1) = StrRecord
            'On se prepare a renseigner la ligne suivante, avec le prochain enregistrement
            iOffsetL = iOffsetL + 1
        Loop While InStr(StartRecord, StrBrute, "{") <> 0
        
        Sheets(ws).Columns("A").Delete
        Application.ScreenUpdating = True
    
    Next ctr_nbr
    
    'On ferme IE
     IE.Quit
    
    
    End Sub
    
    
    Sub WaitIE(IE As InternetExplorer)
    Do While IE.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
    End Sub
    NB : le loggin sur le site (sécurisé) est manuel car les sendkeys donnaient des résultats totalement aléatoires.

    Mais bon, si quelqu'un a une méthode de simulation clavier fiable compatible avec ce code, je prend bien sûr.

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Hello
    J'ai tripatouillé un peu.
    Je n'ai pas la structure du fichier donc à voir si tout ce passe bien.

    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    Option Explicit
     
    Sub IEControl()
    'Activer les ref M$ Internet controle et M$ Html Object Library
    Dim IE As New InternetExplorer
    Dim URL As String
    Dim StartRecord As Long
    Dim StrBrute As String
    Dim StrRecord As String
    Dim Tab_Split
    Dim Cell_Tab_Split
    Dim iPosition As Integer, iOffsetL As Long
    Dim StrEntete As String, StrValue As String
    Dim TheCell As Range
    Dim dSeconde As Long
     
    'Dim ws          As String    'Results Storing Worksheet name
    Dim Ws_Tool     As Worksheet
    Dim Sheet_Found As Worksheet 'Trouvé feuille resultats
    'Dim idx         As Long      'Index scanning feuilles
    'Dim ActShName   As String   'Active sheetname
    'Dim ctr_nbr     As Long      'Ctr centres
    'Dim ctr_max     As Long      'Ctr max centres
    Dim Tabadr()    As String    'Table récup Ctr Max centre
    Dim ctrRange    As Range
     
    Set Ws_Tool = Sheets("Tools")
     
    'Url de connection en C2
    URL = Ws_Tool.Range("C2")
     
    'Copy password pour paste
    Ws_Tool.Range("C4").Copy
     
    'Ouvre la page WEB
    IE.navigate URL
     
    'Affiche IE
    IE.Visible = True
     
    'Attend qu'IE soit dispo
    WaitIE IE
     
    'Merci de vous logger
    MsgBox "Merci de vous logger et d'appuyer ensuite sur 'Ok'", , "Login"
     
    'Récup numéro dernière ligne centre (ctr_max)
    'ctr_max = Sheets("Tools").Cells(Rows.Count, "J").End(xlUp).Row 'Non?
    'ctr_max = Tabadr(2)
     
    'Traite 1 centre à la fois. premier centre en Ligne 3.
    'For ctr_nbr = 3 To ctr_max
    For Each ctrRange In Ws_Tool.Range("J3", Ws_Tool.Cells(Ws_Tool.Rows.Count, "J").End(xlUp))
        'Centre code en colonne J representé par ctr_range
        'URL Données brutes en colonne K
        URL = ctrRange.Offset(0, 1)
     
        'check target Worsksheet exists and if not build
        Set Sheet_Found = Nothing
        On Error Resume Next
        Set Sheet_Found = Sheets(ctrRange)
        On Error GoTo 0
     
        If Not Sheet_Found Is Nothing Then
            Application.DisplayAlerts = False
            Sheet_Found.Cells.Clear
            Application.DisplayAlerts = True
            Sheet_Found
        Else
            Set Sheet_Found = Sheets.Add
            Sheet_Found.Name = ctrRange
            Sheet_Found.Activate 'si c'est vraiment vraiement utile
        End If
     
        'Une fois loggé, on charge les données brutes
     
        'Ouvre la page WEB
        IE.navigate URL
     
        'Attend qu'IE soit dispo
        WaitIE IE
     
        'On recupere les données brutes
        StrBrute = IE.document.body.innerText
     
     
        'On travaille les données
        Application.ScreenUpdating = False
     
     
        StartRecord = 1
        iOffsetL = 1
        Do
            'On recherche le prochain "{"
            StartRecord = InStr(StartRecord, StrBrute, "{") + 1
     
            'On recupere les données brutes d'un enregistrement
            StrRecord = Mid(StrBrute, StartRecord, InStr(StartRecord, StrBrute, "}") - 1 - StartRecord)
     
            'On éclate le Record dans un tableau
            Tab_Split = Split(StrRecord, ",")
     
            'On passe en revu chaque case
            For Each Cell_Tab_Split In Tab_Split
                'On vire le double quote "
                Cell_Tab_Split = Replace(Cell_Tab_Split, """", "")
     
     
                'On sépare encore en 2 si ":" présent
                iPosition = InStr(1, Cell_Tab_Split, ":")
                If iPosition <> 0 Then
                    'On a une entête de colonne et une valeur
                    StrEntete = Left(Cell_Tab_Split, iPosition - 1)
                    StrValue = Right(Cell_Tab_Split, Len(Cell_Tab_Split) - iPosition)
     
                    'On recherche si l'entete existe
                    Set TheCell = Sheet_Found.Rows(1).Find(StrEntete, LookIn:=xlValues, lookat:=xlWhole)
                    If TheCell Is Nothing Then 'Pas trouvé
                        'On rajoute une entré
                        Set TheCell = Sheet_Found.Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
                        TheCell = StrEntete
                    End If
     
                    'On regarde si la valeur doit etre mise en forme (cas des dates)
                    If Left(StrValue, 9) = "\\\/Date(" Then
                        dSeconde = CLng(Mid(StrValue, 10, 10)) '1270018722 000 On garde que les secondes
                        StrValue = Round(DateAdd("s", dSeconde, DateSerial(1970, 1, 1)), 0)
                        'On en profite pour changer le format de la cellule
                        TheCell.Offset(iOffsetL).NumberFormat = "mm/dd/yyyy"
                    End If
     
                    'On rajoute la donnée lié a l'entete, TheCell defini la colonne
                    ''On cherche la ligne (vu que je sais pas trop quelles données sont imperativement renseigné, je n'utilise pas End(xlup)
                    TheCell.Offset(iOffsetL) = StrValue
                End If 'Si pas ":" on ignore la ligne (a adapter au besoin)
            Next
            'TS : ligne suivante pour debug only
            'Sheets(ws).Cells(iOffsetL, 1) = StrRecord
            'On se prepare a renseigner la ligne suivante, avec le prochain enregistrement
            iOffsetL = iOffsetL + 1
        Loop While InStr(StartRecord, StrBrute, "{") <> 0
     
        Sheet_Found.Columns("A").Delete
        Application.ScreenUpdating = True
     
    Next
     
    'On ferme IE
     IE.Quit
     
     
    End Sub
     
     
    Sub WaitIE(IE As InternetExplorer)
    Do While IE.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
    End Sub
    ++
    Qwaz

  14. #14
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut Qwaz,

    quasi parfait.

    j'ai juste du remplacer ceci :
    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
        'check target Worsksheet exists and if not build
        Set Sheet_Found = Nothing
        On Error Resume Next
        Set Sheet_Found = Sheets(ctrRange)
        On Error GoTo 0
        
        If Not Sheet_Found Is Nothing Then
            Application.DisplayAlerts = False
            Sheet_Found.Cells.Clear
            Application.DisplayAlerts = True
            Sheet_Found
        Else
            Set Sheet_Found = Sheets.Add
            Sheet_Found.Name = ctrRange
            Sheet_Found.Activate 'si c'est vraiment vraiement utile
        End If
    par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        'check target Worsksheet exists and if not build
        Set Sheet_Found = Nothing
        On Error Resume Next
        Set Sheet_Found = Sheets(ctrRange.Value)
        On Error GoTo 0
     
        If Not Sheet_Found Is Nothing Then
            Application.DisplayAlerts = False
            Sheet_Found.Cells.Clear
            Application.DisplayAlerts = True
        Else
            Set Sheet_Found = Sheets.Add
            Sheet_Found.Name = ctrRange.Value
        End If
    Et pour cette remarque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'ctr_max = Sheets("Tools").Cells(Rows.Count, "J").End(xlUp).Row 'Non?
    oui oui OUIIIIIIIII, bien sûr. J'adopte ce format définitivement.
    Moi qui m'aventurais toujours dans des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("J65536").End(Xlup).row


    Merci aussi pour la conversion de la Timestamp en format Date.
    marrant, sur la plateforme ou je travaille le plus (IBM I5) le Timestamp est lisible en natif sous la forme, YYYY-MM-DD HH:MM:SSCCC et tu n'as plus qu'a tronquer.

    Encore merci pour tout.

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Pour le Sheet_Found qui traînait tout seul, c'est un oubli.
    Par contre, je ne comprend la nécessité de rajouter les .value derrière les ctrRange, le membre par défaut étant Value, ça devrait fonctionner sans le préciser, quelle erreur avais tu?

    Pour le TimeStamp, je ne connaissais pas, j'avoue avoir un peu galéré pour comprendre ce qu'il représente, un fois compris, j'ai trouvé que ca correspondait à un TimeStamp et pour la conversion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateAdd("s", dSeconde, DateSerial(1970, 1, 1))
    j'ai trouvé cette écriture sur le forum, et pour rendre à César ce qui lui appartient, c'est de AlainTech.

    ++
    Qwaz

  16. #16
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    quelle erreur avais tu?
    J'avais "Type mismatch" sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Sheet_Found = Sheets(ctrRange)

  17. #17
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    je remonte mon post car j'ai un drôle de phénomène avec mon code.

    Sur 3 pcs, aucun problème, sur le 4ème cela calle sur la ligne en gras.

    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
        'Ouvre la page WEB
        IE.navigate URL_Brute
        
        'Attend qu'IE soit dispo
        WaitIE IE
        
        'On recupere les données brutes
        StrBrute = IE.Document.body.innerText
        
        
        'recopie dans un fichier texte
        Open Text_file For Output As #1
        Print #1, StrBrute
        Close #1
        
       
        'On travaille les données
        Application.ScreenUpdating = False
        
        
        Me.TextBox2.Value = "Extraction des info. Patientez"
        Me.Repaint
        
        StartRecord = 1
        iOffsetL = 1
        Do
            'On recherche le prochain "{"
            StartRecord = InStr(StartRecord, StrBrute, "{") + 1
            
            If (InStr(StartRecord, StrBrute, "}") - 1 - StartRecord) < 1 Then
                    Open Text_file For Output As #1
                    Print #1, StrBrute
                    Print #1, "Probleme code 'InStr(StartRecord, StrBrute, '}') - 1 - StartRecord"
                    Print #1, "StartRecord = " & Str(StartRecord)
                    Print #1, "iOffsetL    = " & Str(iOffsetL)
                    Print #1, "InStr(StartRecord, StrBrute, '}') - 1 - StartRecord = " & Str(InStr(StartRecord, StrBrute, "}") - 1 - StartRecord)
                    Print #1, "URL Sql=" & URL_Brute
                    Close #1
                    IE.Quit
                    Me.TextBox4.Value = "Traitement en erreur. Fin anormale. Voir fichier " & Text_file
                    Me.Repaint
                    GoTo abort
            End If
            'On recupere les données brutes d'un enregistrement
            StrRecord = Mid(StrBrute, StartRecord, InStr(StartRecord, StrBrute, "}") - 1 - StartRecord)
    Donc j'ai modifié mon code pour traquer le problème. et après save des données récupérées dans un fichier texte, je m'aperçois que pour cette machine, les données ne sont pas récupérées de la page web dans leur intégralité mais qu'il semble que le transfert s'interrompe au beau milieu.
    ce qui explique que mon string de fin "}".

    je suppose qu'il faudrait donc ajouter quelquechose après cette ligne, ligne qui récupère le contenu de la page web.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        'On recupere les données brutes
        StrBrute = IE.Document.body.innerText
    Mais quoi ? Doevents ?
    Un appel à ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub WaitIE(IE As InternetExplorer)
    Do While IE.readyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
    End Sub
    Une quelconque boucle d'attente ?.

    Pas facile pour moi de tester car chez moi, cela fonctionne parfaitement.

    Si quelqu'un a une suggestion de génie, j'achète.
    ----------------Edit
    J'ai essayé comme ceci mais aucun changement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    StrBrute = IE.Document.body.innerText[
    Doevents
    'Attend qu'IE soit dispo
    WaitIE IE

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Bizarre, on lance la page contenant les données brut ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        'Ouvre la page WEB
        IE.navigate URL_Brute
    Puis on attend que les données brutes soient chargées complètement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        'Attend qu'IE soit dispo
        WaitIE IE
    Donc logiquement à partir d'ici la page devrait contenir l'intégralité des données, il serait bien d'afficher IE et de le vérifier directement sur ta page, histoire de voir si les données se chargent bien.
    Pour se faire, rajoute cette ligne juste après la création d'IE si ça n'est pas déjà le cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        'Affiche IE
        IE.Visible = True
    Essai également de regarder du coté de Java, voir si le pc qui pose problème a bien une version récente.

    Ps: Pas mal l'idée du Log, je te la piquerais peut être

    ++
    Qwaz

  19. #19
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut Qwaz,

    merci pour ta réponse.

    IE est déjà en visible et les données s'affichent bien. Quand on fait <Ctrl><A> puis Copy paste, on récupère aparament tout. Cela se passe comme si en fait il n'attendait pas que toutes les infos soient chargées pour continuer le code Etrange.

    Je regarde du côté de la machine Java, sinon je vais mettre un délai d'attente lors du chargement de la page et voir le résultat.

    A+

  20. #20
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Voilà,

    j'ai vérifié Java. Il y en avait 2 activés. j'ai désactivé le plus ancien.

    J'ai aussi changé le code, avant même de vérifier java et cela fonctionne.

    C'est à ne rien y comprendre car ma modif ne doit rien changer du tout, mais soit, la voici.
    Le code réussit à l'essai 1, donc l'attente ne se fait pas.

    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
    '....
        'Ouvre la page WEB
        IE.navigate URL_Brute
     
        'Attend qu'IE soit dispo
        WaitIE IE
     
        Trial = 1
        Pos_End = 0
     
        Do While Trial < 5 And Pos_End = 0
     
            Me.TextBox2.Value = "Extraction des info. Recherche fin des données. Essai " & Str(Trial) & " . Patientez."
            Me.Repaint
            'On recupere les données brutes
            StrBrute = IE.Document.body.innerText
            DoEvents
            WaitIE IE
            'Cherche la fin de la page
            Pos_End = InStr(1, StrBrute, "]")
            If Pos_End = 0 Then
                Trial = Trial + 1
                'pose de 5 secondes
                Minuterie 5000
            End If
     
        Loop
    Et dans 1 module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Declare Function GetTickCount Lib "Kernel32" () As Long
    Sub Minuterie(Milliseconde As Long)
     
        Dim Arret As Long
     
        Arret = GetTickCount() + Milliseconde
     
        Do While GetTickCount() < Arret
            DoEvents
        Loop
     
    End Sub

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

Discussions similaires

  1. Récupérer le contenu d'une page web protégée
    Par karoudja dans le forum Langage
    Réponses: 3
    Dernier message: 27/08/2007, 10h21
  2. récupérer le contenu d'une page web
    Par marielaure2805 dans le forum Langage
    Réponses: 4
    Dernier message: 28/02/2007, 13h12
  3. Récupérer le contenu d'une page web
    Par smarties dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 13/02/2007, 01h25
  4. [Servlet]Récupérer le contenu d'une page web
    Par Jarodnet dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 06/10/2005, 15h47

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