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 :

Variable tableau dans module de classe


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 5
    Par défaut Variable tableau dans module de classe
    Bonjour,

    Je débute en vba et j'aurais bien besoin d'aide s'il vous plaît. Dans une classe Stock que j'ai créée je souhaiterais avoir un tableau contenant les valeurs du cours de ce stock. Du coup j'ai créé un bouton qui permet d'enregistrer son cours, mais rien ne marche et je ne trouve pas l'aide sur les forums.

    Pour la classe Stock j'ai écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private mCours() As Double
     
    Property Get mCours() As Double
        Cours() = mCours()
    End Property
     
    Property Let mCours(Cours() As Double)
        mCours() = Cours()
    End Property
    Et dans le module :

    Option Explicit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Ajout_MAJ()
     
    Dim StockA As New Stock
    Dim LastRow As Integer           
        LastRow = Range("B" & Rows.Count).End(xlUp).Row
    'LastRow me donne le rang de la dernière case de la colonne de valeurs, que je rentre moi-même dans excel.
     
    StockA.Cours() = Range(Cells(5, 3), Cells(LastRow, 3))
     
    End Sub

    Pour ce qui est de la variable nom par exemple ça fonctionne, je la récupère de la feuille excel et la mets en variable dans StockA.Nom, mais impossible pour le Cours().

    Merci d'avance pour votre aide !

    Bonne journée.

    Alex

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Si tu essayais en déclarant mCours en Variant?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 5
    Par défaut
    Citation Envoyé par parmi Voir le message
    Bonjour,

    Si tu essayais en déclarant mCours en Variant?
    Bonjour et merci pour votre réponse. En mettant en Variant j'ai ça du coup (avec probablement une erreur de ma part) :

    Classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private mCours() As Variant
     
     
    ' COURS
    Property Set Cours(MyArray As Variant)
        mCours = MyArray
    End Property
     
     
    Public Property Get Cours() As Variant()
        Cours() = mCours()
    End Property
    Et module la même chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Sub Ajout_MAJ()
     
    Dim StockA As New Stock
    Dim LastRow As Integer 
    LastRow = Range("B" & Rows.Count).End(xlUp).Row
    'LastRow me donne le rang de la dernière case de la colonne de valeurs, que je rentre moi-même dans excel.
     
    StockA.Cours() = Range(Cells(5, 3), Cells(LastRow, 3))
     
    End Sub
    J'ai alors ".Cours =" qui est surligné dans le module principal, avec le message d'erreur :
    "Erreur de compilation:
    Impossible d'affecter à une propriété en lecture seule"

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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
    Private mCours() As Double
     
    Property Get Cours() As Double()
        Cours() = mCours()
    End Property
     
    Property Let Cours(ByRef value() As Double)
        mCours() = value()
    End Property
    Sub Ajout_MAJ()
    astRow = Range("B" & Rows.Count).End(xlUp).Row
    'LastRow me donne le rang de la dernière case de la colonne de valeurs, que je rentre moi-même dans excel.
    Range(Cells(5, 3), Cells(12, 3)) = 5
    Cours() = AsDouble(Range(Cells(5, 3), Cells(12, 3)).value)
    End Sub
    Public Function AsDouble(V) As Double()
    Dim t() As Double
    For i = 0 To UBound(V, 1) - 1
        ReDim Preserve t(i)
        t(i) = V(i + 1, 1)
    Next
    AsDouble = t
    End Function

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 5
    Par défaut
    Merci pour votre aide, ça semble marcher, d'ailleurs comment voir si les valeurs de mon cours sont bien enregistrés dans mon instance ?

    Et j'ai fait quelque chose de similaire avec les dates, que je voudrais aussi avoir dans un tableau pour pouvoir les mettre en rapport avec la valeur du cours correspondant. J'ai essayé de reprendre ce que vous avez fait :

    Classe Stock :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private mDates As Date
    ' DATES
    Property Get Dates() As Date()
        Dates() = mDates()
    End Property
     
    Property Let Dates(Dates() As Date)
    Dim L As Interger
    L = Worksheet("Gestion Stocks").Range("B" & Rows.Count).End(xlUp).Row - 4
    If L = 0 Then
        MsgBox "Veuillez renseigner les dates en colonne B."
    Else:
        mDates() = Dates()
    End Property
    Et dans le module :

    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
     
    Option Explicit
     
    Sub Ajout_MAJ()
     
    Dim LastRow As Integer
        LastRow = Range("C" & Rows.Count).End(xlUp).Row
    Dim StockA As New Stock
    StockA.Dates() = AsDate(Range(Cells(5, 2), Cells(LastRow, 2)).Value)
    End Sub
     
     
    Public Function AsDate(ByRef V) As Date()
    Dim u() As Date
    Dim i As Integer
    Dim LastRow As Integer
        LastRow = Range("B" & Rows.Count).End(xlUp).Row
    For i = 5 To LastRow
        ReDim Preserve u(i)
    MsgBox V(i - 4, 1)
        u(i - 5) = V(i - 4, 1)
    Next
    Est-il possible de visualiser les classes ? Et y-a-t-il un moyen plus pratique de mettre en regard les valeurs du cours et les dates correspondantes que d'enregistrer deux tableaux ?

    Merci encore !

    Alex

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 5
    Par défaut
    En fait j'ai un problème avec les dates qui vient d’apparaître dans mon Property Let Dates, je ne sais pas pourquoi : "mDates () =" est surligné et j'ai le message d'erreur :

    "Erreur de compilation:
    Tableau attendu"

    Classe :

    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
     
    ' DATES
    Property Get Dates() As Date()
        Dates() = mDates()
    End Property
     
    Property Let Dates(Dates() As Date)
    Dim L As Integer
    L = Worksheets("Gestion Stocks").Range("B" & Rows.Count).End(xlUp).Row - 4
    If L = 0 Then
        MsgBox "Veuillez renseigner les dates en colonne B."
    Else:
        mDates() = Dates()
    End If
    End Property
    Merci encore.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Le même cause produisent le même effets ByRef ou ByVal??

    évites d'utiliser des objets dépendant d'Excel dans ton module de classe.
    on évite d’afficher des message.

    il faut voir ton application en 3 tiers.
    le client qui est l'interfaces utilisateur (affiche entre autre les MsgBox)
    le métier ton module de classe en occurence
    la base de données Excel pour ce qui nous concerne.

    ainsi ton application devient exploitable presque en l'état si tu change le client web par exemple
    ou la base de données SQL serveur par exemle.

    en mélangent les genre tu est quittes pour réécrire tout ton code si d'aventure ton client te demande de migrer sur ACCESS.

    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 mDates As Date' DATES
    Property Get Dates() As Date()
        Dates() = mDates()
    End Property
     
    Property Let Dates(ByRef Dates() As Date)
    Dim L As Interger:L=-1
    On error resume next
    L=ubound(Dates)
    on error goto 0
    If L = -1 Then
        MsgBox "Veuillez renseigner les dates en colonne B."
    Else:
        mDates() = Dates() 
    End Property
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StockA.Dates() = AsDate(Range(Cells(5, 2), Cells(LastRow-4, 2)).Value)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function AsDate(ByRef V)As Date()
    
    Dim u() As Date
    Dim i As Integer
    
    For i = 0 To uboud(V)-1 
        ReDim Preserve u(i)
    MsgBox V(i +1, 1)
        u(i ) = V(i +1, 1) Next
    AsDate=U
    end sub
    pour le coup j'ai rien testé.
    Dernière modification par Invité ; 22/03/2018 à 14h59.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 5
    Par défaut
    Merci, tout semble marcher, en tous cas ça compile.

    Et comment puis-je faire pour visualiser ou réutiliser ce que contiennent maintenant mes variables ?

Discussions similaires

  1. Est il possible d'appeler une variable tableau dans un autre module
    Par nouveauvba dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/04/2017, 16h57
  2. Utilisation composant timer dans module de classe
    Par MaximeM dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/06/2007, 13h35
  3. afficher une variable tableau dans une JSP
    Par johnnywalker dans le forum Struts 1
    Réponses: 11
    Dernier message: 04/03/2007, 22h02
  4. variables tableau dans requettes mysql ... et affichage
    Par mulbek dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/10/2005, 16h29
  5. variables publiques ou module de classe ?
    Par niclalex dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 18h49

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