Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Créer une fonction à partir d’une macro

A

albert

Guest
Bonjours à tous et à toutes,
J’ai écrit une fonction qui a fonctionné une fois (mais qui ne marche plus à présent)

- j’ai également essayé de remplacer cours = Sheets("Feuil2").Cells(1, 6) par cours"" de manière à pouvoir écrire dans la fenêtre de la boîte de dialogue

lorsque j’essaie à nouveau d’écrire dans la fenêtre, il y a un message : »impossible de modifier cette cellule alors qu’une macro est en pause »
qu’est-ce que veut dire ce message et comment résoudre ce problème ?


merci d'avance



Function fin(isin) As Byte
cours = Sheets("Feuil2").Cells(1, 6)
Cells.Select
Selection.Clear

With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.fininfo.fr/fininfo/GetResume.event?id=" & cours & "" _
, Destination:=Range("A1"))
.WebFormatting = xlWebFormattingNone
'.WebTables = "7" 'tableau
.WebTables = "8" 'dernier
.Refresh BackgroundQuery:=False
End With
Cells(1, 1).Select
End Function
 

Pièces jointes

  • fonctionFinInfo.zip
    8.9 KB · Affichages: 54
F

F.launay

Guest
Bonjour Albert
j'ai pris connaissance avec interet de tes derniers fils. je ne réponds pas directement à ta question mais je te joins un zip qui fait un boucle sur une
série de valeurs representant un portefeuille.
A priori elle marche chez moi -sous win98 et excel 2000-.
Malheureusement je n'y connais rien en querytables.
Pourrais tu dans cette macro, obtenir la séparation du cours et de sa variation (dans la phase requête)?
Autre question Est il possible à ton avis de récupérer le cours d'une valeur
à une date déterminée, disons dans une fourchette de 30 jours par rapport à la date du jour?
Merci de ta contribution
 

Pièces jointes

  • Action.zip
    10.5 KB · Affichages: 61
  • Action.zip
    10.5 KB · Affichages: 55
  • Action.zip
    10.5 KB · Affichages: 56
A

albert

Guest
Bonjour F.launay
Je fais un passage rapide, je ne peux rester longtemps, j’espliquerai le fonctionnement des querytables et .WebTables en détail lundi, si tu es intéressé.

1/Pour la séparation du cours et de sa variation, dans la phase requête, je n’ai pas essayé, il faut que j’y travaille. .WebTables travaille par tableaux, ce qui fait qu’il faut isoler la chaîne de caractères à supprimer.
Il y a eu un fil récent sur le sujet : http://www.excel-downloads.com/html/French/forum/read.php?f=1&i=111068&t=110628

2/ pour récupérer le cours d'une valeur à une date déterminée il faut que je j'analyse l’url – mes premiers essais sont infructueux-

…pas mal ta boucle, j’avais l’intention de m’y mettre dès lundi… travail collectif fructueux


sur la Function : j’ai fai plusieurs tests, ça marche parfois. Il doit y avoir une temporisation difficile à maîtriser. Je crois que je vais abandonner cette solution pour préférer la Sub

bon WE
cordialement

albert
 
F

F.launay

Guest
re bonsoir
ci joint du code que j'avais trouvé en son temps sur un site, mais que je n'ai
jamais pu exploité vu mon niveau de débutant en vba.
Si ça peux te rendre service
A+
sub coursdebourse
Dim xl,sh,qt
Const url="http://pocketpc.msn.fr/services/money/
ppcquote.asp?market=FR%3A&wkn=3112
Set xl=CreateObject("Excel.Application")
xl.Visible=true
Set sh=xl.workbooks.add().sheets(1)
Set Qt=sh.Querytables_
.Add(connection:="URL;"&url,_
Destination:=sh.cells(1,1))
qt.webformating=3:qt BackgroundQuery=0
qt.WebselectionType=1:qt.refresh
Selection.insertAfter(sh.Range("A10").value)
xl.Displayalerts=False:xl.quit
end sub
 

Pièces jointes

  • Euronext2.zip
    13.8 KB · Affichages: 50
F

F.Launay

Guest
Bonjour; ci joint
ci-joint mon dernier développement.
je n'ai pas testé :
le code sur la gestion d'erreur en cas d'erreur sur le code isin.
le bon déroulement de la macro si on veut récupérer la cotation d'une valeur étrangère.
je bute sur la mise en constante de l'adresse Web.
je voudrais également supprimer par macro tous les noms de cellules
commençant par DonnéesExternes_*
A voir aussi si cette macro tournera si on lance la requête vers d'autres sites : Yahoo, Euronext
Bon courage.
 

