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 :

Ajouter dynamiquement des Events à une Feuille via un module de classe. [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut Ajouter dynamiquement des Events à une Feuille via un module de classe.
    Je viens de m'apercevoir que j'avais d'abord mis cette discussion sur le forum excel et non pas sur le forum Macro, désolé.
    Bonjour,

    Je crée des nouvelle feuilles dans un Classeur Excel et je souhaite qu'elles fassent appel à une procédure sur Double Clique.
    J'ai crée un module de classe avec un WithEvents dans lequel j'ai spécifié ma procédure, mais ensuite je n'arrive pas à instancier cette nouvelle feuille créee.

    Voilà le code du module de Classe GpeFeuilles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public WithEvents mesFeuilles As Worksheet
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Action_DE.Action
    End Sub
    Ensuite je veux créer ma feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim mesFeuilles() As New GpeFeuilles
     ...
     Nbfeuille = Worksheets.Count
     ReDim Preserve mesFeuilles(Nbfeuille + 1)
     Set ActiveSheet = MyWorkbook.mesFeuilles(Nbfeuille + 1)
    mais ca plante en ligne 5 avec ce message.

    Propriété ou méthode non géré par cet objet
    Est ce que vous sauriez comment faire ?
    D'avance merci.

  2. #2
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut
    Je viens d'essayer comme cela,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim TabFeuille() As New GpeFeuilles
     
    MyWorkbook.Activate
        Worksheets.Add
        Nbfeuille = Worksheets.Count
        ReDim Preserve TabFeuille(Nbfeuille + 1)
        Set TabFeuille(Nbfeuille + 1).mesFeuilles = ActiveSheet
        TabFeuille(Nbfeuille + 1).mesFeuilles.Name = "Exploitation ETF"
     
        TabFeuille(Nbfeuille + 1).mesFeuilles.Visible = True
    je ne plante plus, mais je ne recupère pas le comportement WithEvent que j'ai associé dans mon module de classe.
    Des idées ?

  3. #3
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Voici comment je ferais :

    Dans un module "Module1", je déclare une collection publique de feuilles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public listFeuilles As Collection
    On instancie cette collection dans le Workbook_Open
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
        Set listFeuilles = New Collection
    End Sub
    On crée un module de classe "clsFeuille" avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Public WithEvents maFeuille As Worksheet
     
    Private Sub maFeuille_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        MsgBox "toto"
    End Sub
    Et on met dans "Module1" une petite procédure de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub test()
        Dim sh As Worksheet
        Dim clsSh As clsFeuille
     
        Set sh = Worksheets.Add
        Set clsSh = New clsFeuille
        Set clsSh.maFeuille = sh
     
        listFeuilles.Add clsSh
    End Sub
    Et voilà, on peut voir que dans la nouvelle feuille créée, un double-click affiche le message toto !

  4. #4
    Membre actif
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Points : 247
    Points
    247
    Par défaut
    Super, ca me semble effectivement plus simple en utilisant une Collection interne à Excel.
    Merci bien.

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

Discussions similaires

  1. [XL-2003] Ajouter dynamiquement des Events à une Feuille via un module de classe.
    Par comme de bien entendu dans le forum Excel
    Réponses: 4
    Dernier message: 10/06/2012, 07h11
  2. [débutant] ajouter des contrôles à une feuille par code
    Par Claude_Azoulai dans le forum VB.NET
    Réponses: 3
    Dernier message: 03/04/2010, 18h51
  3. Réponses: 3
    Dernier message: 27/03/2008, 14h41
  4. ajouter dynamiquement des items dans un popup menu
    Par Malone dans le forum Composants VCL
    Réponses: 7
    Dernier message: 23/08/2005, 16h08
  5. [VB.NET] Manipuler une feuille via un module
    Par dinbougre dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/01/2005, 17h15

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