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 :

Cliquer sur un lien a href dans un code source (qui ne s'affiche pas complètement) [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2014
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Cliquer sur un lien a href dans un code source (qui ne s'affiche pas complètement)
    Bonjour à tous !

    Merci pour votre super forum, j'apprends super vite !

    J'écris aujourd'hui car je ne parviens pas à cliquer sur un lien de type <a href="/..."> présent au sein du code source HTML d'une page web.
    Ma démarche est de me rendre sur cette page via VBA, puis d'en extraire le code, pour ensuite faire une recherche du lien voulu, et enfin cliquer dessus grâce à la commande .click
    Cependant, lorsque j'affiche le code via une msgbox, ce dernier n'est pas complet ! Ainsi, la recherche est impossible .

    Voici mon 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
     
    Sub RecupCodeSource()
    'récupérer le code source d'une page
     
    'Déclaration des variables
    Dim CodeSource As String
    Dim IE As Object
     
    'Identifier IE comme un objet
    Set IE = CreateObject("InternetExplorer.Application")
     
    'Rendre la navigation invisible (ou pas)
    IE.Visible = False 'ou True
     
    'Lancer IE
    IE.Navigate URL:="http://courses.carrefour.fr/drive/recherche/3038359002335/true"
     
    'Attendre le chargement complet de la page
    Do Until IE.readyState = 4
         DoEvents
    Loop
     
    'Récupérer le code source dans une variable
    CodeSource = IE.document.body.innerHTML
     
    'Afficher le code source dans un MsgBox
    MsgBox CodeSource
     
    End Sub
    Le lien que je cherche à extraire est celui du produit que retourne la recherche (à savoir la fiche produit de la sauce tomate).

    J'ai bien lu le cours très bien de fait de Qwazerty IEetVBA, cependant, je ne comprends pas trop les recherches via name et id (mon lien ne semble pas en avoir d'ailleurs).

    En vous remerciant par avance pour votre aide,

    Guillaume.

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Salut GuillaumeMorel,

    Ta variable CodeSource contient bien l'ensemble du code de la page. Mais ta MsgBox ne peut afficher le tout car celle-ci contient un nombre limité de caractère.
    Il faudrait ouvrir un éditeur de texte et d'insérer le code pour plus de visibilité.

    Avec ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Close
      'chemin à placer
      chemin = "C:\Users\...\Desktop\VBA\"
      Open chemin & "Fichier.txt" For Output As #1
      Print #1, CodeSource
      Close
    Cordialement,
    Kimy

  3. #3
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Utilise un UserForm avec 1 Label et un ScrollBar pour afficher tout le code (je te conseille d'utiliser la plus grande hauteur et largeur). Un exemple bidouillé où il va te falloir te pencher sur la gestion de la hauteur du Label par rapport au nombre de lignes (calcul de la hauteur des caractères, voir avec API, être sûr du nombre de retour à la ligne, etc...). La porc se lance sur Click dans le Label :
    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
     
    Private Sub Label1_Click()
     
        Dim CodeSource As String
        Dim IE As Object
        Dim Max As Long
     
        'Identifier IE comme un objet
        Set IE = CreateObject("InternetExplorer.Application")
     
        'Rendre la navigation invisible (ou pas)
        IE.Visible = False 'ou True
     
        'Lancer IE
        IE.Navigate URL:="http://courses.carrefour.fr/drive/recherche/3038359002335/true"
     
        'Attendre le chargement complet de la page
        Do Until IE.readyState = 4
     
             DoEvents
     
        Loop
     
        'Récupérer le code source dans une variable
        CodeSource = IE.document.body.innerHTML
     
        Max = UBound(Split(CodeSource, Chr(13)))
     
        Label1.Height = Max * 15
     
        'Afficher le code source dans un Label
        Label1.Caption = CodeSource
     
    End Sub
     
    Private Sub ScrollBar1_Change()
     
        Label1.Top = -ScrollBar1.Value
     
    End Sub
    Hervé.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2014
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Isoler le lien
    Salut Kimy et Hervé !

    Merci à vous deux, je peux maintenant continuer !

    Je pense à isoler le 7ème lien du code (c’est toujours ce lien qui est concerné, quel que soit le produit recherché).

    J'ai donc :
    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
     
    Sub RecupCodeSource()
    'récupérer le code source d'une page
     
    'Déclaration des variables
    Dim IE As Object
    Dim Lien As HTMLAnchorElement
     
    'Identifier IE comme un objet
    Set IE = CreateObject("InternetExplorer.Application")
     
    'Rendre la navigation invisible
    IE.Visible = False
     
    'Lancer IE
    IE.Navigate URL:="http://courses.carrefour.fr/drive/recherche/3038359002335/true"
     
    Do Until IE.readyState = 4
         DoEvents
    Loop
     
    'Relever le 7ème lien du code et l'inscrire dans "Lien"
    Set Lien = IE.document.body.Links(6)
     
    MsgBox Lien
     
    End Sub
    Mais VBA me renvoit l'érreur 438 : Propriété ou méthode non géré par cet objet, un problème de langage sans doute, pouvez-vous m'aider ?

    Merci,

    Guillaume.

  5. #5
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    GuillaumeMorel,

    Mon code marche ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub RecupCodeSource()
     
    Dim CodeSource As String
    Dim IE As New InternetExplorer
     
    Dim IEDoc As HTMLDocument
    Dim Actualite As HTMLAnchorElement
     
    IE.Navigate URL:="http://courses.carrefour.fr/drive/recherche/3038359002335/true"
    IE.Visible = False
     
    WaitIE IE
     
    Set IEDoc = IE.document
     
    MsgBox IEDoc.Links(1)
     
    End Sub
     
    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
    As-tu déclaré les références "Microsoft HTML Object Library" et "Microsoft Internet Controls" ?

    Cordialement,
    Kimy

    EDIT : ton erreur est ici : Set Lien = IE.document.Links(6) en fait.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2014
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Parfait !
    Super merci ça marche !

    Cependant, juste pour ma conscience personnelle, peux tu m'expliquer le fait de déclarer IEdoc comme un objet ?
    Pourquoi le fait de passer par :

    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
     
     
    Sub RecupCodeSource()
    'récupérer le code source d'une page
     
    'Déclaration des variables
    Dim IE As Object
    Dim Lien As String
     
    'Identifier IE comme un objet
    Set IE = CreateObject("InternetExplorer.Application")
     
    'Rendre la navigation invisible
    IE.Visible = False
     
    'Lancer IE
    IE.Navigate URL:="http://courses.carrefour.fr/drive/recherche/3038359002335/true"
     
    'Attendre le chargement complet de la page
    Do Until IE.readyState = 4
         DoEvents
    Loop
     
    Lien = IE.document.Links(1)
     
    MsgBox Lien
     
    End Sub
    Ne fonctionne pas ?

    Merci encore,

    Guillaume

  7. #7
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Salut GuillaumeMorel,

    Comme je te le disais, je ne pense pas que ce soit le fait de déclarer IE as an Object qui fait planter ta macro.

    C'est le fait que tu cherches des "Links(i)" dans le "Body" au lieu de la faire dans le "Document" :

    ERREUR : IE.document.body.Links(6).
    CORRECTION : IE.document.Links(6).

    De plus, le fait de faire un EarlyBinding (conversation entre Marc-L, rdurupt et moi de la semaine dernière ici) te permet de savoir qu'elles sont les méthodes dépendantes des autres grâce à l'auto-complétion.

    C'est de cette manière que j'ai trouvé ton erreur.

    Cordialement,
    Kimy

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

Discussions similaires

  1. Réponses: 28
    Dernier message: 02/09/2010, 18h03
  2. Ouvrir un pop, cliquer sur un lien et changer la page d'origine
    Par JackBeauregard dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 12/11/2006, 10h38
  3. cliquer sur un lien hypertext
    Par mqsi dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/11/2006, 19h35
  4. Cliquer sur un lien en javascript
    Par flagadda dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/09/2006, 14h11
  5. Réponses: 2
    Dernier message: 19/08/2006, 16h40

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