Extraire l'intérieur d'une table VBA

Bonjour,

je viens vous car je ne trouve pas la solution à mon pb.

D'abord merci a ceux qui voudront bien me donner un petit coup de pouce. Je n'ai pas de connaissance particuliere mais je suis prêt à apprendre sans soucis

Voila je voudrais créer un tableur excel qui me permettrait de faire de veille concurrentielle à savoir:

Je souhaiterait qu'il y ait une colonne avec le nom de produit

une autre qui correspondrait au prix de mon site et enfin deux dernières qui correspondraient au prix de ce même produit mais de deux sites concurrents.

Donc est-il possible de dire a excel dans une colonne l'adresse web de la page ou se trouve le produit et que lui aille chercher l'info du prix qui se trouve dans un bout de code (qui est toujours le même quelque soit la page) et qu'il affiche du coup le prix dans une cellule.

En utilisant safari j'ai vu que le bout de code etait le suivant à l'interieur d'une table :

<div class="tr-price-primary" itemprop="price">298 €</div>

et je voudrais qui recupere l'info 298 euros.

J'ai environ 1500 produits, je suis prêt en entrer à la main à chaque fois l'adresse web pour chaque produit concurrent mais après si il est possible de mettre une bouton (macro ou autre) "actualisable" pour qu'il puissent mettre à jour les infos.

Je ne sais pas si j'ai reussi à etre clair, en tout cas si quelqu'un me comprend et veut bien m'aider, je le remercie par avance

merci

Bonjour,

voici un bout de code qui lance la consultation de l'URL et fait l'extraction de la donnée (sur base de ce qui tu as indiqué)

référencer les librairies dans vba via le menu outils

resultat dans la variable prix et dans la cellule B1 de la feuille active

à tester avec ton url à mettre dans la variable qurl

Sub queryweb()
'
' via tools, référencer Microsoft HTML object library et Microsoft Internet control

    Dim ie As InternetExplorer, doc As HTMLDocument, ql As Variant, qlq As Variant

    Set ie = CreateObject("InternetExplorer.application")
    'Set ie = New InternetExplorerMedium

    qurl = "http://mysite.web.com"
    ie.Visible = False
    ie.navigate qurl

    Do
        DoEvents
    Loop Until ie.readyState = 4
    Set doc = ie.document
    r = doc.body.innerHTML
    tos = "<div class=""tr-price-primary"" itemprop=""price"">"
    s = InStr(r, tos)
    If s <> 0 Then
        s1 = InStr(s, r, "</div>")
        prix = Replace(Mid(r, s + Len(tos), s1 - s - Len(tos)), " €", "")
        cells(1,1)="prix"
        cells(1,2)=prix
    End If

    ie.Application.Quit

End Sub

Quelle rapidité ouah!!!

Merci je teste ça demain et je te tiens au courant

Encore merci

capture d ecran 2014 04 11 a 09 42 48

salut H2SO4

Comme je le disais je n'ai pas une grosse connaissance en excel, pourrais tu juste me confirmer la marche à suivre:

J'ai prix le code que tu m'as donné, j'ai changer l'adresse html en mettant celle du site qui m'interesse

j'ai ouvert excel, j'ai alt F11 puis j'ai selectionné la premiere feuille de calcul et dans la partie de droite j'ai collé le code.

Ensuite j'ai compilé le projet et j'ai tenter d'executer la macro soit a partir de la fenetre VBA soit directement dans l'onglet macro sur la feuille de calcul excel. L'ordi travaillle 2-3 sec et rien ne se passe.

Je sais pas si c'est normal ou si j'ai mal fait quelque chose.

Je joint un snapshot.

Merci encore pour ton aide, c'est super cool....

Bonjour,

il y a très peu de chose à voir, à part un prix qui s'affiche en B1. (en tout cas chez moi)

je te joins la version que j'ai utilisée pour tester avec suivi du déroulement dans la statusbar.

ok surper en fait j'avais pas compris qu'il fallait ecrire le code dans un module.

Par contre bizzarre que chez toi il affiche le prix

moi lorsque je lance la requete il me met en bas

attente de la réponse puis:

