Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/10/2007, 00h36   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2004
Messages : 68
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 68
Points : 14
Points : 14
Par défaut property let pour tableau de double

je veux créer un module de classe qui a comme attributs entrez autres des tableaux de double ( à 2 entrées, de dimension quelconque?)
voulant les droits en lecure-écriture, ai-je bien le droit -je débute- de définir:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private CC() As Double
Public Property Let C(Cb() As Double)
    ReDim CC(1 To n, 1 To p) As Double
    For j = 1 To p
        For i = 1 To n
            CC(i, j) = Cb(i, j)
        For j = 1 To p
    For i = 1 To n
End Property
Public Property Get C() As Double()
    For j = 1 To p
        For i = 1 To n
            C(i, j) = CC(i, j)
        Next i
    Next j
End Property
j'ai un doute... car vbe crashe à ce niveau...
Merci

déjà il faudrait sans doute passer n et p en arguments, non?
hector2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 07h23   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 597
Points : 1 597
bonjour,

a priori la méthode suivante fonctionne pour les tableaux dynamiques...

l'objet nommé <POO2> :
Code :
1
2
3
4
5
6
7
8
 
Private CC() As Double
Public Property Let c(ByRef cb() As Double)
   CC = cb
End Property
Public Property Get c() As Double()
   c = CC
End Property
Une fonction de test :
Code :
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
 
Private Sub MonTest()
   Dim cb() As Double, ce() As Double
   Dim i As Integer, j As Integer, Minij As Integer
   Dim oo As POO2
   Randomize
   Minij = 1
   ReDim cb(Minij To 5, Minij To 2)
   Set oo = New POO2
Debug.Print vbCrLf & "1) initialise cb()"
Debug.Print "'i'", "'j'", "'cb(i,j)'"
   For j = Minij To UBound(cb, 2)
      For i = Minij To UBound(cb)
         cb(i, j) = Int(Rnd * 50)
Debug.Print i, j, cb(i, j)
      Next i
   Next j
   oo.c = cb
Debug.Print vbCrLf & "2) Affectation de cb() à l'objet"
Debug.Print vbCrLf & "3) Efface cb()"
Debug.Print "'i'", "'j'", "'cb(i,j)'"
   For j = Minij To UBound(cb, 2)
      For i = Minij To UBound(cb)
         cb(i, j) = 0
Debug.Print i, j, cb(i, j)
      Next i
   Next j
Debug.Print vbCrLf & "4) Réaffectation de cb() via l'objet"
   cb = oo.c
Debug.Print vbCrLf & "5) Affectation directe ce() via l'objet"
   ce = oo.c
Debug.Print "'i'", "'j'", "'cb(i,j)'", "'ce(i,j)'"
   For j = Minij To UBound(cb, 2)
      For i = Minij To UBound(cb)
Debug.Print i, j, cb(i, j), ce(i, j)
      Next i
   Next j
Debug.Print vbCrLf & "6) Détruit l'objet"
   Set oo = Nothing
Debug.Print vbCrLf & "7) Vérification des tableaux cd() et ce()"
Debug.Print "'i'", "'j'", "'cb(i,j)'", "'ce(i,j)'"
   For j = Minij To UBound(cb, 2)
      For i = Minij To UBound(cb)
Debug.Print i, j, cb(i, j), ce(i, j)
      Next i
   Next j
End Sub
A vérifier selon votre utilisation...

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 09h27   #3
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private CC() As Double
Public Property Let C(Cb() As Double)
    ReDim CC(1 To n, 1 To p) As Double
    For j = 1 To p
        For i = 1 To n
            CC(i, j) = Cb(i, j)
        For j = 1 To p        |
    For i = 1 To n            |<== Petit problème !!!!
End Property
Public Property Get C() As Double()
    For j = 1 To p
        For i = 1 To n
            C(i, j) = CC(i, j)
        Next i
    Next j
End Property
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 11h57   #4
Candidat au titre de Membre du Club
 
Inscription : mai 2004
Messages : 68
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 68
Points : 14
Points : 14
effectivement, merci garuda, j'avais mal copié-collé mais ça n'était pas à l'origine du problème ...
Sinon, merci philben pour ta réponse détaillée:
ton test marche, je comprends mieux mais j'ai toujours un truc (théorique) qui me bloque :
pourquoi par exemple un me retourne une erreur (oo.C est bien signalé comme un tableau de double ...) ?

Merci!
hector2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2007, 18h50   #5
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 597
Points : 1 597
bonjour,

Citation:
debug.print oo.C(1,1)me retourne une erreur (oo.C est bien signalé comme un tableau de double ...) ?
c'est normal puisque la propriété Get C() n'attend pas de paramètre.

Deux possibilités :

* soit écrire
Code :
1
2
 
Debug.Print oo.c()(1, 1)
ce qui en clair, on demande le contenu de la cellule 1,1 du tableau retourné par la propriété get C().

* soit ajouter une propriété qui retourne un élément particulier du tableau (j'ai pas mis les vérifs d'usage des paramètres) :
Code :
1
2
3
4
 
Public Property Get GetElement(ByVal i As Integer, ByVal j As Integer) As Double
   GetElement = CC(i, j)
End Property
Appel par :
Code :
1
2
 
Debug.Print oo.GetElement(1, 1)
Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 10h13   #6
Candidat au titre de Membre du Club
 
Inscription : mai 2004
Messages : 68
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 68
Points : 14
Points : 14
Merci beaucoup!
hector2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h10.


 
 
 
 
Partenaires

Hébergement Web