Bourse VBA & Excel

Dfripe

XLDnaute Nouveau
Bonjour,
J'ai cherché sans succes pendant 3 jours sur le web avant de poster, j'ai trouvé des solutions approchées mais jamais exactement ce qu'il me fallait...

Voici donc mon probleme :
J'ai crée un tableau excel avec des cours de bourse qui se mettent à jour en temps réel sur le web sur boursorama(non sans mal).

J'aimerai faire en sorte que lorsque le cours en question "approche" un plafond que j'aurais fixé pour chaque cours, une message box apparaisse pour m'en avertir.
Je suis nul en vba donc j'ai essayé mais sans succes de programmer une macro...

Donc voilà si quelqu'un peu m'aider je lui en serais grandement reconnaissant.
Merci par avance.
 
Dernière édition:

Kotov

XLDnaute Impliqué
Re : Bourse VBA & Excel

Bonjour Dfripe et bienvenu sur ce forum,

Voici une approche que tu pourrais tenter :

Dans l'exemple suivant, les hypothèses de départ sont :
le seuil d'alerte en A1
le nom de l'action en A2
le cours actuel de l'action en B2

Dans la macro ci dessous, qui se déclenche à chaque changement de cellule, je commence par déclarer 3 espaces dédiés aux variables (Nom d'action, cours et seuil d'alerte).
Puis j'attribue à ces variables les valeurs se situant dans les cellules correspondantes (A1,A2,B2).
Enfin, la ligne qui démarre par "If ..." vérifie la condition d'atteinte du seuil d'alerte.
Si le seuil d'alerte est atteint, un message s'affiche via une boite de dialogue.
Par exemple :
"A 151 €, le cours de l'action XLD atteint le seuil d'alerte fixé à 150 €"

Cet exemple est bien entendu à adapter à tes besoins, mais c'est une première base pour démarrer.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim Cours1 As Double, Seuil1 As Double, Action1 As String

Seuil1 = Cells(1, 1)
Action1 = Cells(2, 1)
Cours1 = Cells(2, 2)

If Cours1 >= Seuil1 Then MsgBox "A " & Cours1 & " €, le cours de l'action " & Action1 & " atteint le seuil d'alerte fixé à " & Seuil1 & " €"

End Sub

Bonne soirée
Kotov
 

Dfripe

XLDnaute Nouveau
Re : Bourse VBA & Excel

Merci beaucoup pour ton aide c'est infernal cette histoire!

Cependant j'ai un probleme avec ton code VBA m'affiche un message d'erreur
"erreur d'exécution 13
incompatibilité de type"

Quand je clique sur débogage il surligne en jaune le "Seuil1 = Cells(5, 5)"
Je vais t'envoyer un lien cjoint si ça te dis de regarder le fichier en question.

http://cjoint.com/?jtk3Kdgsk5

En effet comme je l'ai présciser dans mon intitulé mes données se mettent à jour sur boursorama, le probleme étant que je ne peut pas les utiliser tel quel pcq excel ne les reconnait pas comme des nombres(calcul impossible par ex.).
J'ai donc fait un gauche pour récuperrer les valeurs numériques sans les devises associées. C'est peut etre de là d'ou vient le probleme...

Encore merci pour tout.
 

Dfripe

XLDnaute Nouveau
Re : Bourse VBA & Excel

Le problème doit venir de tes données affichées qui ne sont pas en chiffre mais en texte, je laisse les pro dégoupiller ça...

En effet tu as raison, j'ai recopié betement la valeur (avec une virgule pour les décimales au lieu d'un point) et la formule marche...
Le probleme vient donc de là, car je ne pourrais pas remplacer à chaque fois des dizaines de valeurs qui se mettent à jour toutes les minutes!!

Une autre précision que j'adresse à Kotov (et que je remercie encore pour son aide) tient au fait que le message d'alerte apparait uniquement si une des cellules est selectionnée. Cependant ne serait il pas possible de faire en sorte (peut etre avec une boucle) que la macro tourne en boucle pour chercher si un des cours des différentes actions à touché le seuil pré-défini et m'en alerte immédiatement (puis une fois que j'aurais cliqué sur ok la macro se remet à chercher, un peut suivant le principe du Ctrl+F de Windows).

J'espere avoir été clair.

