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ération de données de site web via VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif

    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2004
    Messages : 37
    Billets dans le blog
    1
    Par défaut Récupération de données de site web via VBA
    Bonjour,
    J'ai une procédure pour récupérer des données de site Web qui fonctionne mais pas sur un site en particulier avec lequel je travail régulièrement la procédure qui fonctionne est celle-ci:
    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 MajTx()
        'Ouverture
        Dim XMLReq
        Set XMLReq = CreateObject("MSXML2.XMLHTTP")
        XMLReq.Open "Get", "https://www.boursorama.com/cours.phtml?symbole=1xEURUS", False
        XMLReq.Send
        If XMLReq.Status <> 200 Then
            MsgBox "Problème " & XMLReq.Status & " " & XMLReq.Status.Text
            Exit Sub
        End If
     
        'Récupération
        Dim ExchangeRate As String
        Dim HTMLDoc
        Set HTMLDoc = CreateObject("htmlFile")
        HTMLDoc.body.innerHTML = XMLReq.ResponseText
        ExchangeRate = HTMLDoc.getElementsByClassName("c-instrument c-instrument--last").Item(0).innerHTML ' utilisez "c-instrument c-instrument--previousclose" pour valeur de la veille
     
        'Affichage
        Worksheets("Feuil1").Range("C2").Value = ExchangeRate
     
    End Sub
    Je l'ai modifier avec le site qui m'interesse et j'ai une erreur de type 424:

    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
    Sub KeepTechData()
        'Ouverture
        Dim XMLReq
        Set XMLReq = CreateObject("MSXML2.XMLHTTP")
        XMLReq.Open "Get", "https://www.sandvik.coromant.com/fr-fr/product-details?c=316-12HM450-12015P%201730", False
        XMLReq.Send
        If XMLReq.Status <> 200 Then
            MsgBox "Problème " & XMLReq.Status & " " & XMLReq.Status.Text
            Exit Sub
        End If
     
        'Récupération
        Dim ExchangeRate As String
        Dim HTMLDoc
        Set HTMLDoc = CreateObject("htmlFile")
        HTMLDoc.body.innerHTML = XMLReq.ResponseText
        Debug.Print HTMLDoc.body.innerHTML
        ExchangeRate = HTMLDoc.getElementsByClassName("_ngcontent-ng-c1811224674").Item(0).innerHTML
     
        'Affichage
        Worksheets("Feuil1").Range("C2").Value = ExchangeRate
     
    End Sub
    J'ai erreur 424 objet requit.
    Que puis je faire pour corriger cela?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 535
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 535
    Par défaut
    Salut,

    Ce type d'erreur peut se produire parce qu'une fonction peut ne rien renvoyer (Nothing), et tu te retrouves avec une instance invalide.
    Je suppose qu'il s'agit de cette instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExchangeRate = HTMLDoc.getElementsByClassName("_ngcontent-ng-c1811224674").Item(0).innerHTML
    Il n'y a pas 36 solution:
    Test le resultat de la recherche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Elements As Object
    Set Elements = HTMLDoc.getElementsByClassName("_ngcontent-ng-c1811224674")
     
    If Not(Elements Is Nothing) Then
        ExchangeRate = Elements.Item(0).innerHTML
    Else
        '// Recherche infructueuse
    End If

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 251
    Par défaut
    Hello,
    ton site génère des pages dynamiques c'est à dire que les pages sont "fabriquées" par un script javascript qui est exécuté par un navigateur qui la lit. Si tu récupères la page par l'objet MSXML2.XMLHTTP tu vas ne récupérer que le code source de la page c'est à dire que tu n'auras pas les scripts javascript exécutés. Pour ce type de pages il te faut Selenium Basic ou CDP qui pilotent un navigateur.
    Ami calmant, J.P

Discussions similaires

  1. Remplissage zone de texte/Appui bouton d'un site web via VBA
    Par ssamet dans le forum Général VBA
    Réponses: 7
    Dernier message: 28/02/2021, 20h18
  2. Réponses: 3
    Dernier message: 23/11/2011, 11h25
  3. probleme d'identification sur site web via python
    Par KINENVEU dans le forum Réseau/Web
    Réponses: 16
    Dernier message: 11/08/2009, 15h06
  4. Piloter une fonction d'un site Web via Excel
    Par Mac Twist dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/03/2008, 08h31
  5. Réponses: 2
    Dernier message: 08/11/2003, 23h42

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