Boucle importation données Web
Bonjour à tous,
J’ai une liste de sociétés pouvant contenir plusieurs centaines de noms. J’aimerais pour chaque société récupérer une information apparaissant dans des résultats de recherche google.
Je parviens à importer les résultats Google en me basant sur les explications de la video : « Créer une macro pour importer des données d’un site Web » Mais j’aimerais créer une boucle pour venir placer la phrase de description à côté du nom de chaque société.
Ma recherche Google correspond à : Nom société+Bloomberg
Ex : https://www.google.com/search?q=GSK+bloomberg&pws=0&gl=us&gws_rd=cr
Dans les résultats Google obtenu, quel que soit la société, il apparaît la séquence suivante :
https://www.bloomberg.com/research/stocks/private/snapshot
J’utilise cette séquence constante pour indiquer qu’à la ligne +2 se trouve la phrase de description que je souhaite ramener sur la feuille « Company » en face du nom de la société.
J’aimerais faire ces opérations automatiquement pour l’ensemble de mon tableau « Company » en veillant à supprimer chaque feuille nouvellement créée après l’importation de la phrase de description.
En pièce jointe, vous pourrez voir où j’en suis…
J’espère que mes explications sont compréhensibles !
Merci d’avance pour votre aide.
Vincent
Bonjour Steelson,
Merci pour ta réponse!
Je ne comprends pas pourquoi je ne peux pas utiliser Google.
- Via la fonction d’importation des données d’une page web
- Suivi d’une sélection sur base de mon repère, de type :
Sheets("Company").Cells(D2, 1) = Sheets("Feuil*").Cells(ligne + 2, 1)
Mes premières tentatives étaient basées sur l’utilisation du code source via une fonction =IMPORTXML dans Google Sheet. Mais dans ce cas, je n’arrivais pas à sélectionner uniquement ma phrase d’intérêt. Je récupérais tout le texte ayant une mise en forme équivalente.
Si tu as une solution pour exploiter le code source et récupérer uniquement les équivalents à la phrase:
“GlaxoSmithKline</em> plc engages in the creation, discovery, development, manufacture, and marketing of vaccines, over-the-counter medicines, and health-<wbr>related consumer products worldwide. It operates through four segments: Pharmaceuticals, Pharmaceuticals R&D, Vaccines, and Consumer Healthcare.”
Je suis preneur…
Bat
Vincent
Bjr,
voici un premier essai, il reste encore à décortiquer un peu le contenu des cellules, mais cela peut aussi se faire maintenant par des formules texte dans la feuille excel sans forcément repasser en VBA
Sub Maj()
Dim tableaureponse
DoEvents
URL = Cells(2, "A")
On Error Resume Next
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", URL, False
.Send
If .Status = 200 Then
tableaureponse = Split(Split(.responseText, "<!--n-->")(0), "<h3 class=""r"">")
End If
End With
For i = LBound(tableaureponse) + 1 To UBound(tableaureponse)
Cells(i + 1, "B") = tableaureponse(i)
Next
End Sub
Bonjour Steelson,
Encore une fois un tout grand merci pour ta réponse !
L’approche via le code source semble bien, mais j’ai du mal à trouver des balises communes à chaque recherche de société pour extraire ma phrase d’intérêt.
Dans notre exemple :
4ICd','','0ahUKEwjmxauUxZPZAhUHSBQKHYPlCM0QIAg7MAI','','',event)">En cache</a></li></ol></div></div><a class="fl" href="
" onmousedown="return rwt(this,'','','','3','AOvVaw1ZB8fE8uWXPDQyMy-NXNEm','','0ahUKEwjmxauUxZPZAhUHSBQKHYPlCM0Q7gEIPTAC','','',event)">Traduire cette page</a></div><span class="st"><em>GlaxoSmithKline</em> plc engages in the creation, discovery, development, manufacture, and marketing of vaccines, over-the-counter medicines, and health-<wbr>related consumer products worldwide. It operates through four segments: Pharmaceuticals, Pharmaceuticals R&D, Vaccines, and Consumer Healthcare. The company ...</span></div></div></div></div></div><div class="g"><div data-hveid="62" data-ved="0ahUKEwjmxauUxZPZAhUHSBQKHYPlCM0QFQg-KAMwAw"><div class="rc">
Entre temps, j’ai corrigé l’approche via la fonction « importer des données d’une page web ». J’arrive à obtenir le résultat attendu pour la première ligne de mon tableau « Company » (voir pièce jointe). Il me faudrait créer une boucle pour que le même résultat soit obtenu pour chaque société.
Sais-tu comment je pourrais arriver à faire cette boucle ?
Merci d’avance
Vincent
L’approche via le code source semble bien, mais j’ai du mal à trouver des balises communes à chaque recherche de société pour extraire ma phrase d’intérêt.
voici un complément
Entre temps, j’ai corrigé l’approche via la fonction « importer des données d’une page web ». J’arrive à obtenir le résultat attendu pour la première ligne de mon tableau « Company » (voir pièce jointe). Il me faudrait créer une boucle pour que le même résultat soit obtenu pour chaque société.
Sais-tu comment je pourrais arriver à faire cette boucle ?
je regarde
Sub importerURL(ligneURL)
Sheets("TEMP").Cells.Clear
With Sheets("TEMP").QueryTables.Add(Connection:="URL;" & Sheets("Accueil").Cells(ligneURL, 2).Value, Destination:=Sheets("TEMP").Range("$A$1"))
.Name = "www.blog-excel"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
compteur = 0
For ligne = 1 To 1000
If Left(Sheets("TEMP").Cells(ligne, 1), 58) = "https://www.bloomberg.com/research/stocks/private/snapshot" Then
compteur = compteur + 1
Sheets("ACCUEIL").Cells(compteur + ligneURL - 1, 3) = Sheets("TEMP").Cells(ligne + 3, 1)
Sheets("ACCUEIL").Cells(compteur + ligneURL - 1, 4) = Sheets("TEMP").Cells(ligne + 2, 1)
If compteur = 1 Then Exit For
End If
Next
End Sub
Sub importer()
For i = 2 To Cells(Application.Rows.Count, 1).End(xlUp).Row
importerURL (i)
Next
End Sub
Salut Steelson,
Ça marche du tonner !
Un tout grand merci pour ton aide!!
Bat
Vincent
Parfait
plus un petit cœur si tu es satisfait !