Et encore merci pour votre implication à tout les deux.
 

Kotov

XLDnaute Impliqué
Re : Bourse VBA & Excel

Bonsoir Dfripe, Charly88, le forum,

Effectivement, l'erreur 13, provient du fait que tes valeurs ne sont pas au format numérique mais au format texte

J'ai regardé ton exemple et je te propose en premier lieu une petite modif :

Ton exemple, respectivement en cellules A2 _ B2 _ C2 _ D2 :
HP _ NYSE Décalé _47.07 USD _ 47.07


Dans la formule située dans ta cellule D2 (en rouge), tu réalises une extraction par la gauche, pour supprimer la monnaie : =GAUCHE(C2;5).
Problème, la valeur étant de longueur variable, tu ne connais pas la limite de ton extraction par la gauche (avec 12345.56 USD), il faut obtenir =GAUCHE(C2;8)
Par ailleurs, 2ème problème, quand l'extraction se passe bien, tu disposes alors d'une valeur au format US (séparateur = point au lieu de la virgule au format français)
3ème problème, la valeur est au format texte.

Pour remédier à tous ces inconvénients en une seule fois, je te propose de remplacer ta formule en D2 par 4 fonctions imbriquées :
Code:
 [B][color=blue]
=CNUM(SUBSTITUE(GAUCHE(C2;TROUVE(" ";C2;1)-1);".";","))[/color][/B]

Traduction (sens de lecture : de la fonction la plus imbriquée (TROUVE) à la moins imbriquée (CNUM)

TROUVE(" ";C2;1)
- Je demande en premier lieu à trouver l'emplacement de l'espace (" ")dans la cellule C2,à partir du premier caractère. Il y a toujours un espace avant la monnaie. Dans l'exemple en C2 (47.07 USD), l'espace se situe en 6ème position. J'obtiens la valeur 6

GAUCHE(C2;TROUVE(" ";C2;1)-1)
- j'extrais alors dans ta cellule C2, le nombre de caractères situés avant l'espace : TROUVE(" ";C2;1)-1 revient à dire en C2 : les 5 (6-1) caractères à partir de la gauche
J'ai donc maintenant 47.07

SUBSTITUE(GAUCHE(C2;TROUVE(" ";C2;1)-1);".";",")
-je demande alors la substitution en C2 du point par une virgule
J'ai donc maintenant 47,07 (probablement au format texte, ce qui finalement n'a pas d'importance au vu de la conversion qui suit)

Il ne reste qu'à convertir le tout en valeur numérique via la fonction CNUM
=CNUM(SUBSTITUE(GAUCHE(C2;TROUVE(" ";C2;1)-1);".";","))
Et j'obtiens 47,07 le tout en une seule formule.

Ton problème de conversion est maintenant réglé.

Reste le problème de la macro évènementielle qui va déclencher la recherche. Dans l'exemple que je t'avais proposé, elle se déclenche à chaque changement de cellule (Worksheet_SelectionChange).
Mais bien évidement, tu peux envisager un autre évènement déclencheur :

Quelques exemples :
Code:
Private Sub Worksheet_Activate()
la macro se déclenche à l'activation de la feuille
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
la macro se déclenche sur un double clic
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
la macro se déclenche sur un clic droit
End Sub

Private Sub Worksheet_Calculate()
la macro se déclenche sur un recalcul de la feuille
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
la macro se déclenche sur changement de feuille
End Sub

...

Tu peux également programmer l'évènement déclencheur à partir d'un clic sur un bouton que tu auras créé, ou à partir d'un raccourci clavier que tu auras préalablement défini.
Plus complexe, tu peux également envisager un déclenchement régulier selon un intervalle-temps que tu définis (cherches sur ce forum des exemples avec Timer).

J'espère t'avoir mis sur la voie.
Explores différentes pistes, demandes conseil sur ce forum.

En ce qui me concerne, j'aurais très peu de disponibilités ce week-end pour te guider, mais les "collègues du forum" t'aideront sans problème.

Bonne soirée, bon week-end studieux en VBA (c'est pas évident au début, mais après c'est assez grisant de réaliser ses propres macros).

Kotov
 
Dernière édition:

Dfripe

XLDnaute Nouveau
Re : Bourse VBA & Excel

Bonjour à tous,
Tout d'abord un grand merci à toi Kotov pour aide et ton implication.

Voici ma dernière version test:
http://cjoint.com/?jwpOx50XAQ

A noter que je n'arrive pas à faire marcher ta formule (je l'ai mise dans le fichier test pour que tu puisses le constater).
Code:

=CNUM(SUBSTITUE(GAUCHE(C2;TROUVE(" ";C2;1)-1);".";","))

Un #VALEUR! apparait... J'ai donc improvisé.

En outre j'ai regardé les différentes propositions que tu m'a fait et je trouve que le code :

Private Sub Worksheet_Calculate()
la macro se déclenche sur un recalcul de la feuille
End Sub


Est celle qui me correspond le mieux, car le tableau devient casi-autonome tel un "Reuters" que je laisse tourner et qui m'averti quand nécessaire.

Cependant comme sa définition l'indique, la msgbox apparait à chaque recalcul soit 10 fois pour 5 lignes de données dans mon tableau...
Il y aurait il un moyen d'y remedier? Soit une box pour une ligne...


De plus vous pourrez observer que j'ai dans VB une ligne de code pour chaque cours cependant mon tableau d'origine fait environ 160 lignes avec différentes positions sur une meme action (par ex 1000 carrefour & 100 carrefour est différent de 1100 Carrefour).

Je cherche donc une solution pour les n lignes.
Mais c'est vraiment dur( je regarde toujours avant de poster)!


PS:
J'ai essayé de travailler le tableau sur un autre poste cependant la récupération des données via le web (Boursorama) ne marche plus...
Un message d'erreur s'affiche:
"...connexion établie mais impossible de récuperer les données."
Si vous avez une idée je suis prenneur car ce probleme m'ennuis énormément....!

Encore (mais je ne le dirais jamais assez!) merci infiniment pour votre aide à tous.
 

Kotov

XLDnaute Impliqué
Re : Bourse VBA & Excel

Bonsoir Dfripe, le forum,

Normal que la formule ne fonctionne dans ton fichier puisque les données ne sont pas homogènes :
Parfois ta valeur est inscrite 67.295 EUR, parfois 7.26(c) USD.
Ma formule extrait les données situées à gauche de l'espace. Elle fonctionne dans le premier cas, pas dans le second puisque ce n'est plus l'espace qui faut repérer mais la parenthèse ouvrante.

Aussi, pour remédier à ce problème, je te propose la formule suivante (qui fonctionne, je l'ai vérifié) :
Code:
=SI(ESTERREUR(CNUM(SUBSTITUE(GAUCHE(C2;TROUVE(" ";C2;1)-1);".";",")));CNUM(SUBSTITUE(GAUCHE(C2;TROUVE("(";C2;1)-1);".";","));CNUM(SUBSTITUE(GAUCHE(C2;TROUVE(" ";C2;1)-1);".";",")))

Second problème :
Tu souhaites obtenir un message par action qui atteint le seuil fixé.
Tu as recopié ma macro exemple qui ne fonctionne qu'avec une valeur mais ça risque d'être galère d'autant que tu ne sais pas combien de lignes tu vas analyser.
Je te propose beaucoup plus simple et surtout beaucoup plus efficace :
Une macro qui va compter le nombre de valeurs à analyser (n) et qui va tourner en boucle sur chaque ligne jusqu'à la dernière (tu peux suivre 65535 actions !).

A chaque fois que le seuil sera atteint, tu auras un message.
Code:
Private Sub Worksheet_Calculate()
Dim Cours1 As Double, Seuil1 As Double, Action1 As String
Dim n&, i&
n = Cells(65536, 2).End(3).Row
For i = 2 To n
    Seuil1 = Cells(i, 5)
    Action1 = Cells(i, 1)
    Cours1 = Cells(i, 4)
    Cells(i, 1).Select
If Cours1 >= Seuil1 Then MsgBox "A " & Cours1 & " €, le cours de l'action " & Action1 & " a atteint le seuil d'alerte fixé à " & Seuil1 & " €"
Next i
End Sub
(à noter, ton choix de l'évènement Calculate me semble excellent)
J'ai modifié ton fichier et je te le joins ci-après.

Bonne soirée
Kotov
 

Pièces jointes

  • TonFichier.xls
    44 KB · Affichages: 945
  • TonFichier.xls
    44 KB · Affichages: 967
  • TonFichier.xls
    44 KB · Affichages: 990
Dernière édition:

Dfripe

XLDnaute Nouveau
Re : Bourse VBA & Excel

Milles merci à toi Kotov,

Cependant j'ai plusieurs questions:

http://cjoint.com/?jymeSK78Il

Tu verras, que lorsque la feuille s'actualise il y a beaucoup trop de messages d'alerte.

Je m'explique :

Par exemple "Cours à 55 seuil à 53 " va s'afficher 3 fois car l'actualisation des données sur le web se fait (se calcule) en 3 temps [1-2-3 / Visibles grace au petit globe tournant en bas à droite de la feuille Excel] car l'actualisation du tableau se bloque lorsque la msgbox est affichée...

En fait les données sont reçues par palier et chaque fois qu'une info bouge ça te déclenche la macro et si j' avais 50 lignes, la msgbox apparaitrait 50 x3 fois.

Peut etre devrais t on implémenter un "OK dans 30 sec + décompte" en suivant le principe des maj windows pour permettre à la maj web de continuer? (Bien évidement si cela est possible).

Peut etre devrait on définir si c'est possible une éxécution de macro toute les deux minutes (J'ai shématisé par une frise sur le fichier).

Enfin tu ne m'as pas répondu en ce qui concerne l'erreur d'actualisation que j'ai lorsque j'ouvre le tableau sur une autre machine...
message d'erreur :
"...connexion établie mais impossible de récuperer les données."

cf imp écran: http://cjoint.com/?jyrmotmIdl


Peut etre qu'il y a un lien entre les deux problemes...
D'ailleur, les données s'actualisent elles sur ton PC quand tu ouvre le doc?


C'est comme la recherche scientifique : les réponses posent encore plus de questions...!
Encore un grand merci pour ton aide.
 
Dernière édition:

Dfripe

XLDnaute Nouveau
Re : Bourse VBA & Excel

Bonjour à tous ,
Kotov as tu abandonné?
Ou es tu simplement trop occupé pour m'aider?

Surtout ne t'offusque pas de part ma question.
Je te le demande pour savoir si je dois toujours surveiller ce forum ou poster ailleurs car mon problème devient urgent.

Encore merci pour tout.
 

arnauddevasselot

XLDnaute Nouveau
Re : Bourse VBA & Excel

Bonjour à tous ,
Kotov as tu abandonné?
Ou es tu simplement trop occupé pour m'aider?

Surtout ne t'offusque pas de part ma question.
Je te le demande pour savoir si je dois toujours surveiller ce forum ou poster ailleurs car mon problème devient urgent.

Encore merci pour tout.


Bonjour Dfripe,
J'aurais voulu savoir comment tu as fait pour récupérer les cours de bourses de Boursorama sur excel?
Je galère pas mal pour trouver des infos sur le net...
Aurais-tu un code à partager, ou alors un algo?
Merci d'avance.
 

badguiz

XLDnaute Nouveau
Re : Bourse VBA & Excel

Bonjour !

Je me permets d'intervenir dans vos conversation car le sujet m'interesse grandement ! Je cherche à récupérer les cours de bourse sur boursorama par exemple, mais je ne sais pas trop comment me connecter à une page web en vba sous excel....

Je me suis amusé à DL le fichier *.xls qui est sur ces pages du forum, et `ca semble faire exactement ce que je cherche à faire, mais je ne trouve pas les macros, ou plutôt elle m'apparaissent vide :(

Quelqu'un aurait des petites idées ou suggestions pour m'aiguiller ? Au pire je ne vous demande pas de me donner un fichier tout cuit dans le bec, juste des pistes pour que je trouve les fonctions et comment les utiliser ?

Merci !!
 

badguiz

XLDnaute Nouveau
Re : Bourse VBA & Excel

Effectivement, c'est bien de ce fichier dont je parle.
J'ai bien vu que tu avais du code dans la feuil1, mais c'est juste la procédure Woksheets_Calculate() et pas la macro d'acces aux valeurs sur internet...
 

Discussions similaires

Statistiques des forums

Discussions
312 188
Messages
2 086 026
Membres
103 099
dernier inscrit
myseb