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

VB 6 et antérieur Discussion :

Comment lancer une procedure lors d'une modification de valeur d'une variable ?


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Par défaut Comment lancer une procedure lors d'une modification de valeur d'une variable ?
    Bonjour,
    J'ai une question a poser à propos d'un programme en VBA.
    J'ai deja posé la question dans le forum VBA, et on m'a conseillé d'aller voir un forum vb. Mais je crois que ce problème peut tout aussi bien s'appliquer au VB.

    Voici don ma question reformulée (ou copiée-collée).

    Je cherche un moyen de lancer une procedure qui se trouve dans un module annexe, lorsqu'une variable voit sa valeur modifiée dans le programme principal.

    Plus en détails :

    Dans mon module annexe, j'y ai défini un type de varible personalisé, et des procedures particulières que j'aimerai voir executées lorsque dans le programme principal, un élement de ma variable "maison" , est modifié.

    Je m'explique, mon module annexe (qui pourrait aussi bien etre une macro competmentaire) est un module de calculs de nombres complexes. (oui je sais excel integre une macro complementaire, mais j'avais un peu de mal a l'utiliser, alors j'ai voulu le réecrire, et puis c'est plus marrant comme ca). Jusque là, il y avait tout ce qui falait pour manipuler les nombres complexes, lorsqu'ils étaient définis en réel/imaginaire. Mais pas en module phase.
    Alors dans ma variable "complex" (voir ci-dessous), j'ai voulu ajouter les elements .m (module) et .p (phase).
    Et ce que je voulais, c'etait que les elements .m et .p soient automatiquement calculés dès que .R et .i se voyaient affecté dans mon programme principal.
    Et vice-versa, que .R et .i soient calculés lorsque .m et .p sont modifiés.
    Tout cela de manière totalement transparente pour le programme principal.

    D'ou l'idée du lancement d'un procedure lorsqu'une variable est modifiée.

    Je suis débutant et je ne sais pas comment gerer les evenements.
    C'est pour cela que je voulais savoir à quoi pouvait ressembler le code qui permet de lancer une procedure, lorsqu'une variable est modifiée.

    J'ai trouvé ce post, mais je ne sais pas comment utiliser les "set et les "get" pour arriver à mes fins.
    Est-ce que je devrai necessairement avoir recours à la création d'une classe ?

    D'avance, Merci.



    Pour info, ci-dessous, le tout debut de ma macro complémentaire avec la variable type complexe, et les deux procedures qui doivent se lancer sur modification des élements de la variable.

    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
    Type Complex
    R as double        'Partie Réele
    i as double        'Partie Imaginaire
    m as double        'Module
    p as double        'Phase
    end type
     
    Sub Qd_r_ou_i_est_modifié()
    With complex
    .m = Sqr(r^2+i^2)[
    .p = atn(i/r)
    End With
    End sub
     
    Sub Qd_m_ou_p_est_modifié()
    With complex
    .r = m * cos(p)
    .i = m * sin(p)
    End With
    End sub

  2. #2
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Ben tu mémorises m et p par exemple dans 2 variables appelées Memom et Memop avant de leur afecter une nouvelle valeur.
    Après ton affectation, tu compares Memom avec m et Memop avec p si ce n'est plus la meme chose tu lances ta procédure pour calculer R et i.

    Pareil dans l'autre sens pour R et i

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Par défaut
    Bonjour OhMonBato, et merci pour ta réponse.

    C'est effectivement l'idée, mais j'aimerais que le test de nouvelle afectation se fasse integralement dans un autre module.

    Mon projet est clairement separé en 2 parties :
    - le module de calculs simples en entre complexes cad, declaration de la variable type, fontion et procedures pour faire tous les calculs (+,-,/, exp, log, etc... et la conversion automatique réel-imaginaire/module-phase)
    - le programme principal qui necessite l'utilisation de variables complexes mais de maniere transparente. C'est à dire, que dans le programme principal, on puisse modifier des variables complexes, et que cela provoque immediatement le calcul de conversion dans l'autre module.
    Par exemple, la seule ligne (avec X qui a été declaré comme "complex" auparavant) :
    ecrite dans le programme principal, provoque immediatement l'execution d'une procedure de conversion dans le module annexe.

    Voila, j'espere m'exprimer suffisament clairement.
    Encore merci d'avance.

  4. #4
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Ben tu appelles la procédure de ton module annexe après avoir écrit X.r = 99

    J'avoue que je vois pas trop bien où est le pb.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Par défaut
    Justement, c'est cela que je voudrait eviter,
    je voudrais que la procedure soit automatiquement lancée après une affectation, sans ajouter d'appel de procedure ou quoi que ce soit (cela alourdirai considerablement le programme principal qui a très largement recours à des calculs entre nombres complexes, et affecterai grandement sa lisibilité).
    Je pense que c'est possible avec la gestion de l'evenement : modification de la valeur d'une variable.
    Et je suis en train de chercher comment mettre cela en oeuvre.
    Merci pour l'interet que tu portes a ma question.

  6. #6
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Tu me tiendras au courant dès que tu pourras lancer une procédure sans l'appeler par un moyen quelconque, je suis vivement intéressé
    Puisque de toute façon tu DOIS faire ce calcul, il va bien falloir l'appeler d'une manière ou d'une autre, en quoi est ce que ça alourdit le programme ou nuit à sa lisibilité ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Par défaut
    eh bien le programme comporte de nombreuses lignes de calculs sur complexes (en fait en dehors des declarations de variables et de procedures, tout le programme n'est que calculs de complexes alors, je voulais eviter de rajouter une ligne(si petite soit-elle) après chaque calcul).
    Et j'avoue, il y a un peu de coqueterie la dedans, le programme aura un aspet plus propre de cet maniere.
    Enfin dans une optique d'apprentissage, je pense que cette recherche m'aura permis d'en connaitre un peu plus sur la programation, d'autant que je m'y suis mis depuis peu, et que ca m'interesse grandement.

    Penses-tu que c'est tout de meme possible ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/03/2010, 11h44
  2. Comment choisir le seuil lors de la recherche d'images dans une base
    Par mobi_bil dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 13/02/2009, 02h35
  3. Réponses: 19
    Dernier message: 05/05/2008, 16h45
  4. [VBA-E]Comment lancer une procedure lors d'un changement de variable ?
    Par RogerLapin dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/03/2007, 09h56
  5. Lancer une macro lors de la modif d'une case excel
    Par frevale dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/08/2006, 12h19

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