Voila mon problème, j'utilise une classe nommée FacturesVentes ou je dois
déterminer les propriétés de ma facture (par exemple la date, le no du
client, etc.). Jusqu'ici tout va bien, j'utilise la syntaxe du genre:
Private m_sNom As String
Public Property Get Nom() As String
Nom = m_sNom
End Property
Public Property Let Nom(ByVal sNom As String)
m_sNom = sNom
End Property
Donc, je crée ma facture en faisant
dim x as new Facture
x.Nom = "Petit Client"
Et tout va bien. Maintenant j'aimerais avoir une propriété de type
utilisateur que je définis dans un module afin de définir chaque ligne de ma
facture, afin de programmer ainsi:
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Sebho
Je pense qu'il faut que tu attaques ton problème avec une collection utilises l'assistant création de classes pour créer
Classe Facture (Nouvelle classe) Classe Lignes (Nouvelle collection basée sur nouvelle classe) Classe Ligne (Nouvelle Classe pour la collection) Propriété NoProduit as string (Nouvelle Propriete Get/Let/Set) Propriété Quantite as long (Nouvelle Propriete Get/Let/Set)
Puis dans ta form
Dim o As New Facture o.Lignes.Add "F1", "00001", 1 o.Lignes.Add "F2", "00002", 1
F1 et F2 sont une clé qui doit etre unique dans la collection (la référence de la facture), mais rien ne t'empèche d'enlever la cle
Sebho
PS si tu n'arrive pas voici le code que j'ai essayé, tu peux le copier/coller dans trois classes, bon courage
'variable locale pour la collection Private mCol As Collection
Public Function Add(Key As String, NoProduit As String, Quantite As Long, Optional sKey As String) As Ligne 'créer un nouvel objet Dim objNewMember As Ligne Set objNewMember = New Ligne
'définir les propriétés passées à la méthode objNewMember.Key = Key objNewMember.NoProduit = NoProduit objNewMember.Quantite = Quantite If Len(sKey) = 0 Then mCol.Add objNewMember Else mCol.Add objNewMember, sKey End If
'renvoyer l'objet créé Set Add = objNewMember Set objNewMember = Nothing
End Function
Public Property Get Item(vntIndexKey As Variant) As Ligne 'Utilisé pour référencer un élément dans la collection 'vntIndexKey contient l'index ou la clé dans la collection 'Il est donc déclaré en tant que Variant 'Syntaxe: Set toto = x.Item(xyz) ou Set toto = x.Item(5) Set Item = mCol(vntIndexKey) End Property
Public Property Get Count() As Long 'utilisée pour lire le nombre d'éléments dans la 'collection. Syntaxe: Debug.Print x.Count Count = mCol.Count End Property
Public Sub Remove(vntIndexKey As Variant) 'utilisée lors de la suppression d'un élément de la collection 'vntIndexKey contient l'index ou la clé, il est donc 'déclaré en tant que Variant 'Syntaxe: x.Remove(xyz)
mCol.Remove vntIndexKey End Sub
Public Property Get NewEnum() As IUnknown 'Cette propriété vous permet d'énumérer 'cette collection avec la syntaxe For...Each Set NewEnum = mCol.[_NewEnum] End Property
Private Sub Class_Initialize() 'Crée la collection lorsque cette classe est créée Set mCol = New Collection End Sub
Private Sub Class_Terminate() 'Détruit la collection lorsque cette classe est détruite Set mCol = Nothing End Sub
'*************************************** 'Classe Ligne '*************************************** Option Explicit
Public Key As String
'variables locales de stockage des valeurs de propriétés Private mvarNoProduit As String 'copie locale Private mvarQuantite As Long 'copie locale Public Property Let Quantite(ByVal vData As Long) 'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation. 'Syntax: X.Quantite = 5 mvarQuantite = vData End Property
Public Property Get Quantite() As Long 'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction. 'Syntax: Debug.Print X.Quantite Quantite = mvarQuantite End Property
Public Property Let NoProduit(ByVal vData As String) 'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation. 'Syntax: X.NoProduit = 5 mvarNoProduit = vData End Property
Public Property Get NoProduit() As String 'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction. 'Syntax: Debug.Print X.NoProduit NoProduit = mvarNoProduit End Property
Je pense qu'il faut que tu attaques ton problème avec une collection
utilises l'assistant création de classes pour créer
Classe Facture (Nouvelle classe)
Classe Lignes (Nouvelle collection basée sur nouvelle classe)
Classe Ligne (Nouvelle Classe pour la collection)
Propriété NoProduit as string (Nouvelle Propriete Get/Let/Set)
Propriété Quantite as long (Nouvelle Propriete Get/Let/Set)
Puis dans ta form
Dim o As New Facture
o.Lignes.Add "F1", "00001", 1
o.Lignes.Add "F2", "00002", 1
F1 et F2 sont une clé qui doit etre unique dans la collection (la référence
de la facture), mais rien ne t'empèche d'enlever la cle
Sebho
PS si tu n'arrive pas voici le code que j'ai essayé, tu peux le
copier/coller dans trois classes, bon courage
'variable locale pour la collection
Private mCol As Collection
Public Function Add(Key As String, NoProduit As String, Quantite As Long,
Optional sKey As String) As Ligne
'créer un nouvel objet
Dim objNewMember As Ligne
Set objNewMember = New Ligne
'définir les propriétés passées à la méthode
objNewMember.Key = Key
objNewMember.NoProduit = NoProduit
objNewMember.Quantite = Quantite
If Len(sKey) = 0 Then
mCol.Add objNewMember
Else
mCol.Add objNewMember, sKey
End If
'renvoyer l'objet créé
Set Add = objNewMember
Set objNewMember = Nothing
End Function
Public Property Get Item(vntIndexKey As Variant) As Ligne
'Utilisé pour référencer un élément dans la collection
'vntIndexKey contient l'index ou la clé dans la collection
'Il est donc déclaré en tant que Variant
'Syntaxe: Set toto = x.Item(xyz) ou Set toto = x.Item(5)
Set Item = mCol(vntIndexKey)
End Property
Public Property Get Count() As Long
'utilisée pour lire le nombre d'éléments dans la
'collection. Syntaxe: Debug.Print x.Count
Count = mCol.Count
End Property
Public Sub Remove(vntIndexKey As Variant)
'utilisée lors de la suppression d'un élément de la collection
'vntIndexKey contient l'index ou la clé, il est donc
'déclaré en tant que Variant
'Syntaxe: x.Remove(xyz)
mCol.Remove vntIndexKey
End Sub
Public Property Get NewEnum() As IUnknown
'Cette propriété vous permet d'énumérer
'cette collection avec la syntaxe For...Each
Set NewEnum = mCol.[_NewEnum]
End Property
Private Sub Class_Initialize()
'Crée la collection lorsque cette classe est créée
Set mCol = New Collection
End Sub
Private Sub Class_Terminate()
'Détruit la collection lorsque cette classe est détruite
Set mCol = Nothing
End Sub
'***************************************
'Classe Ligne
'***************************************
Option Explicit
Public Key As String
'variables locales de stockage des valeurs de propriétés
Private mvarNoProduit As String 'copie locale
Private mvarQuantite As Long 'copie locale
Public Property Let Quantite(ByVal vData As Long)
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche
de l'affectation.
'Syntax: X.Quantite = 5
mvarQuantite = vData
End Property
Public Property Get Quantite() As Long
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de
l'instruction.
'Syntax: Debug.Print X.Quantite
Quantite = mvarQuantite
End Property
Public Property Let NoProduit(ByVal vData As String)
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche
de l'affectation.
'Syntax: X.NoProduit = 5
mvarNoProduit = vData
End Property
Public Property Get NoProduit() As String
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de
l'instruction.
'Syntax: Debug.Print X.NoProduit
NoProduit = mvarNoProduit
End Property
Je pense qu'il faut que tu attaques ton problème avec une collection utilises l'assistant création de classes pour créer
Classe Facture (Nouvelle classe) Classe Lignes (Nouvelle collection basée sur nouvelle classe) Classe Ligne (Nouvelle Classe pour la collection) Propriété NoProduit as string (Nouvelle Propriete Get/Let/Set) Propriété Quantite as long (Nouvelle Propriete Get/Let/Set)
Puis dans ta form
Dim o As New Facture o.Lignes.Add "F1", "00001", 1 o.Lignes.Add "F2", "00002", 1
F1 et F2 sont une clé qui doit etre unique dans la collection (la référence de la facture), mais rien ne t'empèche d'enlever la cle
Sebho
PS si tu n'arrive pas voici le code que j'ai essayé, tu peux le copier/coller dans trois classes, bon courage
'variable locale pour la collection Private mCol As Collection
Public Function Add(Key As String, NoProduit As String, Quantite As Long, Optional sKey As String) As Ligne 'créer un nouvel objet Dim objNewMember As Ligne Set objNewMember = New Ligne
'définir les propriétés passées à la méthode objNewMember.Key = Key objNewMember.NoProduit = NoProduit objNewMember.Quantite = Quantite If Len(sKey) = 0 Then mCol.Add objNewMember Else mCol.Add objNewMember, sKey End If
'renvoyer l'objet créé Set Add = objNewMember Set objNewMember = Nothing
End Function
Public Property Get Item(vntIndexKey As Variant) As Ligne 'Utilisé pour référencer un élément dans la collection 'vntIndexKey contient l'index ou la clé dans la collection 'Il est donc déclaré en tant que Variant 'Syntaxe: Set toto = x.Item(xyz) ou Set toto = x.Item(5) Set Item = mCol(vntIndexKey) End Property
Public Property Get Count() As Long 'utilisée pour lire le nombre d'éléments dans la 'collection. Syntaxe: Debug.Print x.Count Count = mCol.Count End Property
Public Sub Remove(vntIndexKey As Variant) 'utilisée lors de la suppression d'un élément de la collection 'vntIndexKey contient l'index ou la clé, il est donc 'déclaré en tant que Variant 'Syntaxe: x.Remove(xyz)
mCol.Remove vntIndexKey End Sub
Public Property Get NewEnum() As IUnknown 'Cette propriété vous permet d'énumérer 'cette collection avec la syntaxe For...Each Set NewEnum = mCol.[_NewEnum] End Property
Private Sub Class_Initialize() 'Crée la collection lorsque cette classe est créée Set mCol = New Collection End Sub
Private Sub Class_Terminate() 'Détruit la collection lorsque cette classe est détruite Set mCol = Nothing End Sub
'*************************************** 'Classe Ligne '*************************************** Option Explicit
Public Key As String
'variables locales de stockage des valeurs de propriétés Private mvarNoProduit As String 'copie locale Private mvarQuantite As Long 'copie locale Public Property Let Quantite(ByVal vData As Long) 'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation. 'Syntax: X.Quantite = 5 mvarQuantite = vData End Property
Public Property Get Quantite() As Long 'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction. 'Syntax: Debug.Print X.Quantite Quantite = mvarQuantite End Property
Public Property Let NoProduit(ByVal vData As String) 'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation. 'Syntax: X.NoProduit = 5 mvarNoProduit = vData End Property
Public Property Get NoProduit() As String 'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction. 'Syntax: Debug.Print X.NoProduit NoProduit = mvarNoProduit End Property
Sébastien Côté
Un grand merci, ca devrait faire l'affaire!
Seb
"Sebho" a écrit dans le message de news:%
Je pense qu'il faut que tu attaques ton problème avec une collection utilises l'assistant création de classes pour créer
Classe Facture (Nouvelle classe) Classe Lignes (Nouvelle collection basée sur nouvelle classe) Classe Ligne (Nouvelle Classe pour la collection) Propriété NoProduit as string (Nouvelle Propriete Get/Let/Set) Propriété Quantite as long (Nouvelle Propriete Get/Let/Set)
Puis dans ta form
Dim o As New Facture o.Lignes.Add "F1", "00001", 1 o.Lignes.Add "F2", "00002", 1
F1 et F2 sont une clé qui doit etre unique dans la collection (la
référence
de la facture), mais rien ne t'empèche d'enlever la cle
Sebho
PS si tu n'arrive pas voici le code que j'ai essayé, tu peux le copier/coller dans trois classes, bon courage
'variable locale pour la collection Private mCol As Collection
Public Function Add(Key As String, NoProduit As String, Quantite As Long, Optional sKey As String) As Ligne 'créer un nouvel objet Dim objNewMember As Ligne Set objNewMember = New Ligne
'définir les propriétés passées à la méthode objNewMember.Key = Key objNewMember.NoProduit = NoProduit objNewMember.Quantite = Quantite If Len(sKey) = 0 Then mCol.Add objNewMember Else mCol.Add objNewMember, sKey End If
'renvoyer l'objet créé Set Add = objNewMember Set objNewMember = Nothing
End Function
Public Property Get Item(vntIndexKey As Variant) As Ligne 'Utilisé pour référencer un élément dans la collection 'vntIndexKey contient l'index ou la clé dans la collection 'Il est donc déclaré en tant que Variant 'Syntaxe: Set toto = x.Item(xyz) ou Set toto = x.Item(5) Set Item = mCol(vntIndexKey) End Property
Public Property Get Count() As Long 'utilisée pour lire le nombre d'éléments dans la 'collection. Syntaxe: Debug.Print x.Count Count = mCol.Count End Property
Public Sub Remove(vntIndexKey As Variant) 'utilisée lors de la suppression d'un élément de la collection 'vntIndexKey contient l'index ou la clé, il est donc 'déclaré en tant que Variant 'Syntaxe: x.Remove(xyz)
mCol.Remove vntIndexKey End Sub
Public Property Get NewEnum() As IUnknown 'Cette propriété vous permet d'énumérer 'cette collection avec la syntaxe For...Each Set NewEnum = mCol.[_NewEnum] End Property
Private Sub Class_Initialize() 'Crée la collection lorsque cette classe est créée Set mCol = New Collection End Sub
Private Sub Class_Terminate() 'Détruit la collection lorsque cette classe est détruite Set mCol = Nothing End Sub
'*************************************** 'Classe Ligne '*************************************** Option Explicit
Public Key As String
'variables locales de stockage des valeurs de propriétés Private mvarNoProduit As String 'copie locale Private mvarQuantite As Long 'copie locale Public Property Let Quantite(ByVal vData As Long) 'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation. 'Syntax: X.Quantite = 5 mvarQuantite = vData End Property
Public Property Get Quantite() As Long 'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction. 'Syntax: Debug.Print X.Quantite Quantite = mvarQuantite End Property
Public Property Let NoProduit(ByVal vData As String) 'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation. 'Syntax: X.NoProduit = 5 mvarNoProduit = vData End Property
Public Property Get NoProduit() As String 'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction. 'Syntax: Debug.Print X.NoProduit NoProduit = mvarNoProduit End Property
Un grand merci, ca devrait faire l'affaire!
Seb
"Sebho" <nospam_sebho@ifrance.com> a écrit dans le message de
news:%23eCYFPuhDHA.3764@tk2msftngp13.phx.gbl...
Je pense qu'il faut que tu attaques ton problème avec une collection
utilises l'assistant création de classes pour créer
Classe Facture (Nouvelle classe)
Classe Lignes (Nouvelle collection basée sur nouvelle classe)
Classe Ligne (Nouvelle Classe pour la collection)
Propriété NoProduit as string (Nouvelle Propriete Get/Let/Set)
Propriété Quantite as long (Nouvelle Propriete Get/Let/Set)
Puis dans ta form
Dim o As New Facture
o.Lignes.Add "F1", "00001", 1
o.Lignes.Add "F2", "00002", 1
F1 et F2 sont une clé qui doit etre unique dans la collection (la
référence
de la facture), mais rien ne t'empèche d'enlever la cle
Sebho
PS si tu n'arrive pas voici le code que j'ai essayé, tu peux le
copier/coller dans trois classes, bon courage
'variable locale pour la collection
Private mCol As Collection
Public Function Add(Key As String, NoProduit As String, Quantite As Long,
Optional sKey As String) As Ligne
'créer un nouvel objet
Dim objNewMember As Ligne
Set objNewMember = New Ligne
'définir les propriétés passées à la méthode
objNewMember.Key = Key
objNewMember.NoProduit = NoProduit
objNewMember.Quantite = Quantite
If Len(sKey) = 0 Then
mCol.Add objNewMember
Else
mCol.Add objNewMember, sKey
End If
'renvoyer l'objet créé
Set Add = objNewMember
Set objNewMember = Nothing
End Function
Public Property Get Item(vntIndexKey As Variant) As Ligne
'Utilisé pour référencer un élément dans la collection
'vntIndexKey contient l'index ou la clé dans la collection
'Il est donc déclaré en tant que Variant
'Syntaxe: Set toto = x.Item(xyz) ou Set toto = x.Item(5)
Set Item = mCol(vntIndexKey)
End Property
Public Property Get Count() As Long
'utilisée pour lire le nombre d'éléments dans la
'collection. Syntaxe: Debug.Print x.Count
Count = mCol.Count
End Property
Public Sub Remove(vntIndexKey As Variant)
'utilisée lors de la suppression d'un élément de la collection
'vntIndexKey contient l'index ou la clé, il est donc
'déclaré en tant que Variant
'Syntaxe: x.Remove(xyz)
mCol.Remove vntIndexKey
End Sub
Public Property Get NewEnum() As IUnknown
'Cette propriété vous permet d'énumérer
'cette collection avec la syntaxe For...Each
Set NewEnum = mCol.[_NewEnum]
End Property
Private Sub Class_Initialize()
'Crée la collection lorsque cette classe est créée
Set mCol = New Collection
End Sub
Private Sub Class_Terminate()
'Détruit la collection lorsque cette classe est détruite
Set mCol = Nothing
End Sub
'***************************************
'Classe Ligne
'***************************************
Option Explicit
Public Key As String
'variables locales de stockage des valeurs de propriétés
Private mvarNoProduit As String 'copie locale
Private mvarQuantite As Long 'copie locale
Public Property Let Quantite(ByVal vData As Long)
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche
de l'affectation.
'Syntax: X.Quantite = 5
mvarQuantite = vData
End Property
Public Property Get Quantite() As Long
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de
l'instruction.
'Syntax: Debug.Print X.Quantite
Quantite = mvarQuantite
End Property
Public Property Let NoProduit(ByVal vData As String)
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche
de l'affectation.
'Syntax: X.NoProduit = 5
mvarNoProduit = vData
End Property
Public Property Get NoProduit() As String
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de
l'instruction.
'Syntax: Debug.Print X.NoProduit
NoProduit = mvarNoProduit
End Property
Je pense qu'il faut que tu attaques ton problème avec une collection utilises l'assistant création de classes pour créer
Classe Facture (Nouvelle classe) Classe Lignes (Nouvelle collection basée sur nouvelle classe) Classe Ligne (Nouvelle Classe pour la collection) Propriété NoProduit as string (Nouvelle Propriete Get/Let/Set) Propriété Quantite as long (Nouvelle Propriete Get/Let/Set)
Puis dans ta form
Dim o As New Facture o.Lignes.Add "F1", "00001", 1 o.Lignes.Add "F2", "00002", 1
F1 et F2 sont une clé qui doit etre unique dans la collection (la
référence
de la facture), mais rien ne t'empèche d'enlever la cle
Sebho
PS si tu n'arrive pas voici le code que j'ai essayé, tu peux le copier/coller dans trois classes, bon courage
'variable locale pour la collection Private mCol As Collection
Public Function Add(Key As String, NoProduit As String, Quantite As Long, Optional sKey As String) As Ligne 'créer un nouvel objet Dim objNewMember As Ligne Set objNewMember = New Ligne
'définir les propriétés passées à la méthode objNewMember.Key = Key objNewMember.NoProduit = NoProduit objNewMember.Quantite = Quantite If Len(sKey) = 0 Then mCol.Add objNewMember Else mCol.Add objNewMember, sKey End If
'renvoyer l'objet créé Set Add = objNewMember Set objNewMember = Nothing
End Function
Public Property Get Item(vntIndexKey As Variant) As Ligne 'Utilisé pour référencer un élément dans la collection 'vntIndexKey contient l'index ou la clé dans la collection 'Il est donc déclaré en tant que Variant 'Syntaxe: Set toto = x.Item(xyz) ou Set toto = x.Item(5) Set Item = mCol(vntIndexKey) End Property
Public Property Get Count() As Long 'utilisée pour lire le nombre d'éléments dans la 'collection. Syntaxe: Debug.Print x.Count Count = mCol.Count End Property
Public Sub Remove(vntIndexKey As Variant) 'utilisée lors de la suppression d'un élément de la collection 'vntIndexKey contient l'index ou la clé, il est donc 'déclaré en tant que Variant 'Syntaxe: x.Remove(xyz)
mCol.Remove vntIndexKey End Sub
Public Property Get NewEnum() As IUnknown 'Cette propriété vous permet d'énumérer 'cette collection avec la syntaxe For...Each Set NewEnum = mCol.[_NewEnum] End Property
Private Sub Class_Initialize() 'Crée la collection lorsque cette classe est créée Set mCol = New Collection End Sub
Private Sub Class_Terminate() 'Détruit la collection lorsque cette classe est détruite Set mCol = Nothing End Sub
'*************************************** 'Classe Ligne '*************************************** Option Explicit
Public Key As String
'variables locales de stockage des valeurs de propriétés Private mvarNoProduit As String 'copie locale Private mvarQuantite As Long 'copie locale Public Property Let Quantite(ByVal vData As Long) 'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation. 'Syntax: X.Quantite = 5 mvarQuantite = vData End Property
Public Property Get Quantite() As Long 'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction. 'Syntax: Debug.Print X.Quantite Quantite = mvarQuantite End Property
Public Property Let NoProduit(ByVal vData As String) 'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation. 'Syntax: X.NoProduit = 5 mvarNoProduit = vData End Property
Public Property Get NoProduit() As String 'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction. 'Syntax: Debug.Print X.NoProduit NoProduit = mvarNoProduit End Property