Tirer des données d'une page Web embeddede avec VBA Excel

J'essaie d'utiliser VBA dans Excel pour accéder aux données dans une page Web embeddede dans une page Web. Je sais comment procéder si la table est sur une page non embeddede. Je sais aussi comment naviguer dans la page de ce produit en utilisant VBA. Je ne peux pas simplement naviguer vers la page embeddede car il existe un identifiant d'identifiant de produit qui convertit un numéro de pièce en un identifiant et je n'ai pas access à cette database.

Voici le lien vers la page: http://support.automation.siemens.com/WW/view/fr/7224052

J'aurais posé une image de l'élément pour plus de clarté mais je n'ai pas 10 points de rep.

Le tableau dont j'ai besoin d'get des informations est le tableau "Cycle de vie du produit".

Je peux voir l'URL correcte dans une propriété appelée src sous l'élément correspondant si je sauvegarde la page sous la forme d'un document HTML dans VBA à l'aide du code suivant:

For Each cell In Selection link = "http://support.automation.siemens.com/US/llisapi.dll?func=cslib.csinfo&lang=en&objid=" & cell & "&caller=view" ie.navigate link Do DoEvents Loop Until ie.readyState = READYSTATE_COMPLETE Dim doc As HTMLDocument 

Existe-t-il un moyen d'indexer cette table avec VBA ou dois-je contacter l'entreprise et essayer d'accéder à l'ID du produit afin que je puisse naviguer directement vers la page?

En ce qui concerne mon commentaire ci-dessous, voici le code d'une macro enregistrée:

 ActiveCell.FormulaR1C1 = _ "http://support.automation.siemens.com/WW/llisapi.dll?func=cslib.csinfo&lang=en&objid=6ES7194-1AA01-0XA0&caller=view" Range("F9").Select With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://support.automation.siemens.com/WW/llisapi.dll?func=ll&objid=7224052&nodeid0=10997566&caller=view&lang=en&siteid=cseus&aktprim=0&objaction=csopen&extranet=standard&viewreg=WW" _ , Destination:=Range("$F$9")) .FieldNames = True .RowNumbers = False 

Je sais où find la string: URL;http://support.automation.siemens.com/WW/llisapi.dll?func=ll&objid=7224052&nodeid0=10997566&caller=view&lang=en&siteid=cseus&aktprim=0&objaction=csopen&extranet=standard&viewreg=WW , mais je ne sais pas comment l'save dans une variable.

Je ne suis pas sûr de bien comprendre votre question, mais voici un code qui va générer le code source derrière la table d'intérêt. Vous pouvez extraire datatables d'intérêt en utilisant des fonctions telles que "instr" et "mid"

 ' open IE, navigate to the website of interest and loop until fully loaded Set ie = CreateObject("InternetExplorer.Application") With ie .Visible = True .navigate "http://support.automation.siemens.com/WW/view/en/7224052" .Top = 50 .Left = 530 .Height = 400 .Width = 400 Do Until Not ie.Busy And ie.ReadyState = 4 DoEvents Loop End With ' Assign the source code behind the page to a variable my_var = ie.document.frames(3).document.DocumentElement.innerhtml ' Extract the url for the "Product life cycle" table pos_1 = InStr(1, my_var, "product life cycle", vbTextCompare) pos_2 = InStr(pos_1, my_var, "/WW/llisapi", vbTextCompare) pos_3 = InStr(pos_2, my_var, """><", vbTextCompare) pos_4 = InStr(pos_3, my_var, """/>", vbTextCompare) table_url = Mid(my_var, pos_2, pos_3 - pos_2) table_url = Replace(table_url, "amp;", "", 1, -1, vbTextCompare) table_url = "http://support.automation.siemens.com" & table_url ' navigate to the table url ie.navigate table_url Do Until Not ie.Busy And ie.ReadyState = 4 DoEvents Loop ' assign the source code for this page to a variable and extract the desired information my_var2 = ie.document.body.innerhtml pos_1 = InStr(1, my_var2, "ET 200X, basic modules,", vbTextCompare) ' close ie ie.Quit 

J'ai eu des problèmes pour que le code de ron fonctionne, je pense que IE ne fonctionne pas facilement avec les frameworks. Voici un code qui extrait certaines des données du tableau que vous avez mentionné. Il ne gère pas jusqu'à présent les diagrammes.

 Sub FrameSsortingp() Dim oFrames As Object Dim tdelements As Object Dim tdElement As Object Dim oFrame As MSHTML.HTMLFrameElement Dim oElement As Object Dim sSsortingng As Ssortingng Dim myVar As Variant Dim sLinks() As Ssortingng Dim i As Integer Dim bfound As Boolean Dim url As Ssortingng Dim oIE As InternetExplorer Set oIE = New InternetExplorer url = "http://support.automation.siemens.com/WW/view/en/7224052" 'Set address for use with relative source names myVar = Split(url, "/") sSsortingng = myVar(0) & "//" & myVar(2) oIE.navigate url oIE.Visible = True Do Until (oIE.readyState = 4 And Not oIE.Busy) DoEvents Loop Set oFrames = oIE.document.getElementsByTagName("frame") ReDim sLinks(oFrames.Length) 'Get the source locations for each frame i = 0 For Each oFrame In oFrames sLinks(i) = sSsortingng & (oFrame.getAtsortingbute("src")) i = i + 1 Next oFrame 'Go through each frame to find the table i = 0 bfound = False Do While i < UBound(sLinks) And bfound = False oIE.navigate sLinks(i) Do Until (oIE.readyState = 4 And Not oIE.Busy) DoEvents Loop Set oElement = oIE.document.getElementById("produktangaben") bfound = IsSet(oElement) i = i + 1 Loop Set tdelements = oElement.getElementsByTagName("td") 'Display information about table sSsortingng = "" For Each tdElement In tdelements Debug.Print tdElement.innerText sSsortingng = sSsortingng & tdElement.innerText Next tdElement End Sub Function IsSet(ByRef oElement As Object) As Boolean Dim tdelements As Object Dim bSet As Boolean bSet = True On Error GoTo ErrorSet Set tdelements = oElement.getElementsByTagName("td") On Error GoTo 0 Cleanup: On Error Resume Next Set tdelements = Nothing On Error GoTo 0 IsSet = bSet Exit Function ErrorSet: bSet = False GoTo Cleanup: End Function