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 sur différents sites web [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 113
    Par défaut Récupération de données sur différents sites web
    Bonjour à tous,

    Je cherche à me constituer une base de données sur Excel, voire Access, listant toutes les sociétés et me donnant des informations les concernant, la recherche s'effectuant suivant 2 critères : le code APE (ou NAF, c'est pareil) et le département.
    Problème : bien que j'ai déjà passé pas mal de temps à apprendre à utiliser VBA, je n'ai pas beaucoup d'opportunités pour m'entrainer, ce qui fait que je suis encore novice et je bloque sur comment faire.
    Je sais qu'il faut étudier l'architecture du site internet, mais ça s'arrête là et j'espère que vous pourrez me venir en aide assez rapidement.

    Voici les sites qui me permettent de réaliser cette recherche :
    • alsaeco.com : Listing des sociétés + quelques infos. Avec les variables num_departement et codeAPE, on peut accéder directement au listing des sociétés par ce lien : "http://www.alsaeco.com/entreprises/recherche.html?aeadirectoryParam[raison]=&aeadirectoryParam[siret]=&aeadirectoryParam[siren]=&aeadirectoryParam[commune]=&aeadirectoryParam[departement]=" & num_departement & "&aeadirectoryParam[dirigeant]=&aeadirectoryParam[ape]=" & codeAPE & "&aeadirectoryParam[submit]=Rechercher"
      Par contre, il n'y a que 10 sociétés par page, il faut donc naviguer au fur et à mesure, et il faut ouvrir à chaque fois une nouvelle page pour avoir les infos de chaque société
    • societe.com : comme ci-dessus. La page avec le listing des sociétés est accessible depuis ce lien : "http://www.societe.com/cgi-bin/liste?nom=&dirig=&pre=&ape=" & codeAPE & "&dep=" & num_departement
    • verif.com : comme ci-dessus. A noter, je peux sélectionner les mêmes critères mais l'adresse du listing des sociétés ne reprend pas les 2 variables ci-dessus (codeAPE et num_departement)
    • infogreffe.fr : pas de listing, il faut préciser ici le nom de la société ou son numéro SIREN dans la barre de recherche
    • pagespro.com : idem que pour le site infogreffe
    • pagesjaunes.fr ou encore pagesjaunespro : pagesjaunespro permet d'accéder à un listing de sociétés en fonction des 2 critères et pagesjaunes.fr permet d'avoir plusieurs fiches pour la "même" société, avec des infos différentes (ex : les horaires apparaissent sur certaines fiches mais pas sur toutes)
    • bilansgratuits.fr : permet d'avoir des infos en fonction du numéro SIREN
    • lentreprise.lexpress.fr/palmares-entreprises/ : permet d'avoir des infos en fonction du nom de la société


    J'avais commencé à faire ça manuellement avec le 1er site, en collant sur Excel la page pour une société puis en y recherchant l'info par des formules. Ca marche bien mais c'est vraiment très long à faire.
    J'espère que vous pourrez me venir en aide, car c'est un projet vraiment important pour moi.

    Merci d'avance

  2. #2
    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
    voici un exemple vite fait avec société.com en utilisant seulement le code Ape et le departement
    dans cet exemple on peut utiliser le nom,leprenom,le dirigeant,le code Ape ,le departement
    tous ces argument sont en optional donc tu les met si tu les a
    il faut au moins que le code Ape y soit
    la fonction te liste dans la fenetre d'execution la liste des entreprise trouvées
    pour le coup j'ai utilisé mon code APE je suis sur qu'il existe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
    '4332 A
    cherche , , , "4332A", 83     ' entre chaque virgule vont les données correspondant au argument de la fonction cherche dans le meme ordre 
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function cherche(Optional nom As String = "", Optional dirigant As String = "", Optional prenom As String = "", Optional ape As String = "", Optional depart As String = "")
    Dim URL, IE
    URL = "http://www.societe.com/cgi-bin/liste?nom=" & nom & "&dirig=" & dirigant & "&pre=" & prenom & "&ape=" & ape & "&dep=" & depart
    Set IE = CreateObject("internetexplorer.application")
    IE.navigate URL
    IE.Visible = True
    Do: DoEvents: Loop While IE.readystate <> 4 Or IE.busy
    IE.document.getelementbyid("buttliste").Children(0).Click ' on click sur le bouton orange en bas de page pour avoir toute la liste
    For Each elem In IE.document.all
    ' chaque entreprise se trouve dans une balises"div" avec pour classname "résultat"
    If elem.classname = "resultat" Then texte = texte & vbCrLf & elem.innertext
    Next
    Debug.Print texte
    End Function
    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

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 113
    Par défaut
    Merci beaucoup pour cette réponse super rapide

    J'ai regardé ce que ton code me donnait : il m'ouvre une fenêtre IE à l'adresse de la recherche listant les sociétés, et c'est tout pour l'instant.

    Il reste donc à voir la page de chaque société et d'y récupérer les infos clés dans mon fichier Excel.
    A mon avis, on peut le faire en 2 temps :
    1. on récupère le nom des sociétés dans la colonne A
    2. on relance une recherche, basée cette fois sur le nom des sociétés

    Pour la 1ère étape, j'ai tenté d'adapter la fonction cherche() :
    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
    Sub test()
    '4332 A
    cherche , , , "4332A", 83     ' entre chaque virgule vont les données correspondant au argument de la fonction cherche dans le meme ordre
    End Sub
     
    Function cherche(Optional nom As String = "", Optional dirigant As String = "", Optional prenom As String = "", Optional ape As String = "", Optional depart As String = "")
    Dim URL, IE
    Dim numero_Ligne As Integer
    numero_Ligne = 1
    Dim varFeuille As Worksheet
    Set varFeuille = ActiveSheet
    URL = "http://www.societe.com/cgi-bin/liste?nom=" & nom & "&dirig=" & dirigant & "&pre=" & prenom & "&ape=" & ape & "&dep=" & depart
    Set IE = CreateObject("internetexplorer.application")
     
    'Accès au site web
    IE.navigate URL
    IE.Visible = True ' Affichage de la fenêtre IE activé
    Do: DoEvents: Loop While IE.readystate <> 4 Or IE.busy
    IE.document.getelementbyid("buttliste").Children(0).Click ' on click sur le bouton orange en bas de page pour avoir toute la liste
     
    For Each elem In IE.document.all
    ' chaque entreprise se trouve dans une balises "div" avec pour classname "resultat"
        If elem.classname = "resultat" Then
            texte = vbCrLf & elem.innertext
            varFeuille.Cells(numero_Ligne, 1) = texte
            numero_Ligne = numero_Ligne + 1
        End If
    Next
     
    Debug.Print texte
    MsgBox "Scan terminé"
    End Function
    Ca fonctionne bien, sauf que le texte pour chaque société est trop long. Il m'affiche les BR ainsi que le code APE et la ville.
    J'ai tenté la balise "span" avec pour classname "lien", qui ne comporte que le nom de la société, mais il me reste un retour à la ligne en trop (et je ne comprends pas pourquoi car il n'y a pas de BR), et d'autres balises comportent apparemment cette classname également, ce qui me donne des cellules incorrectes.
    Il faudrait cibler les balises span avec classname "lien" à l'intérieur des balise div avec classname "resultat" et enlever le retour à la ligne en trop.
    Comment peut-on faire ça ?

    Remarque, qui n'a rien a voir avec le code : Je constate que le bouton "buttliste" sur le site web n'affiche pas toutes les sociétés, mais en affiche juste un peu plus. J'ai pas compté, mais on semble loin des 1316 entreprises indiquées (d'après mon code VBA, il y aurait 200 sociétés affichées). Ca va être compliqué de faire un listing avec ce site. On peut tout de même continuer avec ce site pour l'instant afin de finaliser le code.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 113
    Par défaut
    C'est bon, après de longues semaines de travail acharné, ça fonctionne totalement pour l'un des sites. Reste à adapter mon code aux autres sites.
    Merci à ceux qui se seront penchés sur la question, même si je n'ai pas eu de réponse depuis.

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

Discussions similaires

  1. Récupération de données sur un site tiers
    Par Miclol dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 26/03/2011, 10h18
  2. récupération de donnée sur un site web
    Par Wamdeus dans le forum C#
    Réponses: 1
    Dernier message: 12/05/2010, 11h10
  3. récupération de données sur une page web
    Par tomkiki dans le forum Web & réseau
    Réponses: 2
    Dernier message: 26/10/2009, 08h38
  4. automate pour récupérer des données sur un site web
    Par castor75 dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 19h59
  5. Insertion automatique de données sur un site web
    Par Bilbo67 dans le forum Access
    Réponses: 5
    Dernier message: 02/02/2007, 14h20

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