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