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 :

creation de classe


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut creation de classe
    Bonjour
    J'aimerais creer une nouvelle propriete de la classe "Range" qui permette de renvoyer les cellules contigues a une cellule.
    Appelons Voisinage cette propriete, on aurait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub exemple
     
    Set R=Range("C10")
    Set Region=R.Voisinage
    Region.Select
     
    end sub
    Ce code aurait pour effet de selectionner les cellules contigues a C10.
    Le pb est que je ne sais pas comment on fait ca.
    Alors j'ai cree un nouvel objet dont la classe est "clRegion"

    le code de la classe est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Property Get Region(nsheet As Range)
     Set Region = Range(nsheet.Offset(-1, -1), nsheet.Offset(1, 1))
    End Property
    et la fonction de selection est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub exemple()
    Dim R As New clRegion
    Set Rf = R.Region(Range("C10"))
    Rf.Select
     
    End Sub
    Le pb est que ca doit creer un nouvel objet, ce qui n'est pas necessaire.

    Alors comment puis-je faire ce qu eje voulais faire au debut?
    merci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonsoir,

    De ce que je comprends ta classe comprend deux propriétés:

    - Un objet Range en lecture/ecriture (C10 dans ton exemple)

    - Un objet Range en lecture seule correspondant aux cellules contigues à C10

    Ton module pourrait ressembler à ceci:

    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
    Private clsCellule As Range
     
    Property Get Cellule() As Range
        Set Cellule = clsCellule
    End Property
     
    Property Set Cellule(NewCellule As Range)
        Set clsCellule = NewCellule
    End Property
     
    Property Get Region() As Range
        With clsCellule
            Set Region = Range(.Offset(-1, -1), .Offset(1, 1))
        End With
    End Property
    L'utilisation donnerait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim MyRange As clRegion
     
    Sub Test()
        Set MyRange = New clRegion
        Set MyRange.Cellule = Range("C10")
     
        MyRange.Region.Select
     
        MsgBox MyRange.Region.Address
     
    End Sub
    Reste à prévoir les cas ou la cellule de base est au bord de la feuille, et celui ou la cellule de base est une plage de cellules, voire plusieurs plages de cellules discontinues...

    Cordialement,

    Tirex28/

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Merci
    Pourquoi n'est il pas necessaire de mettre un constructeur et un destructeur?
    De ce style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Class_Initialize()
    ....
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Class_Terminate()
      ....
    End Sub

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    Rien nen t'y oblige mais rien ne t'en empeche, tout dépend de ce que tu veux faire, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Class_Initialize()
        Set Cellule = ActiveCell
    End Sub
    Cordialement,

    Tirex28/

  5. #5
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    merci
    As tu des references sur la composition et l heritage de classes en VBA?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Pour les anglophones:

    http://msdn2.microsoft.com/en-us/lib...ffice.10).aspx

    Cordialement,

    Tirex28/

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

Discussions similaires

  1. [debutant] creation de classe
    Par boboss123 dans le forum Général Java
    Réponses: 5
    Dernier message: 20/11/2009, 14h03
  2. creation de classe et mapping hibernate
    Par cyreel dans le forum Persistance des données
    Réponses: 3
    Dernier message: 25/09/2008, 11h23
  3. pb de creation de classe de connexion
    Par oceane751 dans le forum JDBC
    Réponses: 2
    Dernier message: 30/07/2007, 16h37
  4. creation dune classe et utilisation
    Par le_voisin dans le forum C++
    Réponses: 9
    Dernier message: 30/08/2006, 22h38
  5. Parseur XML to Java pour creation de Class
    Par yannick101 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 18/07/2005, 15h20

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