Pièces jointes

  • Action3.zip
    18.2 KB · Affichages: 56
A

albert

Guest
bonjour F.Launay,
beau travail !! (tu ne dors jamais ??)

avant de regarder tes codes, j'envoie des macros, notamment pour trouver le cours à une date déterminée sur YAHOO et pour télécharger sur Euronext



Methodologie

1/ mise en route de l’enregistreur de macro
2/ données externes : nouvelle requête sur le web
exemple d’adresse
http://fr.moneycentral.msn.com/investor/quotes/quotes.asp?Symbol=FR%3AFR0000130007
si on active le code on obtient une page entière.


Pour sélectionner les informations : cocher « une ou plusieurs tables précises de la plage »
- entrer le nom ou n° de table : essai avec 1 on obtient également une page entière
2 = on obtient « Accueil MSN | Mon MSN | Hotmail | Rechercher | Shopping | Finances |
3 = idem … 6 = même résultat que 1, mais la page n’est pas disposée de la même manière … etc…28 donne un tableau exploitable
…. Je n’ai pas réussi à isoler le cours le cours
Je supprime ce qui est inutile pour cette requête : il reste
Sub Macro1()
Cells.Select
Selection.Clear
'Selection.QueryTable.Delete
Range("A1").Select
'----------------requète--------------
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://fr.moneycentral.msn.com/investor/quotes/quotes.asp?Symbol=FR%3AFR0000130007" _
, Destination:=Range("A1"))
.WebFormatting = xlWebFormattingNone
.WebTables = "28"
.Refresh BackgroundQuery:=False
End With
End Sub

Sur euronext l’inconvénient, c’est qu’il faut relever tous les codes manuellement
Sub Macro1()
cours = Sheets("Feuil2").Cells(1, 10)
Sheets("Feuil1").Select
Cells.Select
Selection.Clear
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.euronext.com/trader/summarizedmarket/0,4772,1679_6834,00.html?selectedMep=1&idInstrument=" & cours & "" _
, Destination:=Range("A1"))

.WebFormatting = xlWebFormattingNone
' .WebTables = "105"
.WebTables = "110" 'donne Achat
.Refresh BackgroundQuery:=False
End With

End Sub

Sur yahoo, il n’est pas nécessaire d’utiliser .WebTables : il y a une version épurée Télécharger au format tableur mais il y a encore un problème de codes propres à yahoo j’indique ce codes pour le CAC40 en Feuil2
Sub Macro1()
Cells.Select
Selection.Clear
' Selection.QueryTable.Delete
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://fr.finance.yahoo.com/d/quotes.csv?s=ACCP.PA&f=snl1d1t1c1ohgv&e=.csv" _
, Destination:=Range("A1"))
.Refresh BackgroundQuery:=False
End With
End Sub

Pour obtenir le cours à une date déterminée : dates en J , Feuil2
Résultat Feuil3

http://fr.table.finance.yahoo.com/d?b=17&a=8&c=2004&e=17&d=8&f=2004&g=d&s=ACCP.PA


Pour la mise en forme dans le portefeuille, je suis limité par le temps aujourd'hui, cependant je te fais confiance, tu dis que tu débutes mais tu as montré que tu maîtises bien vba

montre nous ton résultat ( Action3.zip est un vrai régal)
à +

albert
 

Pièces jointes

  • telecharge.zip
    26.6 KB · Affichages: 69
  • telecharge.zip
    26.6 KB · Affichages: 68
  • telecharge.zip
    26.6 KB · Affichages: 61
A

albert

Guest
J’ai repris l’ensemble des questions que tu poses :



« le bon déroulement de la macro si on veut récupérer la cotation d'une valeur étrangère. »

Yahoo permet en effet de récupérer des données sur les places étrangères sans modification de l’adresse url

»je bute sur la mise en constante de l'adresse Web. » :

tu peux donner un exemple ?

»je voudrais également supprimer par macro tous les noms de cellules
commençant par DonnéesExternes_* »

je n’ai ps trouvé trace de « DonnéesExternes_* « dans Action3

»A voir aussi si cette macro tournera si on lance la requête vers d'autres sites : Yahoo, Euronext «
il faut modifier les adresses

