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 :

déclencher évenements de feuille


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 10
    Par défaut déclencher évenements de feuille
    Bonjour,
    Comment peut-on envoyer un message (evenement) "Worksheet_Initialize" à chacune des feuilles du classeur.
    1- L'evenement "Worksheet_Initialize" ne peut pas etre déclarer puisqu'il existe déjà au niveau des feuilles.
    2-Est ce qu'il existe une fonction pour envoyer un message à tous les objets enfants (feuilles dans ce cas) d'un objet parent (classeur dans ce cas)
    merci

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Worksheet_Initialize

    Par contre, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    se déclenche à l'activation de la feuille Sh (entrée en paramètre)

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonsoir,

    Perso, je n'ai pas compris grand chose...

    Déjà, il n'existe pas d'événement Worksheet_Initialize.

    Tu peux gérer un événement de feuille pour n'importe quelle feuille du classeur via les événements de classeur, où les événements de feuille sont tous repris et donc gérables.


    Pourrais-tu préciser tes objectifs?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 10
    Par défaut
    Oui en effet, Worksheet_Initialize est un mauvais exemple car il n'existe que pour les UserForm, pas pour les feuilles, à mon grand regret d'ailleurs. Mais prennons par exemple Worksheet_SelectionChange. Comment envoyer ce message, à partir d'une procedure d'un module ou d'un userform, à toutes les feuilles du classeur ?

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Address = "$A$1" Then MsgBox "kuku"
    End Sub
    à la sélection de la cellule A1 de n'importe quelle feuille du classeur, kuku apparaitra

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 10
    Par défaut
    Merci, mais ce n'est pas ça que je demande.
    En fait, je veux déclencher l'évement Workbook_SheetSelectionChange (peut etre avec un raiseEvent comme si la selection changeait! Le but but etant bien sur d'executer le code que j'ai mis pour ce message dans chaque feuille.
    C'est une question purement technique de déclenchement 'artificiel' d'un evenement intégré à un objet. Ou dit autrement, c'est la simulation d'un evenement. C'est d'ailleur pour cela que je préfere parler 'd'envoyer un message', c'est plus clair.

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    C'est d'ailleur pour cela que je préfere parler 'd'envoyer un message', c'est plus clair.
    Non non, pour moi ce n'est pas clair
    je propose au lieu de deviner, si tu explicite au mieux le problème.
    ou si quelqu'un d'autre a compris, pourra intervenir

  8. #8
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    dans module...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub jesuisselectmaisbof()
    Dim strWsh As Worksheet
     
    For Each strWsh In ThisWorkbook.Worksheets
      strWsh.Select
      ActiveCell.Offset(0, 1).Select
    Next strWsh
    End Sub
    sinon, dans chaque module de feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim strWsh As String
     
    strWsh = Me.Name
    Call Jefaiscequonmedit(strWsh)
    End Sub
    dans un module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Jefaiscequonmedit(strWsh)
     
    MsgBox "je suis la feuille :  " & strWsh
    End Sub
    et l'appel pour la simulation (qui n'en n'est pas)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub jesuisselectgood()
    Dim objWsh As Worksheet
    Dim strWsh As String
     
    For Each objWsh In ThisWorkbook.Worksheets
       strWsh = objWsh.Name
      Call Jefaiscequonmedit(strWsh)
    Next objWsh
    End Sub

    PS : "Worksheet_Initialize" n'existe pas pour les USF

    cordialement,

    Didier

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 10
    Par défaut
    Bon, je vous remercie d'avoir essayé de m'aider, mais les réponse que vous me faites me rappel une blague de colluche à propos d'un patron qui parle à ses employes, enfin je crois: "Dites moi ce dont vous avez besoin, je vous dirai comment vous en passer !!!"

    Je me rend compte que je n'ai pas été clair. Je vais donc prendre un exemple :

    Soit un classeur comprennant 5 feuilles Feuil1, Feuil2, Feuil3. Feuil4, Feuil5 Dans plusieurs de ces feuilles sont déclarée des variables de meme nom propre à la feuille:

    Feuil2
    ------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Var1 as long, var2 as string
    Private Sub Worksheet_Activate()
        Me.Var1 = 2
        Me.Var2 = "blabla"
    End Sub
    Feuil3
    ------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Var1 as long, var2 as string
    Private Sub Worksheet_Activate()
        Me.Var1 = 50
        Me.Var2 = "klkqlsklqkslkslqkslk"
    End Sub
    Feuil5
    ------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Var1 as long, var2 as string
    Private Sub Worksheet_Activate()
        Me.Var1 = 987
        Me.Var2 = "xxxxxxx"
    End Sub
    Maintenant, je voudrais réintialiser ces variables dans certain cas
    Soit la procedure Proc1 dans le module Module1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public sub Proc1
        if condition then
            '**** déclenche (ou simule) l'évenement Worksheet_Activate() pour 
            toutes les feuilles. Les feuille Feuil1 et Feuil4 recoivent aussi le 
            message mais n'en font rien car aucun traitement n'a été mis.
     
            ????? code à rajouter ???????
     
        end if
    end sub
    ---------------------------------

    Bien sur, je pourrais comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sub initialise
        sheets("Feuil2").Var1 = 2
        sheets("Feuil2").Var2 = "blabla"
        sheets("Feuil3").Var1 = 50
        sheets("Feuil3").Var2 = "klkqlsklqkslkslqkslk"
        sheets("Feuil5").Var1 = 987
        sheets("Feuil5").Var2 = "xxxxxxx"
    end sub
    Public sub Proc1
        if condition then
            Call initialise
        end if
    end sub
    ------------------------------------

    Pourquoi des variables déclarée dans la feuille ? parce que elles n'ont rien à faire ailleurs. Ce sont des parametres utilisation propres à chaque feuille.
    Pourquoi des evenements ? Conceptuellement, cette methode est la plus appropriée me semble -t-il. Le fait d'envoyer un message à tous le monde mais seuls les objets concernés l'interceptent.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonsoir

    Remercie mes camarades d'avoir été patients, car il était plus que malaisé de comprendre ce que tu voulais, lorsque je lis ton dernier message et ton premier... Soit!

    Il te suffit de créer une procédure Initialiser sur chacune des feuilles, puis de l'appeler dans une boucle.

    Dans chaque feuille qui doit effectivement initialiser des variables, tu auras le code suivant, en adaptant les variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Initialiser()
      var1 = 2
      var2 = "Blabla"
    End Sub
    Dans celles pour lesquelles il n'y a pas de variables à initialiser, tu laisses la procédure vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sub Initialiser
    End Sub
    A l'activation des feuilles qui doivent initialiser des variables, tu auras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
      Initialiser
    End Sub
    Grâce à cela, tu boucles lorsque tu veux réinitialiser tes variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim Feuille as worksheet
     
    for each feuille in worksheets
        feuille.initialiser
    next feuille
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Déclencher évenements sur listes
    Par Stéphane Olivier BERNARD dans le forum IHM
    Réponses: 3
    Dernier message: 05/08/2008, 09h25
  2. évenement dans une feuille
    Par casavba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/05/2008, 20h09
  3. [C#] Déclencher un évenement à la fin d'une animation flash
    Par padodanle51 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/06/2006, 15h26
  4. déclencher un évenement
    Par guigui5931 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/06/2006, 11h52
  5. Réponses: 4
    Dernier message: 21/05/2004, 12h24

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