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 :

Mise à jour des résultats d'une macro [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut Mise à jour des résultats d'une macro
    Bonjour tout le monde,

    J'ai créé des macros qui me font des jolis calculs, légèrement différentes mais ressemblantes dans plusieurs feuilles, et ayant le même nom dans chaque feuille (mais déclarées privées). Le but, c'est que les résultats soient mis à jour en direct quand on change une valeur. Je veux donc exécuter ma macro chaque fois qu'une valeur d'entrée est modifiée.

    Si une valeur est modifiée dans la feuille de la macro (feuilles B, C, D, E), j'ai le code suivant qui marche très bien et qui exécute la macro de la feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False       'Pour ne pas avoir de boucle infinie
        MaProcédure
        Application.EnableEvents = True
    End Sub
    Par contre, j'ai une autre feuille (feuille A) dans laquelle je stocke pas mal de données d'entrée communes à tous les cas, et j'aimerais que quand je modifie cette feuille, les macros des feuilles B, C, D et E soient exécutées. Quelqu'un saurait-il comment faire ça ?

    Une des solutions que j'envisage est de créer dans le module principale une procédure UpdateAll, qui irait exécuter les macros des feuilles B, C, D et E. Cette procédure serait appelée lors de la modification de la feuille A par le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        UpdateAll
        Application.EnableEvents = True
    End Sub
    Je préfère mettre UpdateAll dans le module plutôt que directement dans la feuille A car je vais probablement devoir la réutiliser. Mon problème, c'est que je ne sais pas comment, du module principal, appeler les procédures situées dans les autres onglets... Quelqu'un a une idée de comment faire ça ? Ou comment aboutir au résultat de manière plus simple ?

    Merci !

  2. #2
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Un exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Macro2()
    Dim Classeur As String, Feuille As String, Macro As String, Appel As String
    Classeur = ThisWorkbook.Name
    Feuille = "Feuil1"
    Macro = "macro_f1"
     
    Appel = Classeur & "!" & Feuille & "." & Macro
     
    Application.Run Appel
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Ca marche, merci ! Pour ceux que ça intéresse, voilà mon code final :

    Dans l'onglet Données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As range)
        Application.EnableEvents = False
        UpdateAll
        Application.EnableEvents = True
    End Sub
    Dans le module 1 :

    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
    Public Sub UpdateAll()
     
        Application.EnableEvents = False
        Dim Appel As String
        Appel = "Feuil5.CalculMasse"
        Application.Run Appel
        Appel = "Feuil6.CalculMasse"
        Application.Run Appel
        Appel = "Feuil7.CalculMasse"
        Application.Run Appel
        Appel = "Feuil8.CalculMasse"
        Application.Run Appel
        Application.EnableEvents = True
     
    End Sub

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut martinmacfly et le forum
    Difficile d'aider efficacement, mais une piste :
    utiliser la macro à lancement automatique Workbook_SheetChange du module ThisWorkBook, pour lancer les macros quand nécessaire.
    A+

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

Discussions similaires

  1. Mise à jour des champs d'une table
    Par soso78 dans le forum Access
    Réponses: 2
    Dernier message: 14/12/2006, 15h57
  2. Réponses: 2
    Dernier message: 07/06/2006, 14h13
  3. Module de mise à jour des champs d'une table
    Par kikaillo dans le forum Access
    Réponses: 14
    Dernier message: 18/04/2006, 09h42
  4. Réponses: 6
    Dernier message: 07/02/2006, 14h44
  5. Réponses: 3
    Dernier message: 15/11/2005, 18h50

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