IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

RTD Server


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut RTD Server
    Je recois dans ma feuille Excel des données venant d'un serveur RTD.

    J'ai donc des cellules avec des formules du style =RTD(ProgId,,Topic1,Topic2,...)
    Ces cellules sont mises a jour en temps reel par Excel via le serveur RTD.
    Un exemple d'utilisation est de suivre le cours d'une action en bourse.

    Problèmes :
    - J'aimerais etre notifié dans Excel quand il y a des updates. Tout ce que j'ai trouvé c'est via Worksheet_Change mais c'est lourd et surtout Excel 'oublie' des évènements donc je ne suis pas notifié tout le temps.
    - Au lieu d'afficher le resultat dans une cellule, j'aimerais l'afficher dans une listbox (ou un autre control). Je peux lier ma listbox a la cellule de resultat via la propriete 'ListFillRange' mais ca m'affiche les données brutes (alors que j'aimerais les retraiter avant affichage). Comment lier une listbox a une cellule dynamique en ayant la main pour retraiter les données ?
    - Autre souci: si je souhaite garder tous les updates sur une cellule dans ma listbox et non remplacer la valeur d'avant. Impossible d'utiliser ListFillRange qui ecrase le contenu precedent.
    Exemple : mon serveur RTD retourne successivement comme valeur pour une cellule : 100 puis 102 puis 104 (espacés dans le temps). J'aimerais une listbox avec 3 lignes : 100, 102 et 104. (et ainsi de suite pour les updates suivants: une sorte d'historique).

    Dois-je ecrire mon propre control hérité de listbox, pour améliorer la propriété ListFillRange et aussi pour pouvoir m'intercaler entre les données de la cellule et ma listbox ? (ListFillRange copie betement la plage de cellule dans la listbox, sans qu'on puisse faire un quelconque traitement dessus).

    Toute aide serait la bienvenue !

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut
    Alors je n'ai jamais utilisé les mise a jour via server, mais j'emmer qd meme une hypothese, celle ci par contre utilise le OnChange de l'objet WorkSheet, c'est un code que je viens de "pondre" pour un autre topic.
    Si ta valeur change tu renseignes (peut etre sur une autre page pour que se soit plus propre) la 1ere cellule vide d'une colonne, ainsi tu gardes l'historique de ta valeur,
    Disons par exemple que ton info est en F8 sur la feuille Bourse
    A chaque changement de valeur, tu va renseigné l'historique de cette cellule dans la colonne F (par exemple) de la feuil Histo.
    Au préalable tu aura créé une étiquette dynamique (nommée Histo_F8) sur excel, celle ci pointant de la ère a la dernière cellule non vide de la colonne F feuil Histo.
    Sur ta feuil bourse en F8, tu crées une validation Liste lié a l'étiquette Histo_F8.

    Ainsi a chaque changement la nouvelle valeur sera présente dans la liste.

    Si maintenant tu veux formater les valeurs, rien ne t'empêche de mettre une formule en colonne G qui formate tes valeurs comme tu l'entends. Bien sur ton étiquette dynamique devras pointer sur la colonne G et non plus F.

    Voila un bout de code pour "l'historisation" de tes valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    On Error Resume Next 'pour ne pas risquer de quitter la boucle sans faire App.EnableEvents = True, sinon excel devient mué :D
    'Si cela arriver, il suffit de faire une procedure avec juste la ligne Application.EnableEvents = True et de l'executer pour remettre les chose en ordre.
    'Est on dans la bonne cellule?
    If Not Intersect(Range("F8"), Target) Is Nothing Then 'C'est bien F8 qui provoque le change
            Application.EnableEvents = False 'Permet de ne pas faire une boucle dut au changement de la cellule que l'on renseigne
            sheets("Historique").Cells(Rows.Count, "F").End(xlUp).Offset(1, 0).Value = Range("F8").Value
            Application.EnableEvents = True
    End If
     
    End Sub
    Pour l'etiquette dynamique (Menu Insertion -> Nom)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(Feuil1!$F$1;0;0;NB.SI(Feuil1!$F:$F;"<>");1)
    a++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci. Je vais voir ce que je peux faire avec ca

Discussions similaires

  1. Pb migration Access / SQL server
    Par yoyo dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/04/2005, 10h39
  2. Réponses: 12
    Dernier message: 23/10/2002, 11h56
  3. [Kylix] sql server & kylix
    Par fehmitn dans le forum EDI
    Réponses: 1
    Dernier message: 23/08/2002, 19h44
  4. Backup BD SQL Server
    Par Ethmane dans le forum Administration
    Réponses: 3
    Dernier message: 07/06/2002, 00h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo