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 :

[VBA-E] Boucle de traitement de codes sources de pages web


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Points : 130
    Points
    130
    Par défaut [VBA-E] Boucle de traitement de codes sources de pages web
    Bonjour,

    J'ai envie d'apprendre à récupérer des infos dans les codes sources de pages web.

    Mais je ne veux pas simplement traiter une page, mais des milliers... J'ai essayé avec le code suivant (j'ai juste un formulaire avec un bouton enregistrer et un webbrowser):

    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
    Private g_f_Donn As Worksheet
    Private Profil As Long
    Private Donnees As Variant
    Private chargement_ok As Boolean
     
    Private Sub Enregistrer_Click()
        Set g_f_Donn = ThisWorkbook.Worksheets("Profils")
        Enregistrer_Profils
    End Sub
     
    Sub Enregistrer_Profils()
     
        Dim Donnees As Variant
     
        Profil = 1
     
        While Profil <= 1000
     
            chargement_ok = False
            WebBrowser1.Navigate2 "http://www.XXX.Net/forums/member.php?u=" & Profil
     
            Do Until chargement_ok
                DoEvents
            Loop
     
            If Not WebBrowser1.document Is Nothing Then
                Application.Wait Now + TimeValue("00:00:01")
                Donnees = WebBrowser1.document.body.innerHTML
            Else
                Donnees = ""
            End If
     
            debut_nom = InStr(Donnees, "<STRONG>")
     
            If debut_nom > 1 Then
                Fin_Nom = InStr(debut_nom, Donnees, "</STRONG>")
                Nom = LCase(Mid(Donnees, debut_nom + 8, Fin_Nom - debut_nom - 9))
            Else
                Nom = "Erreur"
            End If
     
            g_f_Donn.Cells(Profil, 1) = Profil
            g_f_Donn.Cells(Profil, 2) = Nom
            Profil = Profil + 1
        Wend
     
    End Sub
     
    Private Sub WebBrowser1_DownloadComplete()
        chargement_ok = True
    End Sub
    Je rencontre 2 problêmes indépendants à l'éxécution :

    - La plupart du temps, le prog marche pour les 10, 20 premières pages puis il semble rentrer dans une boucle infinie (comme si le prog s'arretait sur une page inchargeable et que chargement_ok ne passait plus jamais à true.

    - Parfois le test If Not WebBrowser1.document Is Nothing réussit, mais le programme plante à la ligne d'initialisation de la variable Donnees. Si je rentre en mode debug et tente de continuer en pas à pas, je passe cette erreur sans problèmes et sans avoir à remodifier le code

    Je semble donc avoir des problèmes de synchro... ou de surcharge mémoire... ou les deux...

    Quelqu'un a-t-il déjà essayé de telles boucles ???

    NB : le site sur lequel je teste mon code n'est pas xxx.net, ni developpez.net, mais c'est un forum php similaire.
    "Ne soyez rien, devenez sans cesse"

  2. #2
    Membre habitué Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Points : 130
    Points
    130
    Par défaut
    Toujours pas de résultat convaincant avec un controle webbrowser...

    J'ai donc changé de méthode, et ai repris le code suivant de Bbil :

    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
    ' Penser à
    ' Rajouter la référence "Mircrosof Internet control" 
    '
    Dim IE As InternetExplorer
     
    '
    ' Verifie si IE déjà lancé et le relance si c'est pas le cas
    ' !! Attention utilise une variable globale IE as Internet Explorer...
    '
    Sub VerifieIE()
      On Error GoTo CreerIE
       If Not IE Is Nothing Then
         IE.Visible = True
        Exit Sub
       End If
    CreerIE:
      Set IE = CreateObject("InternetExplorer.Application")
      IE.Visible = True
    End Sub
    '
    ' Fonction ouvre lien
    ' Param : stLien : url à ouvrir
    '     Optionel :bAttentOuverture.. si True ne rend la "main" qu'une fois l'url totalement chargée
    '
    Sub OuvreLien(stLien As String, Optional bAttenteOuverture As Boolean = True)
            VerifieIE
            IE.Navigate stLien
            Cancel = True
        While Not IE.ReadyState = READYSTATE_COMPLETE And bAttenteOuverture
          DoEvents
        Wend
        Debug.Print "Fin ouverture " & stLien
    End Sub
     
    '
    ' test
    ' exemple d'utilisation...
    ' Sélectionné d'abords une plage de cellule contenant adresses à ouvrir...
    '
    Sub test()
     Dim c
     For Each c In Selection
      OuvreLien c.Value
      Application.Wait (Now + TimeValue("00:00:02"))
     
     Next
    End Sub

    Ce code fonctionne, même en le bouclant (testé sur 500 pages d'affilée), à la seule condition de placer une tempo après ouvrelien, sinon chez moi ça à tendance à planter, toujours je pense à cause d'un non chargement complet de la page chargée.

    Pb résolu, même si j'aimerai pouvoir faire la même chose avec un webbrowser, je laisse donc la discussion ouverte.
    "Ne soyez rien, devenez sans cesse"

Discussions similaires

  1. [XL-2007] coder un traitement plusieurs fois à une même page web en vba
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/02/2011, 10h13
  2. Réponses: 5
    Dernier message: 09/04/2010, 01h21
  3. Travailler en équipe autour d'un code source d'app web
    Par bruce-willis dans le forum ALM
    Réponses: 6
    Dernier message: 14/02/2010, 13h26
  4. Protéger le code sources des pages aspx ?
    Par insane_80 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/09/2008, 12h01

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