et moi j'ai le message de securité qui s'affiche a chaque cookies avec "Microsoft.xmlhttp"
si je clique non a chaque fois j'ai rien si je clique oui a chaque fois j'ai un puré de charabia en retour pas possible
et moi j'ai le message de securité qui s'affiche a chaque cookies avec "Microsoft.xmlhttp"
si je clique non a chaque fois j'ai rien si je clique oui a chaque fois j'ai un puré de charabia en retour pas possible
Je n'ai pas testé cette bibliothèque (car plus lente !) mais juste MSXML2.XMLHttp et la WinHttp de mon code …
Bonsoir,
Je suis impressionné par vos connaissances. Je commence par lire vos postes que j'ai en retard et je distribue les votes, puis je vais essayer de tout comprendre.
Je pense que je vais me coucher tard
Je m'attaque à ce tuto j'espère qu'il m'aidera.
Bonjour Marc votre code ci-dessus est fonctionnel sur ma feuille excel, il est déjà beaucoup plus rapide que le précédent.
Bonjour Patrick,
J'ai également réussi à faire tourner votre code avec les modifications mineures suivantes (en rouge)
Concernant la ligne suivante :
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 Option Base 1 Function GetPrice(symb) Const PriceTag = "span class="" price"">" Dim tablo(0, 1) Dim oHttp As Object, txt$, i&, j& On Error Resume Next Set oHttp = CreateObject("MSXML2.XMLHTTP") If Err <> 0 Then Set oHttp = CreateObject("MSXML.XMLHTTPRequest") If oHttp Is Nothing Then MsgBox "MSXML2.XMLHTTP not found", 16, "Error": Exit Function On Error GoTo 0 With oHttp .Open "GET", "http://www.bloomberg.com/quote/" & symb, False .send txt = .responseText i = InStr(1, txt, PriceTag, 1) If i = 0 Then GetPrice = "PriceTag not found" Else code = Split(txt, PriceTag)(1) code = Split(code, "</span>")(0) code = "<" & PriceTag & vbCrLf & code & "</span></span>" Debug.Print code With CreateObject("htmlfile") .body.innerHTML = code tablo(0, 0) = Replace(.getElementsByTagName("span")(0).innerText, "EUR", "") tablo(0, 1) = .getElementsByTagName("span")(0).Children(0).innerText End With End If End With Set oHttp = Nothing GetPrice = tablo End Function Sub test() For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row - 1 '-1 pour ne pas considérer la ligne TOTAL ajoutée Range(Cells(i, 5), Cells(i, 6)) = GetPrice(Cells(i, 3).Value) Next End Sub
J'ai remplacé avec votre astuce vue plus haut:
Code : Sélectionner tout - Visualiser dans une fenêtre à part tablo(0, 0) = Replace(.getElementsByTagName("span")(0).innerText, "EUR", "")
Cela permet de "généraliser" la ligne si la devise n'est pas EUR (USD par exemple).
Code : Sélectionner tout - Visualiser dans une fenêtre à part tablo(0, 0) = Val(Replace(.getElementsByTagName("span")(0).innerText, ",", "."))
Merci pour votre aide
si ca fonctionne comme ca alors tu a un soucis
car je met option base 1 justement pour démarrer a 1
ca devrait planter grave !!!!!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 : Option Base 1 Function GetPrice(symb) Const PriceTag = "span class="" price"">" Dim tablo(0, 1) Dim oHttp As Object, txt$, i&, j&
Merci Dap !
Piloter Internet Explorer est la procédure la moins rapide, à utiliser en dernier recours …
Ensuite la méthode intermédiaire est la fonctionnalité d'Excel du menu Données : Importer à partir du Web
(QueryTables en VBA) mais ne fonctionne pas avec toutes les pages Web …
Enfin, une bibliothèque de requêtes (MSXML2, WinHttp, …) est utilisée par les pages Web pour charger les données,
c'est donc la voie à privilégier …
Ok "option base 1" signifie que le tableau a une taille minimum ? Pouvez-vous m'en dire plus sur l’intérêt que cela apporte dans le cadre de ce programme ?
En tout les cas cela fonctionne bien avec mais aussi sans cet "option base 1" par contre je ne sais pas pourquoi cela marche (drôle de questionnement ).
Oui je m'aperçoit que cette méthode est bien efficace et plus rapide, je vais essayer de me former davantage sur ces requêtes !
voila le code que j'utilise qui est un peu plus adapter a ton cas
et l'apercu a la fin
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 Option Base 1 Function GetPrice(symb) Const PriceTag = "span class="" price"">" Dim tablo(1, 2) Dim oHttp As Object, txt$, i&, j& On Error Resume Next Set oHttp = CreateObject("MSXML2.XMLHTTP") If Err <> 0 Then Set oHttp = CreateObject("MSXML.XMLHTTPRequest") If oHttp Is Nothing Then MsgBox "MSXML2.XMLHTTP not found", 16, "Error": Exit Function On Error GoTo 0 With oHttp .Open "GET", "http://www.bloomberg.com/quote/" & symb, False .send txt = .responseText i = InStr(1, txt, PriceTag, 1) If i = 0 Then GetPrice = "PriceTag not found" Else code = Split(txt, PriceTag)(1) code = Split(code, "</span>")(0) code = "<" & PriceTag & vbCrLf & code & "</span></span>" Debug.Print code With CreateObject("htmlfile") .body.innerhtml = code tablo(1, 1) = Val(.getelementsbytagname("span")(0).innertext) tablo(1, 2) = .getelementsbytagname("span")(0).Children(0).innertext End With End If End With Set oHttp = Nothing GetPrice = tablo End Function Sub test() For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row Range(Cells(i, 5), Cells(i, 6)) = IIf(Cells(i, 3) <> "", GetPrice(Cells(i, 3)), "") Next End Sub
Pièce jointe 175509
un visuel c'est mieux que les mots
Votre dernière version du programme est fonctionnelle sur ma machine.
re
dis moi tu en a beaucoup comme ca de ligne??
si oui demande a MarcL de te parler de sa ruche il comprendra
A terme je pense que mon fichier devra aller chercher plusieurs milliers d'informations sur plusieurs pages internet puisque le but est de créer un fichier de suivi de mon patrimoine et d'analyse de choix d'achat / de vente d'actions, analyse de liste vastes de trackers et d'OPCVM, analyse de bilan de sociétés ...
Bon pour cela je me laisse au moins 1 an pour obtenir quelque chose qui me convienne car je commence tout juste et la route est longue.
Par contre s'il y a des d'autres techniques / méthodes intéressante à connaitre je suis preneur!
En tout cas en parlant de ruche j'aime bien le miel
Bon cette histoire de ruche m'a mis en appétit du coup je suis allé me prendre une cuillère de miel et je suis tombé sur ce poste suis-je sur la bonne piste?
Cela voudrait dire que le code pourrait être encore plus rapide ? Bon sur mon exemple actuel ce n'est peut être pas nécessaire mais par contre cela m’intéresse fortement pour la suite et autant partir sur une base optimisée. Donc si vous avez des pistes pour améliorez le code actuel n'hésitez pas !
Bien je lirai ce poste de Marc demain car le miel fait son effet, je commence à dormir et je ne suis pas (encore) développeur donc je me suis arrêté au préambule du poste
Oui c'est la bonne piste, le premier post suffit à lui seul, voir aussi le #26 …
Mais encore faut-il attendre une conception définitive de la feuille de calculs (position des colonnes, infos à télécharger)
avant de l'envisager …
bonjour
MarcL t'entends ca ?
on a un nouveau itwooBon pour cela je me laisse au moins 1 an pour obtenir quelque chose qui me convienne car je commence tout juste et la route est longue.
Oui j'y est pensé aussi : son tunnel ayant commencé en novembre 2013 et il a aperçu la lumière un an après …
re
et encore!! je ne suis pas sur qu'il ai tout compris aujourd'hui
surtout quand il me dit il y a moins d'un mois dans un MP qu'il a pas encore tester le hta qui est obsolète aujourd'hui
Bonsoir,
Bon du coup j'ai pas trop avancé sur mon projet aujourd'hui par contre j'ai lu pleins de choses intéressantes sur le forum. Je lis aussi le sujet itwoo dont vous parliez plus haut pour essayer de profiter de ses interrogations ça pourra m'aider.
Sinon je pense que je vais déjà passer pas mal de jours pour améliorer et compléter mes feuilles Excel et déployer le peu de code que je commence maitriser mais qui devrait déjà me permettre de faire pas mal de récupérations de données.
Je pense que je vais être capable de récupérer des données d'autres sites comme Yahoo finance. Par contre j'entrevois déjà des grosses difficultés pour la récupération de données sur les certains sites comme http://www.morningstar.fr/fr/ car la construction de leurs URL me semble beaucoup plus compliquée.
Je reviens par ici lorsque je serai bloqué.
Bonsoir,
J'ai un peu avancé sur mon programme et j'ai besoin de votre aide pour comprendre comment fonctionne l'URL pour Morningstar et s'il y a moyen de récupérer les informations sur ce site à partir de l'ISIN ou d'un autre moyen d'identification.
Voici ma feuille actuelle :
Par exemple :
Pour le premier fond, CARMIGNAC EMERGENTS A EUR / ISIN : FR0010149302
L'URL est la suivante : http://www.morningstar.fr/fr/funds/s...?id=F0GBR04F8J
Pour le deuxième fond, CCR CROISSANCE EUROPE R / ISIN : FR0007016068
L'URL est la suivante : http://www.morningstar.fr/fr/funds/s...?id=F0GBR04QFV
Donc apparemment la reconnaissance se fait par un id mais y a-t-il un moyen en regardant le code source de la page internet de savoir comment cet id fait la correspondance avec l'isin par exemple?
d'abords 1 question
les éléments précèdent sont ils sur la même feuille exel?? vu que la capture d'écran est très ressemblante
si c'est le cas tu t'embarque pour 4 ans pas 1
alors il n'y a pas de correspondance directe dans le code source exploitable
par contre avec l'espion IE quand on utilise le moteur de recherche interne a morni.....
on trouve ceci:
et on tombe sur une page avec les occurrences trouvées en l'occurrence une seulehttp://www.morningstar.fr/fr/funds/S...s.aspx?search= FR0010149302 &type=
quand on clique sur cette occurrence on arrive enfin sur la page
donc si tu veux continuer a travailler avec les isin tu va devoir faire 2 requête pour cette page
la première pour trouver le lien la deuxième pour y aller
Je ne suis pas sûr de comprendre la question, en fait, je fait un onglet par compte ici je suis sur l'onglet "Avie Linxea Evol" (c'est donc une assurance vie et le site morningstar est plus fournis pour ce type de compte) jusqu'à présent j'étais sur l'onglet "PEA Binck" qui était donc mon Plan épargne en Action (on voit les différents onglets sur la capture de mon message précédent).
Une fois abouti, tous les onglets de compte auront la même forme (à priori), à savoir
- 1 tableau avec les fond/action/tracker... détenus dans le portefeuille
- différents détails avec des informations à extraire du site morningstar (ou autre) comme on peut le voir (pour partie) sur la capture de mon message précédent
D'autres onglets différents dédiés à l'analyse et au choix des actions viendront s'ajouter plus tard. Le premier onglet "Synthèse" résumera les totaux des différents comptes et leur évolution dans le temps et servira je pense d'interface de saisie pour les achats et les ventes d'action/fonds/...
Aïe
A oui c'est une bonne piste que je vais examiner demain même si cette histoire de double requête me parait être au delà de mes capacités actuelles de programmeur, enfin je n'ai pas encore essayé on verra. J'aimerai dans un premier temps réussir à récupérer la valeur et la devise pour les intégrer dans les colonnes F et G pour voir si le code tourne bien déjà pour ces manipulations "simples".
Sinon pour les ISIN ça ne me dérange pas de ne pas travailler avec mais cela serait quand même plus pratique et plus homogène car l'ISIN est un numéro unique normé utilisé avec tous les sites (pour Bloomberg, je n'avais pas trouvé les ISIN donc je suis parti sur les Tickers pour l'instant mais l'ISIN serait aussi préférable). Après peut-être est il possible d'avoir une fonction VBA qui convertisse l'ISIN entré avec les id qui sont propres à Morningstar il me faudrait alors peut être une base de donnée ou un équivalent?
je viens de te le dire comment faireAprès peut-être est il possible d'avoir une fonction VBA qui convertisse l'ISIN entré avec les id qui sont propres à Morningstar il me faudrait alors peut être une base de donnée ou un équivalent?
Merci Patrick,
Alors grâce à ta piste et à l'espion IE j'ai compris en théorie comment faire.
- Je dois faire une première requête sur l'URL http://www.morningstar.fr/fr/funds/S...h=fr0010149302 pour récupérer l'id qui se trouve dans le code à l'emplacement suivant (exemple ici avec l'ISIN fr0010149302 qui renvoi l'id F0GBR04F8J) :
- Je dois faire une deuxième requête sur l'URL http://www.morningstar.fr/fr/funds/s...?id=F0GBR04F8J
Du coup je me lance dans un début de programmation que voici. (code incomplet car j'ai déjà une erreur donc j'ai arrêté)
J'ai une erreur "erreur de compilation constante requise sur "priX" en ligne 21 que je n'arrive pas à comprendre puisque je l'ai déclarée en ligne 4.
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 Option Base 1 Function RecuperationMorningstar(iSin) Const priX = "td class=""msDataText searchLink"">" Dim tablo(1, 2) Dim oHttp As Object, txt$, i&, j& On Error Resume Next Set oHttp = CreateObject("MSXML2.XMLHTTP") If Err <> 0 Then Set oHttp = CreateObject("MSXML.XMLHTTPRequest") If oHttp Is Nothing Then MsgBox "MSXML2.XMLHTTP not found", 16, "Error": Exit Function On Error GoTo 0 '1ere étape, récupérer l'iD morningstar à partir de l'ISIN With oHttp .Open "GET", "http://www.morningstar.fr/fr/funds/SecuritySearchResults.aspx?type=ALL&search=" & iSin, False .send txt = .responseText i = InStr(1, txt, priX, 1) '(...) '2ème étape, récupérer la valeur et la devise à partir de l'iD morningstar '(...) End Function '------------------------------------------------------------------------------------------ Sub test2() For i = 6 To Cells(Rows.Count, 3).End(xlUp).Row Range(Cells(i, 6), Cells(i, 7)) = IIf(Cells(i, 3) <> "", RecuperationMorningstar(Cells(i, 3)), "") Next End Sub
D'autre part, je me demande si le code en ligne 31va fonctionner puisque j'ai ajouté d'autres tableaux sous le premier sur ma feuille Excel (voir ci-après).
Code : Sélectionner tout - Visualiser dans une fenêtre à part End(xlUp)
Avez-vous des pistes pour résoudre cette erreur ?
re
wahouh!! t'é un furieux toi
tu répète exactement ce que je t'ai dis (a propos des deux requête)
le mieux c'est que tu mette en pièce jointe un exemplaire avec seulement les donné non confidentielle
la colonne 1 et 3 pour les blomberg
et la colonne utile (titre et isin pour les morningstar
on va pas y arriver , on va passer un temps fou a ce comprendre et j'ai pas envie de recommencer ce que j'ai fait avec un autre
va y envoie la patate
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager