retirer une cellule d'une table via une requête web

atlas

XLDnaute Occasionnel
Bonsoir , je souhaiterais retirer une cellule (ou une ligne) d'une table via une requête web .
Par ex la ligne 3 de la table 15 de l'URL x
ou la cellule B2 de la table 23 de l'URL y

J'aie testé quelques macros sur ce lien

Ce lien n'existe plus

C'est presque ça mais je ne souhaite pas importer toute la table seulement une et une seule information de la table

Merci ...
 

atlas

XLDnaute Occasionnel
Re : retirer une cellule d'une table via une requête web

Parce que je trouve que c'est une solution laide qui m'oblige a creer un nouvel onglet y stocker les données , renvoyer l'info dans un autre onglet , supprimmer l'onglet de stockage .Beaucoup de manoeuvres qui ralentiraient le programme .

Je veux bien stocker la table quelque part et l'exploiter ensuite mais pas dans un onglet excel .
 

MichelXld

XLDnaute Barbatruc
Re : retirer une cellule d'une table via une requête web

bonjour

un exemple qui extrait la 3eme cellule dans la 1ere ligne de 6eme table

Code:
'Nécessite d 'activer les references
    'Microsoft HTML Objects Library
    'et
    'Microsoft Internet Controls
Dim IE As InternetExplorer
Dim maPageHtml As HTMLDocument
Dim Htable As IHTMLElementCollection
Dim maTable As IHTMLTable
 
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
 
IE.navigate "[I]Ce lien n'existe plus[/I]"
    Do Until IE.readyState = READYSTATE_COMPLETE
    DoEvents
Loop
 
Set maPageHtml = IE.document
'objet type table
Set Htable = maPageHtml.getElementsByTagName("table")
'6eme tableau dans la page Web
Set maTable = Htable(5)
 
'3eme cellule dans la 1ere ligne
MsgBox maTable.Rows(0).Cells(2).innerText



bonne journée
michel
 

atlas

XLDnaute Occasionnel
Re : retirer une cellule d'une table via une requête web

Code:
Sub requete()


'Nécessite d 'activer les references
    'Microsoft HTML Objects Library
    'et
    'Microsoft Internet Controls
Dim IE As InternetExplorer
Dim maPageHtml As HTMLDocument
Dim Htable As IHTMLElementCollection
Dim maTable As IHTMLTable
 
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False 'je prefere mettre false ; j'utilise firefox
 
IE.navigate "http://www.x-rates.com/index.html"   'taper ici l'URL du site
    Do Until IE.readyState = READYSTATE_COMPLETE
    DoEvents
Loop
 
Set maPageHtml = IE.document
'objet type table
Set Htable = maPageHtml.getElementsByTagName("table")
'6eme tableau dans la page Web
Set maTable = Htable(5)
 
'3eme cellule dans la 1ere ligne
MsgBox (maTable.Rows(0).Cells(2).innerText)  'un bug ici

End Sub

Un bug sur la msgBox du style

Runtime error 91
Object variable ou With Block not set
 

MichelXld

XLDnaute Barbatruc
Re : retirer une cellule d'une table via une requête web

bonsoir

Un bug sur la msgBox du style

Citation:
Runtime error 91
Object variable ou With Block not set
C'est normal car il n'y a pas de 3eme cellule dans la 6eme table ...

C'est normal, la table que tu as spécifié correspond à

Menu
. Currency Calculator
. Custom Table
. Historic Lookup
. Currency Photos
. Home

dans la page html


bonne soirée
michel
 

atlas

XLDnaute Occasionnel
Re : retirer une cellule d'une table via une requête web

Je continue de patauger et je trouve trés peu d'infos sur le web avec les méthodes et propriétés d'internetexplorer .

En effet avec
Code:
Set maTable = Htable(1)
La table n°1 la msgbox s'affiche mais sans aucun résultat chiffré .
Il ya pourtant plusieurs tables sur l'URL mais à aucun moment la msgBox s'affiche .

Il me faut des tutos pour comprendre comment compter les tables présentes dans une page HTML ensuite déterminer le n° de la table qui m'intéresse

Autre question qu'est-ce-que c'est READYSTATE_COMPLETE ? Une constante (ça ressemble à un paramètre d'une API) ?
Code:
Do Until IE.readyState = READYSTATE_COMPLETE
 

MichelXld

XLDnaute Barbatruc
Re : retirer une cellule d'une table via une requête web

bonsoir


Code:
Set Htable = maPageHtml.getElementsByTagName("table")
MsgBox Htable.Length

permet de compter le nombre de tables



Je t'ai modifié la procédure en ajoutant des annotations. Le code boucle sur toutes les tables de la page et renvoie le contenu de la premiere cellule

Code:
'Nécessite d 'activer les references
    'Microsoft HTML Objects Library
    'et
    'Microsoft Internet Controls
Dim IE As InternetExplorer
Dim maPageHtml As HTMLDocument
Dim Htable As IHTMLElementCollection
Dim maTable As IHTMLTable
Dim i As Integer
 
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
 
IE.navigate "[URL="http://www.x-rates.com/index.html"]Exchange Rates[/URL]"
    'la ligne IE.readyState = READYSTATE_COMPLETE
    'permet d'atendre la fin du chargement de la page
    'avant de continuer la procédure.
    Do Until IE.readyState = READYSTATE_COMPLETE
    DoEvents
Loop
 
Set maPageHtml = IE.document
'objet type table
Set Htable = maPageHtml.getElementsByTagName("table")
'Compte le nombre de pages
MsgBox "il y a " & Htable.Length & " tables dans cette page html"
'Boucle sur les tables
For i = 0 To Htable.Length - 1
    Set maTable = Htable(i)
 
    'Renvoie la premiere donnée de chaque table
    MsgBox "Table N°" & i + 1 & vbCrLf & _
        maTable.Rows(0).Cells(0).innerText
Next i



Pour boucler sur tous les éléments d'une table :
'boucle sur toutes les lignes du tableau

Code:
For i = 1 To maTable.Rows.Length 
   'boucle sur les cellules dans chaque ligne
   For j = 1 To maTable.Rows(i - 1).Cells.Length 
      Cells(i, j) = maTable.Rows(i - 1).Cells(j - 1).innerText
   Next j
Next i



bonne soirée
michel
 

atlas

XLDnaute Occasionnel
Re : retirer une cellule d'une table via une requête web

Code:
    'Renvoie la premiere donnée de chaque table
    MsgBox "Table N°" & i + 1 & vbCrLf & _
        maTable.Rows(0).Cells(0).innerText

Je ne suis pas d'accord mais c'est déjà un beau résultat cela renvoie le contenu de la table entière et non pas le contenu d'une cellule de la table

Code:
 maTable.Rows(0).Cells(0).innerText
A vrai dire ni Rows ni Cells ni innerText ne sont des membres de la classe IHTMLTable .Et si je met Rows(1).Cells(4) par ex ça plante (pour la 1er table ça me parait comprehensible parce qu'il n'y a rien dedans par contre pour les autres ...

En revanche des classes comme HTMLTableCell , HTMLTableRow , HTMLTableCol IHTMLElement ont innertext comme propriété .
 

atlas

XLDnaute Occasionnel
Re : retirer une cellule d'une table via une requête web

A testé egalement ceci sur la table 17 du site

Exchange Rates

Jul 18 - Jul 21
EUR/USD -0.139 %
CAD/USD -0.338 %
JPY/USD -0.009 %
AUD/USD -0.215 %
GBP/USD +0.030 %
GBP/EUR +0.169 %
JPY/EUR +0.129 %
GBP/AUD +0.246 %
JPY/AUD +0.206 %

Code:
Sub internetFF()

'Nécessite d 'activer les references
    'Microsoft HTML Objects Library
    'et
    'Microsoft Internet Controls
Dim IE As InternetExplorer
Dim maPageHtml As HTMLDocument
Dim Htable As IHTMLElementCollection
Dim maTable As IHTMLTable
Dim i As Integer
 
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
 
IE.navigate "http://www.x-rates.com/index.html"
    'la ligne IE.readyState = READYSTATE_COMPLETE
    'permet d'atendre la fin du chargement de la page
    'avant de continuer la procédure.
    Do Until IE.readyState = READYSTATE_COMPLETE
    DoEvents
Loop
 
Set maPageHtml = IE.document
'objet type table
Set Htable = maPageHtml.getElementsByTagName("table")
'Compte le nombre de pages
'MsgBox "il y a " & Htable.Length & " tables dans cette page html"
'Boucle sur les tables
'For i = 0 To Htable.Length - 1
 '   Set maTable = Htable(i)
 
    'Renvoie la premiere donnée de chaque table
  '  MsgBox "Table N°" & i + 1 & vbCrLf & _
   '     maTable.Rows(0).Cells(0).innerText
'Next i

Set maTable = Htable(17)

For i = 1 To maTable.Rows.Length
   'boucle sur les cellules dans chaque ligne
   For j = 1 To maTable.Rows(i - 1).Cells.Length
      Cells(i, j) = maTable.Rows(i - 1).Cells(j - 1).innerText
   Next j
Next i

End Sub

La table 17 comporte 10 lignes or la boucle
Code:
For i = 1 To maTable.Rows.Length etc ...
n'en compte que 2 .

IL doit y avoir un objet à l'intérieur d'un autre objet ...pas easy ...
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 500
Messages
2 089 005
Membres
104 003
dernier inscrit
adyady__