<div class=""tr-price-primary""itemprop=""price""> non trouvé dans la réponse.

T'as une idee?

merci

Bonjour,

s'agit-il de la même requête ?

dans tous les cas, voici un version qui écrit la réponse dans un fichier "webpage.txt" dans le même répertoire que celui dans lequel tu as mis ce classeur. Le contenu devrait aider à comprendre pourquoi, il n'y a pas la réponse attendue.

oui c'est bien la même

et la toujours la meme réponse :réponse non trouvé

Par contre j'ai le prix déjà indiqué mais je pense que c'est le tiens qui est resté, en cas dans le status bar ca marque toujours réponse non trouvé quand je lance la requête.

Je te joint le fichier txt généré.

Merci


le forum me mets ça lorsque j'essai de joindre le fichier:

Le chargement a été rejeté car le fichier envoyé a été identifié comme un éventuel vecteur d’attaque.

Je vais essayer de te l'envoyer en mail privé


ah mince je ne peux pas envoyer de fichier joint en MP?


essayons en fichier zip ca à l'air de marcher.

9webpage-txt.zip (17.63 Ko)

bonjour,

le texte est différent chez toi, fais une recherche sur 899 dans ce fichier tu verras.

ok j'ai remplacer la ligne tos par ca: tos = "<DIV class=tr-price-primary itemprop=""price"">"

cette fois ci je n'ai plus le message sans réponse par contre il me dit maintenant:

Erreur d'execution 5

Argument ou appel de procédure incorrect

Et quand je clique sur débogage apprement c'est cette ligne qui pose pb:

prix = Replace(Mid(r, s + Len(tos), s1 - s - Len(tos)), " €", "")

ca y est ça marche!!!! c'est vraiment super. C'etait bien la ligne tos a modifier.

Bon maintenant un peu plus hard:

Serait il possible de lancer une seule requete pour plein de lien en même temps.

Je m'explique:

Si possible je souhaiterais avoir la chose suivante.

Une colonne entière ou je mets tous mes liens html les un sous les autres qui ferais réference à la ligne de code qurl

Et que du coup quand je lance la requete il m'affiche te prix correspondant pour chaque lien sur la colonne d'à coté?

Ca serai vraiment le top!!

Merci beaucoup

je viens de remarquer que si je nome une cellule "adresse" dans laquelle je met mon url et que je met ce code

Sub queryweb()

'

' via tools, référencer Microsoft HTML object library et Microsoft Internet control

Dim ie As InternetExplorer, doc As HTMLDocument, ql As Variant, qlq As Variant

Set ie = CreateObject("InternetExplorer.application")

'Set ie = New InternetExplorerMedium

' déclaration de la variable

Dim adresse As Variant

' valeur de la variable = adresse

adresse = Range("adresse").Value

qurl = (adresse)

Application.StatusBar = "lancement de la requête sur " & qurl

ie.Visible = False

ie.navigate qurl

Do

DoEvents

Application.StatusBar = "lancement de la requête sur " & qurl & " en attente de la réponse "

Loop Until ie.readyState = 4

Application.StatusBar = "réponse reçue pour la requête " & qurl

Set doc = ie.document

r = doc.body.innerHTML

tos = "<DIV class=tr-price-primary itemprop=""price"">"

s = InStr(r, tos)

If s <> 0 Then

s1 = InStr(s, r, "</DIV>")

prix = Replace(Mid(r, s + Len(tos), s1 - s - Len(tos)), " €", "")

Cells(1, 1) = "prix"

Cells(1, 2) = prix

Application.StatusBar = "prix trouvé dans la réponse " & prix

Else

Application.StatusBar = tos & " non trouvé dans la réponse "

End If

Open "webpage.txt" For Output As 1

Print #1, r

Close 1

ie.Application.Quit

End Sub

et bien ca marche nikel! Au lancement de la requete il regarde l'adresse dans la cellule et va me chercher le prix

Par contre comment l'adapter à une colonne entière avec plein d'url et qu'il me sorte les prix correspondants..... Mystère pour moi.

Merci

bonjour,

