Bonjour,
Tout d'abord je précise que je suis débutant en VBA mais j'ai lu le tuto suivant (lien) pour m'aiguiller sur les interactions avec Internet Explorer via VBA Excel
J'ai besoin de votre aide pour la récupération d'information sur la page internet suivante : lien
Il s'agit de récupérer la valeur de cours d'une action, sur cet exemple : GDF Suez
Le code source de la page est le suivant :
Pour atteindre cette information, j'ai choisi d'utiliser la fonction getElementsByClassName (voir code ci-dessous) (j'ai aussi essayé avec getElementsById mais il y a trop d'item dans vba, et je ne trouve pas le bon item )
Mais lorsque je lance le code l'espion placé sur la variable "cOtation" est vide :
Mon début de code est visible ci-dessous :
Merci par avance pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 Sub RecuperationBloomberg() 'Déclaration des variables Dim Ie As New InternetExplorer Dim IEdoc As HTMLDocument Dim rNg As Range Dim tiCker As String 'Dim quOte As HTMLGenericElement Dim cOtation() As IHTMLElement Set rNg = Sheets("PEA").Range("C5") tiCker = rNg.Value On Error GoTo handler 'Chargement de la page bloomberg Ie.navigate "http://www.bloomberg.com/quote/" & tiCker Ie.Visible = True 'Attente chargement complet de la page WaitIE Ie Set IEdoc = Ie.document cOtation = getElementsByClassName(IEdoc.body, "price", False) On Error GoTo 0 'Cells(5, 5).Value = cOtation Ie.Application.Quit 'libération variable IE Set Ie = Nothing Set cOtation = Nothing 'Set quOte = Nothing Exit Sub handler: MsgBox "le ticker suivant :" & tiCker & "n'est pas valide." End Sub ---------------------------------------------------------------- Sub WaitIE(Ie As InternetExplorer) 'On boucle tant que la page n'est pas totalement chargée Do Until Ie.readyState = READYSTATE_COMPLETE DoEvents Loop End Sub ------------------------------------------------------------------ Function getElementsByClassName(IEParentElement As IHTMLElement, aClassName As String, Optional JustChildren As Boolean = False) As IHTMLElement() 'IEParentElement Nom de l'élément dans lequel sera recherché les éléments ayant comme classe aClassName. 'aClassName Chaîne de caractères représentant le nom de classe qui sera recherché. 'JustChildren Facultatif. Cette valeur de type booléen prend la valeur False (valeur par défaut) si la recherche doit se faire dans l'intégralité des sous-éléments. Il prend la valeur True, si la recherche doit se faire uniquement dans les éléments fils, de l'élément IEParentElement, la recherche s'effectue alors dans les éléments contenus dans le membre Children de l'objet IEParentElement. 'Retourne un tableau contenant les éléments de la page ayant pour Class aClasseName Dim aElement As IHTMLElement Dim FuncElements() As IHTMLElement Dim SourceElem As IHTMLElementCollection Dim iElem As Integer 'On prend en compte le lieu de recherche If JustChildren Then 'Ici on ne tiendra compte que des enfants directs de IEParentElement Set SourceElem = IEParentElement.Children Else Set SourceElem = IEParentElement.all End If 'On boucle sur tous les éléments contenus dans SourceElem For Each aElement In SourceElem 'On vérifie si l'élément correspond à notre recherche If aElement.className = aClassName Then 'On redimensionne notre tableau 'Cela semble inutile de regarder si FuncElements est un Array... 'Mais sans cette ligne FuncElement n'est jamais reconnu comme tel... iElem = IIf(IsArray(FuncElements), UBound(FuncElements) + 1, -1) ReDim Preserve FuncElements(iElem) 'Et on place l'élément trouvé à l'intérieur Set FuncElements(UBound(FuncElements)) = aElement End If Next 'On place le tableau en retour de notre fonction getElementsByClassName = FuncElements 'On libère l'espace mémoire occupé par notre tableau provisoire Erase FuncElements End Function
Partager