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 :

Inconvénient avec Worksheet_calculate


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut Inconvénient avec Worksheet_calculate
    Bonjour,

    Je cherche à lancer une macro si une case est modifier.

    Donc il faut utiliser Worksheet Change... mais le problème est que la case est modifier par un calcul automatique de deux cellule. Donc celà ne marche pas.

    Donc j'utilise Worksheet Calculate. Mais le probleme c'est que j'ai deux cellules qui bougent toutes les secondes automatiquement ("""lié à Reuters""") donc, donc la macro est lancé des que un des trois (les deux cellules) plus la cellule qui m'interesse.

    En gros, je cherche une fonction Worksheet Calculate mais qui ne concernerait qu'une cellule ou plage de données et non pas toute la feuille.

    Merci beaucoup.

    Badouba

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Pourquoi tu n'utiliserais pas WorkSheet_Change sur l'une des deux cellules à l'origine du calcul?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut
    A + B = C

    A, B, changent automatiquement, donc C aussi.


    Je veux quema macro se lance juste quand C bouge. pas A ou B.

    Merci d'avance

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Justement: en détectant un changement de A ou de B, tu détecte un changement de C.

    N'est-ce pas ce que tu voulais?

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Salut,
    Il est possible que worksheet_change ne détecte pas non plus le changement de A ou B vu que ce n'est pas "manuel", du moins c'est ce que j'ai compris.

    Pour les cas simples j'utilise pour ma part une petite astuce :
    Imaginons que C soit la somme de A + B, au lieu de mettre "= A1 + B1" comme formule dans C1, je crée une fonction personnalisée dans un module (ici nommée sommeF) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Function sommeF(a As Integer, b As Integer) 'modifier les types selon le besoin
    sommeF = a + b
    MsgBox "calcul" 'remplacer "MsgBox "calcul"" par le traitement souhaité
    End Function
    Alors C1 doit avoir comme formule "=sommeF(A1;B1)"

    Ceci permet de faire à la fois la somme et le traitement supplémentaire que tu aurais voulu faire sur l'événement on_change de C1.

    Par contre c'est moins souple qu'une formule classique dans la mesure où, par exemple, tu dois avoir un nombre de paramètres bien déterminé.

    Ceci dit il existe peut-être d'autres méthodes plus élégantes.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut
    Exactement
    il y a A et B, qui changent de valeur continuellement.

    C change de valeur lorsque A ou B sont inférieurs à une valeur fixe.

    et donc je veux etre averti lorsque C change de valeur.


    Worksheet Calculate peut il etre valable que sur une Feuil ?

    donc en fait ces solutions ne s'appliquent pas.
    Au secours !!! loool

    Merci

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Citation Envoyé par neupont Voir le message
    Par contre c'est moins souple qu'une formule classique dans la mesure où, par exemple, tu dois avoir un nombre de paramètres bien déterminé.
    Que tu crois.
    La même chose peut se faire avec un paramArray:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function sommeF(ParamArray listevaleurs() As Variant) As Double 'modifier les types selon le besoin
        On Error GoTo vide
        Dim argument As Variant
        sommeF = 0
        For Each argument In listevaleurs
            sommeF = sommeF + argument
        Next
        Exit Function
    vide:
    End Function
    Là tu peux mettre 0,1,2,3... une infinité d'arguments.

    Dis-moi... ça marche pas aussi bien que la formule classique ça desfois?

    EDIT:
    @badouba

    Ahh... mais aussi si tu ne dis pas tout, on peut pas deviner.

    Dans ce cas, je te propose d'utiliser une variable statique dans ton WorkSheet_Calculate qui mémorise la valeur de ta cellule C. Si par rapport au dernier calcul la valeur de cette variable est différente de celle de ta cellule C, c'est que son contenu a changé, et tu dis "ça a changé de valeur" et tu mémorise la nouvelle valeur dans la variable statique.

    J'espère que c'est assez clair...

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Citation Envoyé par decondelite Voir le message
    La même chose peut se faire avec un paramArray
    Là tu peux mettre 0,1,2,3... une infinité d'arguments.

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Citation Envoyé par Badouba75 Voir le message
    donc en fait ces solutions ne s'appliquent pas.
    Si en fait je pense que ce que je t'ai proposé marcherait justement
    Il y a certainement d'autres possibilités aussi, mais j'en connais point

    Edit : la manière de Decondelite a l'air plus simple à mettre en oeuvre, en particulier si c'est toujours la même cellule que tu vérifies.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut
    Comment tu fais pour enregistrer la précédente valeur, car dans mon W_Calculate la valeur est déjà changé.

    Ou sinon une autre solution car c'est pas super efficace dans mon cas.

    En gros un Worksheet Calculate qui ignore la variation de deux cellules, ou qui est valable que pour une feuille de calcul.

    Un worksheet Change qui fonctionne pour les cellules qui change automatiquement et non pas manuellement.

    Voila, en espérant que vous pourrez m'aider.

    Merci

  11. #11
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour tlm,

    Si j'ai bien compris, ci-dessous une possibilité

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    C'est à peu près ce que je proposais, si ce n'est que je proposais d'utiliser une variable statique, comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_Calculate()
        Static Cel As String
        ' Le reste ne change pas
    End Sub
    Bannir les variables publiques autant que possible.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut
    un grand merci...!!!

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut
    quelle différence entre public et l'autre possibilité ?

  15. #15
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par decondelite Voir le message
    Bannir les variables publiques autant que possible.
    Pour quelle raison ?

    Avec ta déclaration, le premier changement de la cellule suite à un calcul ne sera pas détecté

  16. #16
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    La différence, c'est que Static sera propre à la procédure dans laquelle la variable est déclarée.
    Si tu veux avoir accès à cette valeur en dehors de cette procédure (et à mon avis c'est inutile il suffit de lire la valeur de la cellule), alors à ce moment Public redevient préférable.

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

Discussions similaires

  1. inconvénient de compiler avec tex puis DVItoPDF
    Par melreg dans le forum Débuter
    Réponses: 1
    Dernier message: 03/04/2009, 16h53
  2. Data warehousing avec les solutions Oracle ,avantages/inconvénients?
    Par footmaster dans le forum Approche théorique du décisionnel
    Réponses: 3
    Dernier message: 25/02/2008, 15h27
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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