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 :

Extraire des données en ciblant des ID, dans le code source d'une page web ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 93
    Points : 52
    Points
    52
    Par défaut Extraire des données en ciblant des ID, dans le code source d'une page web ?
    Bonjour à tous !

    Je vais essayer de simplifier au maximum ma demande et de la retranscrire le plus clairement possible, ma première tentative était un peu brouillonne . J'ai regardé des faq et des tutos sans que j'arrive à concevoir les lignes miracles qui me sauveront.
    - Ma demande ne concerne que le ciblage des données, le reste est fait.
    - J'ai donc une liste d'ID dans ma colonne AA
    - Je génère une page web et un code source qui rassemble toutes les données que j'ai besoin pour toutes mes ID
    - Je souhaiterai extraire en boucle une donnée pour chaque ID et mettre cette donnée dans la cellule à côté de l'ID

    Voici ci-dessous à quoi ressemble le code source de la page web. "<reference></reference>" se répéte autant de fois que j'ai d'ID. La donnée souhaitait ("<contenu><global><donnee><amount>") et l'ID sont enfants de référence, la donnée souhaitait n'est donc pas enfant de l'ID. Je rajouterai que dans le code source, les ID n'apparaisent pas dans le même ordre que dans ma colonne.

    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
    <reference>
        - <ID>une de mes ID contenu dans une cellule excel</ID>
        + <...></...>
        - <contenu>
    	+ <...></...>
            - <global>
               + <...></...>
               - <donnee>
                    <amount>"ID.Offset(0, 1)", donné souhaitait</amount>
                 </donnee>
    	   + <...></...>
             </global>
             + <...></...>
          </contenu>  
    </reference>
     
    <reference>
    	- <ID>une autre ID contenu dans une cellule excel</ID>
    	...
    </reference>
     
    <reference>
    ...X48...
    </reference>

    Voici la macro que j'ai crée avec mes pauvres connaissances:

    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
    Dim ListingID As String
    Dim Url As String
    Dim ID As Range
    Dim Code As String
    Dim donneesouhaitait As String
     
     
    'concatenation des ID de ma colonne AA, en les mettant sur une seule ligne avec un tiret entre chaque
    ThisWorkbook.Worksheets("Feuill1").Range("C2").FormulaLocal = "=Concatplage(A2:A50;""-"")"
    ListingID = ThisWorkbook.Worksheets("feuill1").Range("C2")
     
    'génération de l'url
    Url = "http://www.site.com/" & ListingID
     
    'génération du code source contenant les données
    Code = PostCodeSource(Url)
     
    'extraction des données utiles avec une boucle
    For Each ID In ThisWorkbook.Worksheets("feuill1").Range("A2:A50")
     
    ' c'est ici que je bloque...que faire ???
    ' ??? Cible = Code.getElementsByTagName("ID")??? 
    ' ??? donneesouhaitait = Cible (Split(Split(Code, "<reference><contenu><global><donnee><amount>")(1), "</amount>")(0)) ???
     
    ID.Offset(0, 1) = donneesouhaitait
     
    Next ID
    Merci pour votre aide car je patauge, je rame et des fois je m'envole.

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour,

    voici un exemple récent dans cette discussion,
    j'y ai fourni un lien vers la bible de ce forum et son tutoriel pour débutant …

    De nombreux autres exemples sont disponibles via une p'tite recherche !

    Maintenant en comparant le titre de cette discussion et les explications, j'ai du mal à faire la relation ‼

    Voir l'utilisation de l'objet HTMLFile pour charger directement du code HTML dans cette autre discussion
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 93
    Points : 52
    Points
    52
    Par défaut
    Merci pour ta contribution.

    J'ai bien vu la discussion mais je pense que c'est loin de ce que je dois faire. Y aurait-il un exemple qui se rapproche plus?

    J'ai fait ce code mais cela ne marche pas, il manque plein de trucs je pense. Çà extrait que la première donnée
    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 test1()
     
    Dim C As Range
    Dim ListingID As String
     
    Dim IE, IEdoc
     
     
    ThisWorkbook.Worksheets("TEST").Range("C1").FormulaLocal = "=Concatplage(A1:A2;"","")"
    ListingID = ThisWorkbook.Worksheets("TEST").Range("C1")
     
    Set IE = CreateObject("internetexplorer.application")
    IE.Visible = False
    IE.navigate "http://www.site.com/" & ListingID
    Do: DoEvents: Loop Until IE.readyState = 4
     
     
    For Each C In ThisWorkbook.Worksheets("TEST").Range("A1:A2")
     
    'je ne sais pas où je dois mettre la dimension C, où il y a l'id que je dois cibler pour ensuite aller ensuite vers la valeur dans l'amount
     
    Set element = IE.document.getElementsByTagName("ID")
     
    C.Offset(0, 1) = IE.document.getElementsByTagName("amount")(0).innerText
     
    Next IDR
     
    IE.Quit
    End Sub
    Merci encore

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut


    Effectuer donc une recherche pour trouver d'autres exemples …

    Sinon à quoi peut bien servir la ligne n°22 ?

    Si une collection contient plusieurs éléments (ligne n°24), utiliser une boucle For Each par exemple pour la parcourir …

    Rappel du B-A-BA : suivre son code en mode pas à pas (touche F8) et contrôler le contenu de la fenêtre Variables locales
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 93
    Points : 52
    Points
    52
    Par défaut
    Oui je bloque a partir de la ligne 22, je sais que ça marche pas car je suis bloqué

    J'ai du mal, je crois, a faire comprendre ce que je veux faire. L’exemple donné dans la première discussion est éloigné car il ne s'agit que d'une donnée à extraire, alors qu'ici j'en aurais jusqu'à 100 à prendre sur la même page HTML/XML représentée sous la forme de 100 arbres plus ou moins identiques.

    Il faut que je rapatrie "a la chaine" les données contenu dans les balises "<donnee><amount>" en ciblant la valeur contenu dans les balises <ID> au dessus (qui ne sont pas père). Cette valeur ID cible "C" est dans une colonne du tableau excel.

    Je suis au bord de l’abandon, mais c'est crucial que j'arrive car c'est pour moi un projet très important. Je suis presque certain qu'il ne s'agit que de 3 ou 4 lignes à insérer dans ma boucle for each.

    Patriiick à l'aide !!!

Discussions similaires

  1. [MySQL] Comment extraire des données dans un fichier .svc depuis une page web
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/12/2013, 12h02
  2. [WD12] Info manquante dans le code source d'une page web
    Par zouzoukha dans le forum WinDev
    Réponses: 12
    Dernier message: 18/06/2012, 04h21
  3. [XL-2003] Vb auto récupération de valeur dans le code source de plusieurs pages web
    Par Supremereboot dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/04/2011, 12h36
  4. Réponses: 7
    Dernier message: 02/11/2010, 13h36
  5. Réponses: 2
    Dernier message: 06/06/2010, 15h15

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