Variable tableau dans module de classe

Variable tableau dans module de classe - VB/VBA/VBS - Programmation

Marsh Posté le 21-03-2018 à 17:02:01    

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 :
  1. Private mCours() As Double
  2. Property Get mCours() As Double
  3.     Cours() = mCours()
  4. End Property
  5. Property Let mCours(Cours() As Double)
  6.     mCours() = Cours()
  7. End Property


 
Et dans le module :
 

Code :
  1. Sub Ajout_MAJ()
  2. Dim StockA As New Stock
  3. Dim LastRow As Integer         
  4.     LastRow = Range("B" & Rows.Count).End(xlUp).Row
  5. 'LastRow me donne le rang de la dernière case de la colonne de valeurs, que je rentre moi-même dans excel.
  6. StockA.Cours() = Range(Cells(5, 3), Cells(LastRow, 3))
  7. 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 ! Si vous pensez que l'architecture ou le choix d'un tableau est peu judicieux dans mon cas n'hésitez pas.
 
Bonne journée.
 
Alex

Reply

Marsh Posté le 21-03-2018 à 17:02:01   

Reply

Marsh Posté le 23-03-2018 à 13:27:40    

Les tableaux dans les modules de classe, c'est la galère.
Si ça peut t'aider, ce qui suit fonctionne  :
Dans la feuille Excel, je mets une valeur quelconque en B7, et dans la plage C5 à C7 les valeurs 1,2,3.
On récupère cette plage dans le tableau mcours, comme le montre le debug.print final dans la fenêtre Exécution.

 

Module de classe Stock :

 
Code :
  1. Option Explicit
  2. Private mCours As Variant
  3. Property Get Cours() As Variant
  4.     Cours = mCours
  5. End Property
  6. Property Let Cours(ByVal Cours As Variant)
  7.     mCours = Cours
  8. End Property
 

Module normal :

 
Code :
  1. Option Explicit
  2. Sub Ajout_MAJ()
  3.   Dim StockA As New Stock
  4.   Dim TabTemp1 As Variant, TabTemp2() As Variant, i As Long, j As Long, k As Long
  5.   Dim LastRow As Integer
  6.   LastRow = Range("B" & Rows.Count).End(xlUp).Row
  7.   'On suppose LastRow plus grand que 5
  8.   'On récupère la plage dans un tableau bidimensionnel, que l'on ramène à une seule dimension
  9.   TabTemp2 = Range(Cells(5, 3), Cells(LastRow, 3)).Value
  10.   i = LBound(TabTemp2, 1): j = UBound(TabTemp2, 1)
  11.   ReDim TabTemp1(i To j)
  12.   For k = i To j
  13.     TabTemp1(k) = TabTemp2(k, 1)
  14.   Next k
  15. 'on affecte ce tableau à la variable mcours, avec un property Let
  16.   StockA.Cours = TabTemp1
  17. 'Vérification (utilise le property Get)
  18.   For k = i To j
  19.     Debug.Print StockA.Cours(k)
  20.   Next k
  21. End Sub
 


Je me suis inspiré de :
https://support.microsoft.com/en-us [...] d-property
et pour tansformer le tableau en deux dimensions en un tableau unidimensionnel de :
http://www.commentcamarche.net/for [...] ableau-vba


Message édité par jpl38 le 23-03-2018 à 13:28:26
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed