Se connecter avec
S'enregistrer | Connectez-vous

importer données matricielles+DDE dans excel

Dernière réponse : dans Programmation

Bonsoir,
J'aimerais si cela était possible un petit coup de main. Au moins avoir quelques pistes de formules.
Je débute en VBA (excel, ça va encore....)

J'utilise un logiciel de bourse, Tradexpert.
Il est possible de façon conjointe (mais uniquement après ouverture de ce logiciel) d'importer les cours de bourse en temps réel dans excel en mettant la formule matricielle suivante sur une plage de cellules:
{=TDXDDE|FLUX!Info2?FR0003500008025}
J'ai alors dans excel différentes informations concernant cette valeur (FR0003500008) : dernier cours, heure de la dernière transaction...
Je sais qu'il est possible de n'importer que certains éléments de la matrice : {=INDEX(TDXDDE|FLUX!Info2?FR0003500008025025;2)}

Mon souhait : archiver l'un derrière l'autre le dernier cours et l'heure d'affichage au fur et a mesure de leur changement(toutes les 30 secondes)
ex : time cours
09:30:00 4600
09:30:30 4601
09:31:00 4610

est-ce possible ? Merci de m'indiquer quelques pistes de recherches.
Merci pour votre comprehension.
jc
Lassé par la pub ? Créez un compte

Bonsoir,
Je ne suis pas allé chercher du coté de "Application.Ontime" puisque les cours apparaissent en permanence à intervalle régulier de 30 secondes et que l'heure s'affiche grace à la liaison DDE
Dans feuil1 j'importe les liaisons DDE.
Dans feuil2 j'importe "horaire" et "cours" depuis la feuil1 et je mets d'office les horaires rencontrés dans la journée (toujours les mêmes)
Le code détecte tous les changements de valeur de "horaire", copie le cours, retrouve la valeur correspondante de l'heure et colle dans la cellule a coté le cours. Simple.

  1. Private Sub Worksheet_Calculate()
  2. cherche_valeur
  3. End Sub
  4. Sub cherche_valeur()
  5. Dim horaire As Range
  6. Dim cours As Range
  7. Set horaire = Cells(1, 2)
  8. Set cours = Cells(2, 2)
  9. For Each c In [D1:D1082]
  10. If c Like horaire Then
  11. c.Select
  12. ActiveCell.Offset(0, 1).Select
  13. ActiveCell.Formula = cours
  14. Exit Sub
  15. End If
  16. Next
  17. MsgBox "Pas de " & horaire & " dans la plage testée!"
  18. End Sub


Bon, il reste beaucoup de chose à paufiner.
En particulier j'aimerais que ce code fonctionne en sous main et que je puisse tripoter d'autre feuilles excel pendant ce temps...
et qu'il ne se déclenche que lorsque certaines valeur de cellule change...
Et que je vire l'activation de la cellule dans laquelle est copié "le cours" car la souris est alors occupée.... Allez, j'y retourne
Merci
jc
Expert Programmation

Alors OnTime, c'est pour créer un timer, pour que ta feuille ne *travaille* que de temps en temps. Si ça ne t'intéresse pas... tant pis. Je n'ai pas compris comment tu fais pour actionner ton code ?

Au lieu de faire :
  1. c.Select
  2. ActiveCell.Offset(0, 1).Select
  3. ActiveCell.Formula = cours


Je te propose de faire directement
  1. c.Offset(0, 1).Select
  2. c.Formula = cours


Comme ça, Excel ne te prend pas la main :) 

Bonsoir,

Merci pour ta réponse. :love: 
Arghhhhhhhh ! C'est ce que j'étais entrain de chercher puisque dans l'aide VBA il était noté : "Remarque: Vous ne pouvez travailler avec la cellule active que si la feuille de calcul qui la contient est la feuille active.........."
J'avais trouvé le code ci-dessus après moult recherches et bidouillages. Pffff! Dur dur l'aprentissage !

Le déclenchement se fait sur le changement de valeur de la cellule dans laquelle j'ai placé le lien DDE matriciel qui donne l'heure d'arrivée du dernier cours.
Elle est en format standard : 09:30:00 par exemple.

Quand A1 de la feuil1 change, il ne se passe rien. :heink: 
Par contre avec Worksheet_Calculate() le changement de valeur de La cellule A1 dans feuil2 est reconnu :

feuil1 : A1 ={=INDEX(TDXDDE|FLUX!Info2?FR0003500008025025;2)}
feuil2 : A1=feuil1!A1

M'enfin c'est la conclusion a laquelle je suis arrivé en ce moment vu mes connaissances très limites en VBA. Il y a certainement des choses plus propres.

Le 'Ontime' me paraissait plus difficile a paramétrer qu'observer le changement de valeur des cellules étant donné que je connais par avance les heures/minutes/secondes de changement (09:30:00 à 17:59:30 incrémenté par pas de 00:00:30). Mes explications n'étaient pas très claires.

Merci encore. J'y retourne !
jc

Bonsoir,
J'ai essayé le bout de code proposé hier :

  1. c.Offset(0, 1).Select
  2. c.Formula = cours


mais au lieu de décaler à droite comme dans le code initial, elle écrit dans la même cellule...??? Et je ne peux quand même pas ouvrir une autre feuille excel sans qu'il me fasse un caca nerveux et ne trouve plus la cellule c "horaire" ???

Merci par avance
jc

Expert Programmation

:)  C'est énervant hein !
Tu découvres la programmation : le pire c'est que cette fichue bécane ne fait que ce que tu lui demandes :D 

Réfléchis, teste, vérifie. Utilise les points d'arrêt et la fenêtre de débugage, l'instruction Debug.Print, etc.

La force est en toi.
Lassé par la pub ? Créez un compte