….j’ai également fait une recherche par noms sur le forum … en fait tu étais débutant il y a 10 ans ???


« mais que je n'ai jamais pu exploité vu mon niveau de débutant en vba. »



albert
 
A

albert

Guest
Sub coursdebourse()

'ce code crée une nouvelle feuille à chaque reqhête et télécharge la page web
Dim xl, sh, qt
Const url = "http://fr.moneycentral.msn.com/investor/quotes/quotes.asp?Symbol=FR%3ACGE"
Set xl = CreateObject("Excel.Application")
xl.Visible = True
Set sh = xl.Workbooks.Add().Sheets(1)
Set qt = sh.QueryTables.Add(Connection:="URL;" & url, _
Destination:=sh.Cells(1, 1))
'qt.webformating = 3 ': qt BackgroundQuery = 0
qt.WebSelectionType = 1: qt.Refresh
'Selection.insertAfter (sh.Range("A10").Value)
'xl.DisplayAlerts = False: xl.Quit
End Sub
 

Pièces jointes

  • CoursDeBourse.zip
    7.2 KB · Affichages: 62
A

albert

Guest
Bonjour F.launay,

J’ai cherché une solution plus souple que d’utiliser l’adresse yahoo.

La Tribune autorise les retours en arrière avec DateStart
(Macro3)
http://www.boursev4.latribune.fr/php/TRB_Historique.php?isin1=FR0000120404&place=PA&DateStart=10/09/2004

le résultat n’est pas exploitable en l’état :
- on peut ouvrir un page intermédiaire (Sub cours())
- ou ajouter une feuille – solution plus élégante – (AjouteFeuil())


le cours intraday est donné par (Macro1)
http://www.boursev4.latribune.fr/php/TRB_FicheValeur.php?symbole=FR0000120404

Cours différés d'au moins 15 minutes (Paris, Nasdaq, Milan, Bruxelles, Amsterdam),
20 minutes (Nyse) - Indices en temps réel

------------------
lorsque tu dis »je bute sur la mise en constante de l'adresse Web. » , je suppose qu'il s'agit de " & - & "

" & référence_à_cellule & "
cordialement

albert
 

Pièces jointes

  • LaTribune.zip
    14.3 KB · Affichages: 57
F

f.launay

Guest
Bonsoir,
ci joint le fichier oublié
j'ai solutionné le probleme de la constante dans action 5
ce que j'aimerai, c'est que ce type de traitement soit standardisé pour traiter n'importe quel type de valeurs: obligations sicav fcp.
Quel code permet de les différentier sur la page appelee
sachant que je ne dispose que de la variable code isin.
Merci de ton aide à +
 

Pièces jointes

  • hmdr-20040629.zip
    36.9 KB · Affichages: 54
A

albert

Guest
bonjour f.launay,

On ne trouve pas les obligations, ni les OPCVM sur yahoo et sur Fininfo,on ne peut pas exploiter l’adresse url des OPCVM

Pour avoir les codes yahoo , il faut les relever manuellement (pièce jointe codes sbf 120)
Pour les obligations sicav fcp. français, tu les trouves sur la tribune avec un code isin
http://www.boursev4.latribune.fr/php/TRB_Marche.php?Marche=027&Lettre=0&Page=1

pour avoir les codes, tu vas sur bourso et tu télécharges en format libre
http://www.boursorama.com/outils/telechargement/telechargement.phtml

par ailleurs, rien ne t’empêche d’utiliser les pages bourso

Sub bourso
Sheets.Add ' crée une feuille

With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.boursorama.com/cours.phtml?code=13000&choix_bourse=pays%3D33&categorie=" _
, Destination:=Range("A1"))
.Name = "cours.phtml?code=13000&choix_bourse=pays%3D33&categorie="
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "12,15" 'extraction seulement d'une partie
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.Refresh BackgroundQuery:=False
End With

End sub
(mon navigateur ne prend pas les pages bourso)

... je vois que tu te lances dans un gros projet.
explique moi quel est ton but, ça évitera peut-être du travail inutile.
Par exemple, lorsque tu constuis un portefeuille, il ne sert à rien d'avoir le cours de clôture du jour de l'achat du titre, puisque l'ordre peut être exécuté dans la journée, et donc à un cours différent de celui de fin de journée...

à +

albert
 

Pièces jointes

  • codesyahoo.zip
    3.2 KB · Affichages: 75

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…