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 web de données [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2017
    Messages : 8
    Par défaut Récupération web de données
    Tout d'abord,
    Bonjour à tous,
    Je précise que je suis novice total en VBA.
    J'ai un souci, j'ai créé une petite macro me permettant de récupérer prix et disponibilités de produits de mon fournisseur pour les importer sur Excel.
    La macro fonctionne comme je veux jusque ".document.all("submit_search").Click", c'est après que je n'arrive pas à trouver comment extraire prix et disponibilité du code source de la page du produit.
    Dans le code source, les prix et disponibilités qui m'intéressent sont <span class="price" et <span class="availability">

    Le code de ma macro est le suivant:

    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 Recherche1()
    Dim url
    url = "http://www.bio-express.fr/catalogue/search.php"
    i = Sheets("Catalogue").Cells(2, 4)
    crawler url, i
    End Sub
     
    Function crawler(url, reference)
    Dim IE As Object, doc As Object, x As Variant, myValue As String, myValue1 As String
    Set IE = CreateObject("internetexplorer.application")
    With IE
    .Navigate url
    .Visible = True
    Do: DoEvents: Loop While .readystate <> 4 Or .Busy
    If .locationurl = "http://www.bio-express.fr/catalogue/search.php" Then
    .document.all("search_query").innerText = reference
    Do: DoEvents: Loop While .readystate <> 4 Or .Busy
    .document.all("submit_search").Click
    Do: DoEvents: Loop While .readystate <> 4 Or .Busy
    .document.getElementsByClassName("price") = myValue
    myValue = Sheets("Catalogue").Cells(2, 3)
    MsgBox myValue
    .document.getElementsByClassName("availability") = myValue1
    myValue1 = Sheets("Catalogue").Cells(2, 5)
    End If
    End With
    End Function
    Voici l'extrait type du code source de la fiche produit.

    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
     
     
    </form>
    <!-- /Sort products -->
    <!-- Products list -->
    <ul id="product_list" class="clear">
    <li class="ajax_block_product first_item item clearfix">
    <div class="center_block">
    <a href="http://www.bio-express.fr/catalogue/product.php?id_product=128979" class="product_img_link" title="B-Force (Levure de Bi&egrave;re) - 250 comprim&eacute;s "><img src="/catalogue/img/p/128979-21363-home.jpg" alt="04209023" /></a>
    <span>Abbaye de Sept-Fons</span>
    <h3><a href="http://www.bio-express.fr/catalogue/product.php?id_product=128979" title="B-Force (Levure de Bi&egrave;re) - 250 comprim&eacute;s ">B-Force (Levure de Bi&egrave;re) - 250 comprim&eacute;s </a></h3>
    <!--<p class="product_desc"><a href="http://www.bio-express.fr/catalogue/product.php?id_product=128979" title="Pas de description disponible pour ce produit. Vous pouvez contacter la télévent&hellip;">Pas de description disponible pour ce produit. Vous pouvez contacter la télévent&hellip;</a></p>-->
    <p class="product_desc">
    <div class="discount_list_other_discounts">
    Pour 6 achet&eacute;s =
    -10%
    </div>
    </p>
    </div>
    <div class="right_block">
    <div>
    <span class="price" style="display: inline;">4,07 €</span><br />
    <span class="availability">
    <span class="prod_stock_list prod_stock_caution">Stock &lt; 10 !</span>
    </span>
    </div>
    En l'attente de vos réponses, bonne journée à tous.

  2. #2
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2017
    Messages : 8
    Par défaut Solution trouvée
    Pour ceux à qui ça peut être utile, voici le code qui fonctionne:
    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 Recherche()
        Dim url
        url = "http://www.bio-express.fr/catalogue/search.php"
        i = Sheets("Catalogue").Cells(2, 4)
        crawler url, i
    End Sub
    Function crawler(url, reference)
        Dim IE As Object, doc As Object, myValue As String, myValue1 As String
     
        Set IE = CreateObject("internetexplorer.application")
        With IE
            .Navigate url
            .Visible = False
            Do: DoEvents: Loop While .readystate <> 4 Or .Busy
            If .LocationURL = "http://www.bio-express.fr/catalogue/search.php" Then
                .document.all("search_query").innerText = reference
                Do: DoEvents: Loop While .readystate <> 4 Or .Busy
                .document.all("submit_search").Click
                Do: DoEvents: Loop While .readystate <> 4 Or .Busy
                myValue = (IE.document.getElementsByClassName("price")(0).innerText)
                Sheets("Catalogue").Cells(2, 3) = myValue
                Do: DoEvents: Loop While .readystate <> 4 Or .Busy
                myValue1 = (IE.document.getElementsByClassName("availability")(0).innerText)
                Sheets("Catalogue").Cells(2, 5) = myValue1
            End If
        End With
    End Function
    Reste juste une erreur 91 qui subsiste lorsque je veux exécuter la macro en boucle.

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    pourrais tu enfin donner deux ou 3 références pour que l'on puisse tester
    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. #4
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2017
    Messages : 8
    Par défaut
    Bonjour,
    Je veux bien, mais vu qu'il faut se connecter au site avec mon identifiant et mot de passe avant de pouvoir faire marcher la macro "Recherche" (qui ne fonctionne qu'en pas à pas détaillé, toujours l'erreur 91).
    Est-ce que je peux t'envoyer en MP mon fichier excel entier?
    Cordialement

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    oui j'ai vu qu'il fallait des identifiants
    il me faut ca et 2 ou 3 références valides c'est tout: envoie par MP si tu veux y a pas de soucis
    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

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    je t'ai tout envoyé par MP confidentialité oblige
    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

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

Discussions similaires

  1. récupération automatique de données à partir du web
    Par harrat dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/01/2011, 20h35
  2. [ODBC] Récupération d'une donnée pour insertion dans une autre table
    Par rom950 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/03/2006, 17h13
  3. [Récupération]Base de données après problème disque
    Par Cyborg289 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 15/02/2006, 15h08
  4. Réponses: 2
    Dernier message: 14/10/2005, 10h11
  5. Réponses: 4
    Dernier message: 11/06/2004, 16h27

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