il ne trouve pas </div>, j'ai vu que c'était en majuscule, chez toi.

en annexe, une version corrigée (qui détecte et signale aussi l'erreur de </DIV> non trouvé), adaptée pour ton ordi

edit : je viens de voir tes réponses, tu es un pas plus loin.,

je regarde ta demande dès que j'ai l'occasion.

Je n'ai pas compris ton message.

Ca y est la requête marche c'est ce que je te disais avant effectivement c'etait une histoire de majuscule.

Par contre maintenant que ca marche je voudrais l'adapter à une colonne avec plein d'url, regarde mes derniers message j'explique ce que j'aimerais reussir a faire et j'ai même un peu avancé.

Merci beaucoup

Pardon moi aussi je viens de voir ton message, ok j'attendrais des que tu as un peu de temps

Merci

Bonjour,

macro adaptée pour lancer plusieurs consultations.

MERCI MERCI MERCI MERCI

Tu es au top du top

Ca marche à la perfection!!!!!!

Je vais voir comment adapter tout ça.

Encore merci mille fois

capture d ecran 2014 05 13 a 15 05 27

Salut a tous,

Je reviens vers vous pour obtenir de nouveau de l'aide. Donc tout ce qu'on a vu précédement marche super c'est vraiment génial. J'ai un tout petit peu adapter le code et c'est parfait.

Maintenant je souhaiterais faire quelque chose de surement bcp plus simple à vos yeux.

Je mets un fichier excel en PJ si quelqu'un à le temps et veut bien m'écrire un mini bout de code ça serai génial.

Voila en fait comme on peut le voir sur le fichier j'ai 3 colonnes ou il y a des prix (ou pas) de mes concurrent, et la 4eme colonne c'est mon prix à moi.

Je souhaiterais que grâce une macro, dans la colonne suivante que j'ai nommé "moins cher concurrent" s'affiche le prix le moins cher de mes 3 concurrents (donc le moins cher des 3 premières colonnes) et enfin dans la colonne suivante appellé "soustraction" il y ai une soustraction de la "colonne mon prix - colonne moins cher concurrent" et surtout que si le résultat est positif il soit ecrit en rouge ou autre couleur ou que la case se remplisse, n'importe tant que je remarque visuellement que le résultat est positif.

Voilà merci d'avance mille fois à celui qui pourra me donner ce coup de pouce. En tout cas je peux dire que je n'imaginez vraiment pas la puissance d'excel avant que je découvre ce forum.

capture d ecran 2014 05 13 a 15 05 27

Bonsoir,

une simple formule suffit

en E2 tu mets

=min(A2;C2)

en F2 tu mets

=D2-E2

et tu tires vers le bas.

salut

merci beaucoup h2SO4 , c'est parfait.

Juste comment je peux faire du coup sans macro ou avec pour que dans ma colonne soustraction mes cases (ou écriture) change de couleurs (par ex rouge) si le resultat est positif?

Merci


desolé auto reponse j'ai trouvé avec le format de cellule conditionnelle.

Merci encore pour tout

A plus tard

Bonjour à tous,

j'ai encore une petite info a vous demander, si possible.

Voilà pour reprendre mon histoire grâce au gens du forum j'arrive à extraire des prix present sur une page web via une macro.

C'est super tout fonctionne a merveille.

Petit soucis que je viens de rencontrer, j'ai un des sites qui utilise le point (.) comme séparateur de millier. Et du coup quand la macro extrait le prix elle me convertit ça en virgule. Donc par exemple un prix sur site valant 4.445€ (quatre mille quatre centre quarante cinq euro) est afficher dans mon tableur à 4,445 euros soit mille fois moins cher!!!!!! lol

Du coup j'ai essayé pas mal de chose notamment dans les options excel en décochant utiliser les séparateurs du système et en lui disant manuellement que le point est un séparateur de millier et non décimal, etc... Mais rien y fait.

Du coup je me demande si il faudrait pas directement le faire dans le code de la macro, en lui disant d'ignorer les points ou chose du genre?

Je sais pas si quelqu'un à une idée?

Merci bien

Rechercher des sujets similaires à "extraire interieur table vba"