Comment puis-je parcourir une plage de cellules et leur obtenir une valeur à partir d'un site Web?
J'essaie d'obtenir des données spécifiques d'un site Web que mon lieu de travail utilise, cependant, je ne peux pas comprendre comment obtenir des données spécifiques à écrire sur une feuille de calcul. J'ai écrit un code, qui ouvre avec succès la page Web et parcourt les données de cette page, j'ai juste besoin d'aide avec la dernière partie du code.
Dim Source As Range
Dim Cell As Range
lastRow = Worksheets("Sheet1").Range("A1000").End(xlUp).Row
Set Source = Worksheets("Sheet1").Range("A2:A" & lastRow)
For Each Cell In Source
Dim nodes As Object, i2 As Long
Set nodes = objIE.Document.querySelectorAll("[Title='Purchase Order / Status']")
For i2 = 0 To nodes.Length - 1
If nodes.Item(i2).innerText Like "*" & Cell.Value & "*" Then
Cell.Offset(0, 3).Value = ' Im missing the code here
Exit For
End If
Next
Next
Je manque la dernière partie du code (marqué dans le code ci-dessus comme manquant). Ce code parcourt ma feuille de calcul, puis toute la page Web, et recherche les données intitulées «Bon de commande / Statut». Cette partie du code est bien.
Ensuite, j'ai essayé Cell.Offset(0, 3).Value = objIE.Document.querySelector("[Title='Planned Destinations ']").innerText
, qui obtient avec succès la valeur de texte interne 'Destinations planifiées', dont j'ai besoin. Cependant, il obtient toujours le premier texte interne 'Destinations planifiées' trouvé sur toute la page.
Voici une image de ce qu'il fait et de ce que je veux qu'il fasse:
Remarquez la colonne D.
Voici une partie du site Web:
<tr class="outboundPlanAltRowStyle">
<td class="outboundPlanHour" style="height:25px;width:40px;white-space:nowrap;">11:00</td>
<td onmouseover="this.className='outboundPlanHover'" onmouseout="this.className=''"
onclick="cellClicked(1019543,14)"
style="height:25px;width:150px;white-space:nowrap;" class="">
<table class="outboundPlan_PREBOOKED" style="width: 200px; table-layout: fixed" cellpadding="0px" cellspacing="0px">
<tbody><tr>
<td title="Purchase Order / Status" class="outboundCell"> 325839 / PREBOOKED</td></tr>
<tr><td title="Subcontractor Name / Load Numbers "
class="outboundCell">Tesco FM / - </td></tr>
<tr><td title="Planned Destinations " class="outboundCell"
style="overflow: hidden"> 39019 (NDC Teresin) </td></tr>
<tr><td title="Status Date" class="outboundCell">28.01.2021 12:02 </td></tr></tbody>
</table></td>
J'ai besoin de la valeur de texte interne title = "Destinations planifiées" dans les cellules en trouvant title = "Bon de commande / Statut", qui est enregistré dans la feuille de calcul (Colonne A dans l'image ci-dessus)
ÉDITER:
Enfin réussi à le faire fonctionner. J'ai utilisé une approche différente de mon problème, mais sans les conseils et l'aide de Tim, je ne pourrais pas le terminer. Voici le code final et fonctionnel de mon problème, au cas où quelqu'un en aurait besoin, ou une inspiration:
Dim objResultList As MSHTML.IHTMLDOMChildrenCollection
Dim lResultCount As Long
Dim lResultLoop As Long
Dim anchorLoop As MSHTML.HTMLAnchorElement
Set objResultList = objIE.Document.querySelectorAll("[Title='Planned Destinations ']")
lResultCount = objResultList.Length
Debug.Print
For lResultLoop = 0 To lResultCount - 1
Set anchorLoop = objResultList.Item(lResultLoop)
Next
i3 = 0
Set Source = Worksheets("Sheet1").Range("D2:D" & lastRow)
If Not anchorLoop Is Nothing Then
For Each Cell In Source
Cell.Value = objResultList.Item(i3).innerText
i3 = i3 + 1
Next
End If
End If
Vous devez aller "vers le haut" de nodes.Item(i2)
la table parent (en utilisant par exemple parentElement
), puis interroger cette table (pas le document entier) pour l'autre cellule que vous voulez:
Sub tester()
'Added reference to Microsoft HTML Object Model
Dim doc As New HTMLDocument, nodes As Object, i As Long
Dim tbl As HTMLTable, nxt
doc.body.innerHTML = Range("A1").Value 'load HTML from cell for testing
Set nodes = doc.querySelectorAll("td [Title='Purchase Order / Status']")
Debug.Print "found " & nodes.Length & " cell(s)"
For i = 0 To nodes.Length - 1
'get the parent table
Set tbl = nodes(i).parentElement.parentElement.parentElement
'find the other cell in this table
Set nxt = tbl.querySelector("td [Title='Planned Destinations ']")
Debug.Print nodes(i).innerText, nxt.innerText
Next i
End Sub
HTML en A1:
<table><tr>
<td>11:00</td>
<td>
<table class="outboundPlan_PREBOOKED">
<tbody>
<tr><td title="Purchase Order / Status" class="outboundCell"> 325839 / PREBOOKED</td></tr>
<tr><td title="Subcontractor Name / Load Numbers " class="outboundCell">Tesco FM / - </td></tr>
<tr><td title="Planned Destinations " class="outboundCell" >39019 (NDC Teresin) </td></tr>
<tr><td title="Status Date" class="outboundCell">28.01.2021 12:02 </td></tr>
</tbody>
</table></td>
</tr></table>