Pouvez vous m'indiquer la difference entre : un module de classe et un
module d'objet public ?
Cause et solution de cette erreur :
Vous avez tenté d'utiliser un type public défini par l'utilisateur
comme paramètre ou comme type renvoyé pour une procédure publique
d>un module de classe, ou comme champ d>un type public défini par
l>utilisateur. Seuls les types publics définis par l>utilisateur dans
un module d>objet public peuvent être utilisés de cette façon
Merci
Pouvez vous m'indiquer la difference entre : un module de classe et un
module d'objet public ?
Cause et solution de cette erreur :
Vous avez tenté d'utiliser un type public défini par l'utilisateur
comme paramètre ou comme type renvoyé pour une procédure publique
d>un module de classe, ou comme champ d>un type public défini par
l>utilisateur. Seuls les types publics définis par l>utilisateur dans
un module d>objet public peuvent être utilisés de cette façon
Merci
Pouvez vous m'indiquer la difference entre : un module de classe et un
module d'objet public ?
Cause et solution de cette erreur :
Vous avez tenté d'utiliser un type public défini par l'utilisateur
comme paramètre ou comme type renvoyé pour une procédure publique
d>un module de classe, ou comme champ d>un type public défini par
l>utilisateur. Seuls les types publics définis par l>utilisateur dans
un module d>objet public peuvent être utilisés de cette façon
Merci
> Pouvez vous m'indiquer la difference entre : un module de classe et un
module d'objet public ?
Cause et solution de cette erreur :
Vous avez tenté d'utiliser un type public défini par l'utilisateur comme
paramètre ou comme type renvoyé pour une procédure publique d>un module de
classe, ou comme champ d>un type public défini par l>utilisateur. Seuls
types publics définis par l>utilisateur dans un module d>objet public
peuvent être utilisés de cette façon
> Pouvez vous m'indiquer la difference entre : un module de classe et un
module d'objet public ?
Cause et solution de cette erreur :
Vous avez tenté d'utiliser un type public défini par l'utilisateur comme
paramètre ou comme type renvoyé pour une procédure publique d>un module de
classe, ou comme champ d>un type public défini par l>utilisateur. Seuls
types publics définis par l>utilisateur dans un module d>objet public
peuvent être utilisés de cette façon
> Pouvez vous m'indiquer la difference entre : un module de classe et un
module d'objet public ?
Cause et solution de cette erreur :
Vous avez tenté d'utiliser un type public défini par l'utilisateur comme
paramètre ou comme type renvoyé pour une procédure publique d>un module de
classe, ou comme champ d>un type public défini par l>utilisateur. Seuls
types publics définis par l>utilisateur dans un module d>objet public
peuvent être utilisés de cette façon
> Pouvez vous m'indiquer la difference entre : un module de classe et un
> module d'objet public ?
Module de classe :
Es-tu familier avec la programmation orienté objet? Un module de classe ou
classe est un modèle objet, un type de donnée. La classe ne fournit que le
modèle de l'objet, c'est-à-dire qu'elle définit comment cet objet
fonctionne, quel sont ses propriétés, ses fonctions et ses méthodes. Pour
utilisé une classe tu dois instancié un objet de cette classe. Tu
déjà avec des instances de classes sans t'en rendre compte : Form,
Collection, etc. Le module de classe te permet d'en définir une qui
pas.
Ex de classe (non testé) :
'***
' CPersonne
Option Explicit
Private m_sNom As String
Private m_sPrenom As String
Private m_dtNaissance As Date
Public Property Get Nom() As String
Nom = m_sNom
End Public
Public Property Let Nom(Byref sNom As String) As String
m_sNom = sNom
End Public
Public Property Get Prenom() As String
Prenom = m_sPrenom
End Public
Public Property Let Prenom(Byref sPrenom As String) As String
m_sPrenom = sPrenom
End Public
Public Property Get DateNaissance() As Date
DateNaissance = m_dtNaissance
End Public
Public Property Let DateNaissance(Byref dtNaissance As Date) As Date
m_dtNaissance = dtNaissance
End Public
Public Function Clone() As CPersonne
Dim p As CPersonne
Set p = New CPersonne
p.Nom = m_sNom
p.Prenom = m_sPrenom
p.DateNaissance = m_dtNaissance
Set Clone = p
End Function
'***
Ex d'utilisation (pas plus testé):
'***
' Module1
Option Explicit
Private Sub Main()
Dim p As CPersonne
Dim p2 As CPersonne
Set p = New CPersonne
p.Nom = "Lefebvre"
p.Prenom = "Yanick"
p.DateNaissance = DateSerial(1980, 9, 6)
Set p2 = p.Clone
Debug.Print p2.Nom
Debug.Print p2.Prenom
Debug.Print p2.DateNaissance
End Sub
'***
Module d'objet public :
Les modules (tout cours) permette de regrouper des méthodes, fonctions ou
variables ensemble quelles soient publiques ou privées.
> Cause et solution de cette erreur :
>
> Vous avez tenté d'utiliser un type public défini par l'utilisateur comme
> paramètre ou comme type renvoyé pour une procédure publique d>un module
> classe, ou comme champ d>un type public défini par l>utilisateur. Seuls
les
> types publics définis par l>utilisateur dans un module d>objet public
> peuvent être utilisés de cette façon
J'imagine que tu as tenté quelque chose de la sorte :
' dans un projet de type ActiveX Exe
'***
' Class1
Option Explicit
Public Type Point
x As Long
y As Long
End Type
Private m_ptLocation As Point
Public Property Get Location() As Point
Location = m_ptLocation
End Property
'***
où Point est un UDT (User Define Type) déclaré publiquement dans ta
Le problème ici c'est que la classe Class1 est une classe privée au
Or tu ne peux pas renvoyé de UDT à partir d'une classe privée car ces
ne sont pas surportés par automation (en gros les autres programmes ne
comprenne pas de quoi tu leur parles lorsque tu utilises ces types)... Si
avais la même classe (elle doit être publique) dans un projet ActiveX Dll,
cela compilerait.
Alors voici quelques solutions à ton problème :
1. À moins que ton UDT soit utilisé par des APIs ou pour écrire dans des
fichiers, tu peux facilement le remplacer par une classe.
2. Tu peux te faire une librairie d'objet dans un Dll à part (projet
DLL), cela nécessite toutefois la distribution de la Dll en question avec
projet.
3. Tu peux renvoyé un pointeur vers ton UDT et utiliser CopyMemory pour
aller chercher l'information à partir de ce pointeur.. (API mode) ;O)
j'opterais pour la première solution, si c'est possible dans ton cas.
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
> Pouvez vous m'indiquer la difference entre : un module de classe et un
> module d'objet public ?
Module de classe :
Es-tu familier avec la programmation orienté objet? Un module de classe ou
classe est un modèle objet, un type de donnée. La classe ne fournit que le
modèle de l'objet, c'est-à-dire qu'elle définit comment cet objet
fonctionne, quel sont ses propriétés, ses fonctions et ses méthodes. Pour
utilisé une classe tu dois instancié un objet de cette classe. Tu
déjà avec des instances de classes sans t'en rendre compte : Form,
Collection, etc. Le module de classe te permet d'en définir une qui
pas.
Ex de classe (non testé) :
'***
' CPersonne
Option Explicit
Private m_sNom As String
Private m_sPrenom As String
Private m_dtNaissance As Date
Public Property Get Nom() As String
Nom = m_sNom
End Public
Public Property Let Nom(Byref sNom As String) As String
m_sNom = sNom
End Public
Public Property Get Prenom() As String
Prenom = m_sPrenom
End Public
Public Property Let Prenom(Byref sPrenom As String) As String
m_sPrenom = sPrenom
End Public
Public Property Get DateNaissance() As Date
DateNaissance = m_dtNaissance
End Public
Public Property Let DateNaissance(Byref dtNaissance As Date) As Date
m_dtNaissance = dtNaissance
End Public
Public Function Clone() As CPersonne
Dim p As CPersonne
Set p = New CPersonne
p.Nom = m_sNom
p.Prenom = m_sPrenom
p.DateNaissance = m_dtNaissance
Set Clone = p
End Function
'***
Ex d'utilisation (pas plus testé):
'***
' Module1
Option Explicit
Private Sub Main()
Dim p As CPersonne
Dim p2 As CPersonne
Set p = New CPersonne
p.Nom = "Lefebvre"
p.Prenom = "Yanick"
p.DateNaissance = DateSerial(1980, 9, 6)
Set p2 = p.Clone
Debug.Print p2.Nom
Debug.Print p2.Prenom
Debug.Print p2.DateNaissance
End Sub
'***
Module d'objet public :
Les modules (tout cours) permette de regrouper des méthodes, fonctions ou
variables ensemble quelles soient publiques ou privées.
> Cause et solution de cette erreur :
>
> Vous avez tenté d'utiliser un type public défini par l'utilisateur comme
> paramètre ou comme type renvoyé pour une procédure publique d>un module
> classe, ou comme champ d>un type public défini par l>utilisateur. Seuls
les
> types publics définis par l>utilisateur dans un module d>objet public
> peuvent être utilisés de cette façon
J'imagine que tu as tenté quelque chose de la sorte :
' dans un projet de type ActiveX Exe
'***
' Class1
Option Explicit
Public Type Point
x As Long
y As Long
End Type
Private m_ptLocation As Point
Public Property Get Location() As Point
Location = m_ptLocation
End Property
'***
où Point est un UDT (User Define Type) déclaré publiquement dans ta
Le problème ici c'est que la classe Class1 est une classe privée au
Or tu ne peux pas renvoyé de UDT à partir d'une classe privée car ces
ne sont pas surportés par automation (en gros les autres programmes ne
comprenne pas de quoi tu leur parles lorsque tu utilises ces types)... Si
avais la même classe (elle doit être publique) dans un projet ActiveX Dll,
cela compilerait.
Alors voici quelques solutions à ton problème :
1. À moins que ton UDT soit utilisé par des APIs ou pour écrire dans des
fichiers, tu peux facilement le remplacer par une classe.
2. Tu peux te faire une librairie d'objet dans un Dll à part (projet
DLL), cela nécessite toutefois la distribution de la Dll en question avec
projet.
3. Tu peux renvoyé un pointeur vers ton UDT et utiliser CopyMemory pour
aller chercher l'information à partir de ce pointeur.. (API mode) ;O)
j'opterais pour la première solution, si c'est possible dans ton cas.
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
> Pouvez vous m'indiquer la difference entre : un module de classe et un
> module d'objet public ?
Module de classe :
Es-tu familier avec la programmation orienté objet? Un module de classe ou
classe est un modèle objet, un type de donnée. La classe ne fournit que le
modèle de l'objet, c'est-à-dire qu'elle définit comment cet objet
fonctionne, quel sont ses propriétés, ses fonctions et ses méthodes. Pour
utilisé une classe tu dois instancié un objet de cette classe. Tu
déjà avec des instances de classes sans t'en rendre compte : Form,
Collection, etc. Le module de classe te permet d'en définir une qui
pas.
Ex de classe (non testé) :
'***
' CPersonne
Option Explicit
Private m_sNom As String
Private m_sPrenom As String
Private m_dtNaissance As Date
Public Property Get Nom() As String
Nom = m_sNom
End Public
Public Property Let Nom(Byref sNom As String) As String
m_sNom = sNom
End Public
Public Property Get Prenom() As String
Prenom = m_sPrenom
End Public
Public Property Let Prenom(Byref sPrenom As String) As String
m_sPrenom = sPrenom
End Public
Public Property Get DateNaissance() As Date
DateNaissance = m_dtNaissance
End Public
Public Property Let DateNaissance(Byref dtNaissance As Date) As Date
m_dtNaissance = dtNaissance
End Public
Public Function Clone() As CPersonne
Dim p As CPersonne
Set p = New CPersonne
p.Nom = m_sNom
p.Prenom = m_sPrenom
p.DateNaissance = m_dtNaissance
Set Clone = p
End Function
'***
Ex d'utilisation (pas plus testé):
'***
' Module1
Option Explicit
Private Sub Main()
Dim p As CPersonne
Dim p2 As CPersonne
Set p = New CPersonne
p.Nom = "Lefebvre"
p.Prenom = "Yanick"
p.DateNaissance = DateSerial(1980, 9, 6)
Set p2 = p.Clone
Debug.Print p2.Nom
Debug.Print p2.Prenom
Debug.Print p2.DateNaissance
End Sub
'***
Module d'objet public :
Les modules (tout cours) permette de regrouper des méthodes, fonctions ou
variables ensemble quelles soient publiques ou privées.
> Cause et solution de cette erreur :
>
> Vous avez tenté d'utiliser un type public défini par l'utilisateur comme
> paramètre ou comme type renvoyé pour une procédure publique d>un module
> classe, ou comme champ d>un type public défini par l>utilisateur. Seuls
les
> types publics définis par l>utilisateur dans un module d>objet public
> peuvent être utilisés de cette façon
J'imagine que tu as tenté quelque chose de la sorte :
' dans un projet de type ActiveX Exe
'***
' Class1
Option Explicit
Public Type Point
x As Long
y As Long
End Type
Private m_ptLocation As Point
Public Property Get Location() As Point
Location = m_ptLocation
End Property
'***
où Point est un UDT (User Define Type) déclaré publiquement dans ta
Le problème ici c'est que la classe Class1 est une classe privée au
Or tu ne peux pas renvoyé de UDT à partir d'une classe privée car ces
ne sont pas surportés par automation (en gros les autres programmes ne
comprenne pas de quoi tu leur parles lorsque tu utilises ces types)... Si
avais la même classe (elle doit être publique) dans un projet ActiveX Dll,
cela compilerait.
Alors voici quelques solutions à ton problème :
1. À moins que ton UDT soit utilisé par des APIs ou pour écrire dans des
fichiers, tu peux facilement le remplacer par une classe.
2. Tu peux te faire une librairie d'objet dans un Dll à part (projet
DLL), cela nécessite toutefois la distribution de la Dll en question avec
projet.
3. Tu peux renvoyé un pointeur vers ton UDT et utiliser CopyMemory pour
aller chercher l'information à partir de ce pointeur.. (API mode) ;O)
j'opterais pour la première solution, si c'est possible dans ton cas.
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/