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 :

Question module de classe


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut Question module de classe
    Bonjour,

    Je suis actuellement en train de coder un module de classe d'opérations de matrice, et j'ai plusieurs questions
    :
    - Je souhaiterais savoir si il est possible de proposer une liste de choix, vous savez quand j'utilise par exemple une fonction sort, qui propose le choix xldescendant, ou xlascendant, peut on proposer une liste de choix nous aussi ?

    - je cherche la confirmation que l'on ne peux pas saisir de parametre dans la sub d'initialisation , qui nous sert un peut de constructeur "Sub Class_Initialize()" on peut biensure initialiser des parametres mais la sub ne peux pas prendre de parametre ?

    - Nous ne pouvons pas mettre une propriete get en private et la propriete en ecriture (let) en public ?

    - en terme de performance, si je fais des fonctions optimisées en terme de complexite .. , est-ce performant de gerer plutot ma classe plutot que des tableaux dans vba, car la gestion des tableau dans vba est un peu incomplete, ma classe permet de gerer l'extraction de colonnes, somer les lignes , les colonnes etc, tout ce qui pourrait etre necessaire a du calcul numerique .

    Merci d'avance, toute aide, conseils sont les bienvenus, car voudrais mieux comprendre le fonctionnement des objets dans vba ( un language facile mais qui pour le coup ne donne pas forcement la main sur les choses et on en sait pas toujurs ce que l'on manipule )

    voici une toute petite partie de mon code :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Option Explicit
    Option Base 1
     
    Private P_MatDim As Variant
    Private P_Matrix As Variant: Private P_Det As Double, P_Init As Variant
     
    Private Sub Class_Initialize()
    End Sub
     
    Property Get MatDim() As Variant
        MatDim = P_MatDim
    End Property
     
    Public Property Get Matrix() As Variant
        Matrix = P_Matrix
    End Property
     
    Public Property Let Matrix(ByVal MyVector As Variant)
        P_Matrix = MyVector
        P_MatDim = Array(UBound(MyVector), UBound(MyVector, 2))
     
    End Property
     
    Public Property Get Det()
        Det = P_Det
    End Property
     
        'Initialisation de la matrice
    Public Property Let Init(ByVal MyVal As Variant)
        Dim i As Long, MyColVector, j As Long
        Dim MyMatrixT(), MyMatrix, MyValueVector
        Dim MyVect
     
        MyVect = Split(MyVal, ";")
     
            'Nombre de lignes/ colonnes
        P_MatDim = Array(UBound(MyVect) + 1, UBound(Split(MyVect(0), ",")) + 1)
     
            'On redimensionne
        ReDim MyMatrixT(P_MatDim(1), P_MatDim(2))
     
        For i = 0 To UBound(MyVect) 'ligne
            MyValueVector = Split(MyVect(i), ",")
            For j = 0 To UBound(MyValueVector) ' colonne
                MyMatrixT(i + 1, j + 1) = CDbl(MyValueVector(j))
            Next j
        Next i
     
            'Mise à jour
        P_Matrix = MyMatrixT
    End Property

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    La propriété let permet de renseigner une variable privée du module de classe.

    Ce n'est pas pour le folklore c'est pour permettre la qualification des données.

    Get privée rime à rien puisque les méthodes en interne du module de classe ont accès au variables privée autant de passé du get!

    Il est possible de créer ses propres types de variables mais il également position de créer un enumérateur?

    Ce sont des constantes groupées dans un type que tu peux affecter a une variable et Excel te proposera la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public enum myenum
    Rd1=1
    Rd2=2
    End enum
    Public property let myporperty(value as myenum)
    et là tu auras la saisie instinctive!

  3. #3
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut merci
    Merci bcp tu es une vrai machine , je connaissais pas , et oui pour le get , j'ai dis des betises , je me suis embrouillé , et pour le initialise, on ne peut pas rentrer de parametres , comme ds un constructeur normal en python par exemple?
    Car qaund je veux construire ma classe comme je le ferais dans un autre language , je voudrais lui attribuer des valeur pour ces proprietes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim MyMatrix as new matrix
    Lors dela création de mon objet pas possible ( je sais que ca ne marche pas non plus pour un objet feuille ou workbook) d'ecrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim MyMatrix(1,2) as new matrix
    Ainsi ma matrice aurais par exemple 1 ligne et 2 colonnes (chose que j'aurais biensur programé dans mes proprietes let )

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu fais une confusion entre ce que tu connais des autres langues et vba.

    Un module de classe en vba dispose d'un constructeur par défaut comme dans tous les langages!

    Mais il n'est pas possible de le surcharger!Class_Initialize() n'a rien à voir avec le constructeur c'est un événement que vb, les remords sens doute, met à disposition pour initialisé de paramètres du module de classe!

    Il faut faire avec et trouve le comportement le plus judicieux!

    Maintenant l'intérêt d'un module de classe ou un tableau, tout dépend du traitement!
    Si tu veux compter les horaires mensuel des salariés de ton entreprise une collection de module de classe te permettent d'effectué ce travail sens te compliqué la vie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if dico.exist(cell(i,"a")) then
    Set cls=new classe
    Sico.add cells(i,"a"),cls
    Set cls=nothing
    Ed if
    Dico.(cells(i,"a")).count =Dico.(cells(i,"a")).count+1
    Dernière modification par Invité ; 12/09/2015 à 23h50.

  5. #5
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut
    erci pur tes conseils , je suis aussi partit voir les tutos sur les modules de classes en Access, je comprend un peu mieux , en réalité ce n'est pas le constructeur , et si j'avais usé du pas à pas je l'aurais bien vu .., on peut toujours creer une sub d'initialisation , mais que l'on devras utiliser apres la declaration du pointeur

    Je clos le sujet, je vais continuer à lire et à me documenter sur le sujet pour le maitiser un peu plus cette semaine .

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je métrise bien le sujet, je serai ravi de te mettre des baffes derrière la tête le cas échéant, n'hésitez pas à me demander de l'aide!

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

Discussions similaires

  1. P'tite question concernant les Class ou Module
    Par arnofly dans le forum VB.NET
    Réponses: 15
    Dernier message: 18/04/2009, 17h01
  2. Réponses: 8
    Dernier message: 22/02/2006, 15h09
  3. Question sur la classe InputStream
    Par Zec Merquise dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 26/10/2005, 02h36
  4. variables publiques ou module de classe ?
    Par niclalex dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 18h49
  5. Réponses: 7
    Dernier message: 10/09/2004, 14h28

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