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

Nom : Capture2.PNG
Affichages : 2905
Taille : 78,0 Ko

Le code source de la page est le suivant :

Nom : Capture1.PNG
Affichages : 2950
Taille : 49,3 Ko

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 :

Nom : Capture3.PNG
Affichages : 2654
Taille : 5,1 Ko

Mon début de code est visible ci-dessous :

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
Merci par avance pour votre aide