Bonjour,
J'ai une Feuille1 qui contient un certain nombre de=20
variables et 1 recordset (ado). Cette Feuille1 permet=20
l'ouverture d'une Feuille2 dans laquelle j'aimerais faire=20
une copie de qq unes des variables et du recordset, mais=20
sans rendre ces variables et le recordset public.
Autre pr=E9cision : il faudrait que ces informations copi=E9es=20
soient disponibles dans l'=E9v=E8nement Form_Load de la=20
Feuille2.
Comment faire "simplement" ?
Merci =E0 tous pour votre aide.
RV
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
ng
Salut,
Le plus simple est de définir des propriétés je pense (property).
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ http://apisvb.europe.webmatrixhosting.net/
RV a écrit :
Bonjour, J'ai une Feuille1 qui contient un certain nombre de variables et 1 recordset (ado). Cette Feuille1 permet l'ouverture d'une Feuille2 dans laquelle j'aimerais faire une copie de qq unes des variables et du recordset, mais sans rendre ces variables et le recordset public. Autre précision : il faudrait que ces informations copiées soient disponibles dans l'évènement Form_Load de la Feuille2. Comment faire "simplement" ? Merci à tous pour votre aide. RV
Salut,
Le plus simple est de définir des propriétés je pense (property).
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/
RV <nospam.lagant@dga.jouy.inra.fr> a écrit :
Bonjour,
J'ai une Feuille1 qui contient un certain nombre de
variables et 1 recordset (ado). Cette Feuille1 permet
l'ouverture d'une Feuille2 dans laquelle j'aimerais faire
une copie de qq unes des variables et du recordset, mais
sans rendre ces variables et le recordset public.
Autre précision : il faudrait que ces informations copiées
soient disponibles dans l'évènement Form_Load de la
Feuille2.
Comment faire "simplement" ?
Merci à tous pour votre aide.
RV
Le plus simple est de définir des propriétés je pense (property).
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ http://apisvb.europe.webmatrixhosting.net/
RV a écrit :
Bonjour, J'ai une Feuille1 qui contient un certain nombre de variables et 1 recordset (ado). Cette Feuille1 permet l'ouverture d'une Feuille2 dans laquelle j'aimerais faire une copie de qq unes des variables et du recordset, mais sans rendre ces variables et le recordset public. Autre précision : il faudrait que ces informations copiées soient disponibles dans l'évènement Form_Load de la Feuille2. Comment faire "simplement" ? Merci à tous pour votre aide. RV
Zoury
> Le plus simple est de définir des propriétés je pense (property).
Yep! C'est aussi, amha, la meilleure solution. Ça permet de conserver un aspect orienté-objet, de facilité la maintenance en plus d'être intuitif pour les utilisateur.
Voici un exemple non fonctionnel qui ne fait que démontrer le concept. : '*** ' Form1 Option Explicit
Private Sub MyFunc()
Dim frm As Form2 Set frm = New Form2
Set frm.Recordset = rs frm.Var1 = var1 frm.Var2 = var2
Call frm.Show
End Sub '*** '*** ' Form2 Option Explicit
Private m_rs As ADODB.Recordset Private m_var1 As Long Private m_var2 As String
Public Property Get Recordset() As ADODB.Recordset Set Recordset = m_rs End Property
Public Property Set Recordset(ByRef rs As ADODB.Recordset) Set m_rs = rs End Property
Public Property Get Var1() As Long Var1 = m_var1 End Property
Public Property Let Var1(ByRef v1 As Long) m_var1 = v1 End Property
Public Property Get Var2() As String Var2 = m_var2 End Property
Public Property Let Var2(ByRef v2 As String) m_var2 = v2 End Property '***
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ http://apisvb.europe.webmatrixhosting.net/
RV a écrit :
> Bonjour, > J'ai une Feuille1 qui contient un certain nombre de > variables et 1 recordset (ado). Cette Feuille1 permet > l'ouverture d'une Feuille2 dans laquelle j'aimerais faire > une copie de qq unes des variables et du recordset, mais > sans rendre ces variables et le recordset public. > Autre précision : il faudrait que ces informations copiées > soient disponibles dans l'évènement Form_Load de la > Feuille2. > Comment faire "simplement" ? > Merci à tous pour votre aide. > RV
> Le plus simple est de définir des propriétés je pense (property).
Yep! C'est aussi, amha, la meilleure solution. Ça permet de conserver un
aspect orienté-objet, de facilité la maintenance en plus d'être intuitif
pour les utilisateur.
Voici un exemple non fonctionnel qui ne fait que démontrer le concept. :
'***
' Form1
Option Explicit
Private Sub MyFunc()
Dim frm As Form2
Set frm = New Form2
Set frm.Recordset = rs
frm.Var1 = var1
frm.Var2 = var2
Call frm.Show
End Sub
'***
'***
' Form2
Option Explicit
Private m_rs As ADODB.Recordset
Private m_var1 As Long
Private m_var2 As String
Public Property Get Recordset() As ADODB.Recordset
Set Recordset = m_rs
End Property
Public Property Set Recordset(ByRef rs As ADODB.Recordset)
Set m_rs = rs
End Property
Public Property Get Var1() As Long
Var1 = m_var1
End Property
Public Property Let Var1(ByRef v1 As Long)
m_var1 = v1
End Property
Public Property Get Var2() As String
Var2 = m_var2
End Property
Public Property Let Var2(ByRef v2 As String)
m_var2 = v2
End Property
'***
"ng" <ng@ngsoft-fr.com> a écrit dans le message de
news:uFF3Zq5TEHA.3280@TK2MSFTNGP10.phx.gbl...
Salut,
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/
RV <nospam.lagant@dga.jouy.inra.fr> a écrit :
> Bonjour,
> J'ai une Feuille1 qui contient un certain nombre de
> variables et 1 recordset (ado). Cette Feuille1 permet
> l'ouverture d'une Feuille2 dans laquelle j'aimerais faire
> une copie de qq unes des variables et du recordset, mais
> sans rendre ces variables et le recordset public.
> Autre précision : il faudrait que ces informations copiées
> soient disponibles dans l'évènement Form_Load de la
> Feuille2.
> Comment faire "simplement" ?
> Merci à tous pour votre aide.
> RV
> Le plus simple est de définir des propriétés je pense (property).
Yep! C'est aussi, amha, la meilleure solution. Ça permet de conserver un aspect orienté-objet, de facilité la maintenance en plus d'être intuitif pour les utilisateur.
Voici un exemple non fonctionnel qui ne fait que démontrer le concept. : '*** ' Form1 Option Explicit
Private Sub MyFunc()
Dim frm As Form2 Set frm = New Form2
Set frm.Recordset = rs frm.Var1 = var1 frm.Var2 = var2
Call frm.Show
End Sub '*** '*** ' Form2 Option Explicit
Private m_rs As ADODB.Recordset Private m_var1 As Long Private m_var2 As String
Public Property Get Recordset() As ADODB.Recordset Set Recordset = m_rs End Property
Public Property Set Recordset(ByRef rs As ADODB.Recordset) Set m_rs = rs End Property
Public Property Get Var1() As Long Var1 = m_var1 End Property
Public Property Let Var1(ByRef v1 As Long) m_var1 = v1 End Property
Public Property Get Var2() As String Var2 = m_var2 End Property
Public Property Let Var2(ByRef v2 As String) m_var2 = v2 End Property '***
-- Nicolas G. FAQ VB : http://faq.vb.free.fr API Guide : http://www.allapi.net Google Groups : http://groups.google.fr/ MZ-Tools : http://www.mztools.com/ http://apisvb.europe.webmatrixhosting.net/
RV a écrit :
> Bonjour, > J'ai une Feuille1 qui contient un certain nombre de > variables et 1 recordset (ado). Cette Feuille1 permet > l'ouverture d'une Feuille2 dans laquelle j'aimerais faire > une copie de qq unes des variables et du recordset, mais > sans rendre ces variables et le recordset public. > Autre précision : il faudrait que ces informations copiées > soient disponibles dans l'évènement Form_Load de la > Feuille2. > Comment faire "simplement" ? > Merci à tous pour votre aide. > RV
RV
>-----Message d'origine-----
Le plus simple est de définir des propriétés je pense
(property).
Yep! C'est aussi, amha, la meilleure solution. Ça permet
de conserver un aspect orienté-objet, de facilité la maintenance en plus d'être intuitif pour les utilisateur.
Tout d'abord, merci beaucoup pour vos réponses. En fait, j'avais bien défini des propiétés sur la Form2, comme vous le décrivez, mais rencontrant des problèmes, j'avais cherché une autre solution... Je tente de vous expliquer le problème rencontré.
Sur Form2, j'ai 2 propriétés definies comme suit :
Dim adoRecordset2 As ADODB.Recordset Public Property Let Recordset2(value As ADODB.Recordset) Set adoRecordset2 = value End Property Private Sub Form_Load() Label2.Caption = "'" & adoRecordset2.RecordCount & "'" End Sub
Sur Form1 j'ai un bouton de commande qui appele Form2 : Private Sub Command1_Click() With Form2 .Label2.Caption = "adoRecordset2 vide." .Recordset2 = adoRecordset1 .Show vbModal End With End Sub
Quand je click sur le bouton, je recois le message suivant : "Erreur d'execution 91: variable objet ou variable bloc With non définie", en pointant sur ".Recordset2 = adoRecordset1". Si je met en commentaire .Label2.Caption = "adoRecordset2 vide.", alors tout marche bien... Est-ce normal ? Encore merci RV
>-----Message d'origine-----
Le plus simple est de définir des propriétés je pense
(property).
Yep! C'est aussi, amha, la meilleure solution. Ça permet
de conserver un aspect orienté-objet, de facilité la
maintenance en plus d'être intuitif pour les utilisateur.
Tout d'abord, merci beaucoup pour vos réponses.
En fait, j'avais bien défini des propiétés sur la Form2,
comme vous le décrivez, mais rencontrant des problèmes,
j'avais cherché une autre solution... Je tente de vous
expliquer le problème rencontré.
Sur Form2, j'ai 2 propriétés definies comme suit :
Dim adoRecordset2 As ADODB.Recordset
Public Property Let Recordset2(value As ADODB.Recordset)
Set adoRecordset2 = value
End Property
Private Sub Form_Load()
Label2.Caption = "'" & adoRecordset2.RecordCount & "'"
End Sub
Sur Form1 j'ai un bouton de commande qui appele Form2 :
Private Sub Command1_Click()
With Form2
.Label2.Caption = "adoRecordset2 vide."
.Recordset2 = adoRecordset1
.Show vbModal
End With
End Sub
Quand je click sur le bouton, je recois le message
suivant : "Erreur d'execution 91: variable objet ou
variable bloc With non définie", en pointant
sur ".Recordset2 = adoRecordset1".
Si je met en commentaire .Label2.Caption = "adoRecordset2
vide.", alors tout marche bien...
Est-ce normal ?
Encore merci
RV
Le plus simple est de définir des propriétés je pense
(property).
Yep! C'est aussi, amha, la meilleure solution. Ça permet
de conserver un aspect orienté-objet, de facilité la maintenance en plus d'être intuitif pour les utilisateur.
Tout d'abord, merci beaucoup pour vos réponses. En fait, j'avais bien défini des propiétés sur la Form2, comme vous le décrivez, mais rencontrant des problèmes, j'avais cherché une autre solution... Je tente de vous expliquer le problème rencontré.
Sur Form2, j'ai 2 propriétés definies comme suit :
Dim adoRecordset2 As ADODB.Recordset Public Property Let Recordset2(value As ADODB.Recordset) Set adoRecordset2 = value End Property Private Sub Form_Load() Label2.Caption = "'" & adoRecordset2.RecordCount & "'" End Sub
Sur Form1 j'ai un bouton de commande qui appele Form2 : Private Sub Command1_Click() With Form2 .Label2.Caption = "adoRecordset2 vide." .Recordset2 = adoRecordset1 .Show vbModal End With End Sub
Quand je click sur le bouton, je recois le message suivant : "Erreur d'execution 91: variable objet ou variable bloc With non définie", en pointant sur ".Recordset2 = adoRecordset1". Si je met en commentaire .Label2.Caption = "adoRecordset2 vide.", alors tout marche bien... Est-ce normal ? Encore merci RV
>-----Message d'origine-----
Le plus simple est de définir des propriétés je pense
(property).
Yep! C'est aussi, amha, la meilleure solution. Ça permet
de conserver un aspect orienté-objet, de facilité la maintenance en plus d'être intuitif pour les utilisateur.
JE CORRIGE MON MESSAGE PRECEDENT... (j'ai pu toute ma tête... ;-)) Tout d'abord, merci beaucoup pour vos réponses. En fait, j'avais bien défini des propiétés sur la Form2, comme vous le décrivez, mais rencontrant des problèmes, j'avais cherché une autre solution... Je tente de vous expliquer le problème rencontré.
Sur Form2, le code :
Dim adoRecordset2 As ADODB.Recordset Public Property Let Recordset2(value As ADODB.Recordset) Set adoRecordset2 = value End Property Private Sub Form_Load() Label2.Caption = "'" & adoRecordset2.RecordCount & "'" End Sub
Sur Form1 j'ai un bouton de commande qui lance Form2 : Private Sub Command1_Click() With Form2 .Label2.Caption = "adoRecordset2 vide." .Recordset2 = adoRecordset1 .Show vbModal End With End Sub
Quand je click sur le bouton, je recois le message suivant : "Erreur d'execution 91: variable objet ou variable bloc With non définie", en pointant sur Label2.Caption="'" & adoRecordset2.RecordCount & "'" Si je met en commentaire .Label2.Caption = "adoRecordset2 vide." sur Form1, alors le recordset passe bien d'une Form à l'autre... Est-ce normal ? Encore merci RV
>-----Message d'origine-----
Le plus simple est de définir des propriétés je pense
(property).
Yep! C'est aussi, amha, la meilleure solution. Ça permet
de conserver un aspect orienté-objet, de facilité la
maintenance en plus d'être intuitif pour les utilisateur.
JE CORRIGE MON MESSAGE PRECEDENT... (j'ai pu toute ma
tête... ;-))
Tout d'abord, merci beaucoup pour vos réponses.
En fait, j'avais bien défini des propiétés sur la Form2,
comme vous le décrivez, mais rencontrant des problèmes,
j'avais cherché une autre solution... Je tente de vous
expliquer le problème rencontré.
Sur Form2, le code :
Dim adoRecordset2 As ADODB.Recordset
Public Property Let Recordset2(value As ADODB.Recordset)
Set adoRecordset2 = value
End Property
Private Sub Form_Load()
Label2.Caption = "'" & adoRecordset2.RecordCount & "'"
End Sub
Sur Form1 j'ai un bouton de commande qui lance Form2 :
Private Sub Command1_Click()
With Form2
.Label2.Caption = "adoRecordset2 vide."
.Recordset2 = adoRecordset1
.Show vbModal
End With
End Sub
Quand je click sur le bouton, je recois le message
suivant : "Erreur d'execution 91: variable objet ou
variable bloc With non définie", en pointant
sur Label2.Caption="'" & adoRecordset2.RecordCount & "'"
Si je met en commentaire .Label2.Caption = "adoRecordset2
vide." sur Form1, alors le recordset passe bien d'une Form
à l'autre...
Est-ce normal ?
Encore merci
RV
Le plus simple est de définir des propriétés je pense
(property).
Yep! C'est aussi, amha, la meilleure solution. Ça permet
de conserver un aspect orienté-objet, de facilité la maintenance en plus d'être intuitif pour les utilisateur.
JE CORRIGE MON MESSAGE PRECEDENT... (j'ai pu toute ma tête... ;-)) Tout d'abord, merci beaucoup pour vos réponses. En fait, j'avais bien défini des propiétés sur la Form2, comme vous le décrivez, mais rencontrant des problèmes, j'avais cherché une autre solution... Je tente de vous expliquer le problème rencontré.
Sur Form2, le code :
Dim adoRecordset2 As ADODB.Recordset Public Property Let Recordset2(value As ADODB.Recordset) Set adoRecordset2 = value End Property Private Sub Form_Load() Label2.Caption = "'" & adoRecordset2.RecordCount & "'" End Sub
Sur Form1 j'ai un bouton de commande qui lance Form2 : Private Sub Command1_Click() With Form2 .Label2.Caption = "adoRecordset2 vide." .Recordset2 = adoRecordset1 .Show vbModal End With End Sub
Quand je click sur le bouton, je recois le message suivant : "Erreur d'execution 91: variable objet ou variable bloc With non définie", en pointant sur Label2.Caption="'" & adoRecordset2.RecordCount & "'" Si je met en commentaire .Label2.Caption = "adoRecordset2 vide." sur Form1, alors le recordset passe bien d'une Form à l'autre... Est-ce normal ? Encore merci RV
RV
Hello, personne pour une solution ? ;-) merci RV
JE CORRIGE MON MESSAGE PRECEDENT... (j'ai pu toute ma tête... ;-)) Tout d'abord, merci beaucoup pour vos réponses. En fait, j'avais bien défini des propiétés sur la Form2, comme vous le décrivez, mais rencontrant des problèmes, j'avais cherché une autre solution... Je tente de vous expliquer le problème rencontré.
Sur Form2, le code :
Dim adoRecordset2 As ADODB.Recordset Public Property Let Recordset2(value As ADODB.Recordset) Set adoRecordset2 = value End Property Private Sub Form_Load() Label2.Caption = "'" & adoRecordset2.RecordCount & "'" End Sub
Sur Form1 j'ai un bouton de commande qui lance Form2 : Private Sub Command1_Click() With Form2 .Label2.Caption = "adoRecordset2 vide." .Recordset2 = adoRecordset1 .Show vbModal End With End Sub
Quand je click sur le bouton, je recois le message suivant : "Erreur d'execution 91: variable objet ou variable bloc With non définie", en pointant sur Label2.Caption="'" & adoRecordset2.RecordCount & "'" Si je met en commentaire .Label2.Caption = "adoRecordset2 vide." sur Form1, alors le recordset passe bien d'une
Form
à l'autre... Est-ce normal ? Encore merci RV
.
Hello,
personne pour une solution ? ;-)
merci
RV
JE CORRIGE MON MESSAGE PRECEDENT... (j'ai pu toute ma
tête... ;-))
Tout d'abord, merci beaucoup pour vos réponses.
En fait, j'avais bien défini des propiétés sur la Form2,
comme vous le décrivez, mais rencontrant des problèmes,
j'avais cherché une autre solution... Je tente de vous
expliquer le problème rencontré.
Sur Form2, le code :
Dim adoRecordset2 As ADODB.Recordset
Public Property Let Recordset2(value As ADODB.Recordset)
Set adoRecordset2 = value
End Property
Private Sub Form_Load()
Label2.Caption = "'" & adoRecordset2.RecordCount & "'"
End Sub
Sur Form1 j'ai un bouton de commande qui lance Form2 :
Private Sub Command1_Click()
With Form2
.Label2.Caption = "adoRecordset2 vide."
.Recordset2 = adoRecordset1
.Show vbModal
End With
End Sub
Quand je click sur le bouton, je recois le message
suivant : "Erreur d'execution 91: variable objet ou
variable bloc With non définie", en pointant
sur Label2.Caption="'" & adoRecordset2.RecordCount & "'"
Si je met en commentaire .Label2.Caption = "adoRecordset2
vide." sur Form1, alors le recordset passe bien d'une
JE CORRIGE MON MESSAGE PRECEDENT... (j'ai pu toute ma tête... ;-)) Tout d'abord, merci beaucoup pour vos réponses. En fait, j'avais bien défini des propiétés sur la Form2, comme vous le décrivez, mais rencontrant des problèmes, j'avais cherché une autre solution... Je tente de vous expliquer le problème rencontré.
Sur Form2, le code :
Dim adoRecordset2 As ADODB.Recordset Public Property Let Recordset2(value As ADODB.Recordset) Set adoRecordset2 = value End Property Private Sub Form_Load() Label2.Caption = "'" & adoRecordset2.RecordCount & "'" End Sub
Sur Form1 j'ai un bouton de commande qui lance Form2 : Private Sub Command1_Click() With Form2 .Label2.Caption = "adoRecordset2 vide." .Recordset2 = adoRecordset1 .Show vbModal End With End Sub
Quand je click sur le bouton, je recois le message suivant : "Erreur d'execution 91: variable objet ou variable bloc With non définie", en pointant sur Label2.Caption="'" & adoRecordset2.RecordCount & "'" Si je met en commentaire .Label2.Caption = "adoRecordset2 vide." sur Form1, alors le recordset passe bien d'une
Form
à l'autre... Est-ce normal ? Encore merci RV
.
Zoury
> personne pour une solution ? ;-)
hehe! Oui désolé pour le retard.. :O)
Lorsque tu tentes d'accéder aux membres d'un formulaire non chargé, ce dernier se charge en mémoire automatiquement...
Si on observe attentivement ton code :
Private Sub Command1_Click() With Form2 .Label2.Caption = "adoRecordset2 vide." .Recordset2 = adoRecordset1 .Show vbModal End With End Sub
Tu modifies la propriété Caption du formulaire, mais ce dernier n'est pas chargé en mémoire à ce moment. Le système charge donc ce formulaire en mémoire ce déclenche automatiquement l'événement Form_Load() du Form2 :
Private Sub Form_Load() Label2.Caption = "'" & adoRecordset2.RecordCount & "'" End Sub
et ce même moment l'objet adoRecordset2 est encore à Nothing car cette propriété n'a pas été initialiser encore.
une autre chose aussi :
Public Property Let Recordset2(value As ADODB.Recordset) Set adoRecordset2 = value End Property
<snip>
.Recordset2 = adoRecordset1
Étant donné qur Recordset2 est un objet, tu devrais implémenter la définition de la propriété avec le mot clé Set au lieu de Let afin de préserver le fonctionnement "normal" de VB lors de l'affectation de valeur de type Object.
Tu aurais donc plusieurs choix.. en voici un qui devrait t'éviter l'erreur en plus de mettre le caption à jour à chaque modification du Recordset : '*** ' Form2 Option Explicit
Private adoRecordset2 As ADODB.Recordset
Public Property Set Recordset2(value As ADODB.Recordset) Set adoRecordset2 = value Label2.Caption = "'" & adoRecordset2.RecordCount & "'" End Property '*** '*** ' et sur Form1 ... Private Sub Command1_Click() With Form2 Set .Recordset2 = adoRecordset1 .Show vbModal End With End Sub '***
Lorsque tu tentes d'accéder aux membres d'un formulaire non chargé, ce
dernier se charge en mémoire automatiquement...
Si on observe attentivement ton code :
Private Sub Command1_Click()
With Form2
.Label2.Caption = "adoRecordset2 vide."
.Recordset2 = adoRecordset1
.Show vbModal
End With
End Sub
Tu modifies la propriété Caption du formulaire, mais ce dernier n'est pas
chargé en mémoire à ce moment. Le système charge donc ce formulaire en
mémoire ce déclenche automatiquement l'événement Form_Load() du Form2 :
Private Sub Form_Load()
Label2.Caption = "'" & adoRecordset2.RecordCount & "'"
End Sub
et ce même moment l'objet adoRecordset2 est encore à Nothing car cette
propriété n'a pas été initialiser encore.
une autre chose aussi :
Public Property Let Recordset2(value As ADODB.Recordset)
Set adoRecordset2 = value
End Property
<snip>
.Recordset2 = adoRecordset1
Étant donné qur Recordset2 est un objet, tu devrais implémenter la
définition de la propriété avec le mot clé Set au lieu de Let afin de
préserver le fonctionnement "normal" de VB lors de l'affectation de valeur
de type Object.
Tu aurais donc plusieurs choix.. en voici un qui devrait t'éviter l'erreur
en plus de mettre le caption à jour à chaque modification du Recordset :
'***
' Form2
Option Explicit
Private adoRecordset2 As ADODB.Recordset
Public Property Set Recordset2(value As ADODB.Recordset)
Set adoRecordset2 = value
Label2.Caption = "'" & adoRecordset2.RecordCount & "'"
End Property
'***
'***
' et sur Form1 ...
Private Sub Command1_Click()
With Form2
Set .Recordset2 = adoRecordset1
.Show vbModal
End With
End Sub
'***
Lorsque tu tentes d'accéder aux membres d'un formulaire non chargé, ce dernier se charge en mémoire automatiquement...
Si on observe attentivement ton code :
Private Sub Command1_Click() With Form2 .Label2.Caption = "adoRecordset2 vide." .Recordset2 = adoRecordset1 .Show vbModal End With End Sub
Tu modifies la propriété Caption du formulaire, mais ce dernier n'est pas chargé en mémoire à ce moment. Le système charge donc ce formulaire en mémoire ce déclenche automatiquement l'événement Form_Load() du Form2 :
Private Sub Form_Load() Label2.Caption = "'" & adoRecordset2.RecordCount & "'" End Sub
et ce même moment l'objet adoRecordset2 est encore à Nothing car cette propriété n'a pas été initialiser encore.
une autre chose aussi :
Public Property Let Recordset2(value As ADODB.Recordset) Set adoRecordset2 = value End Property
<snip>
.Recordset2 = adoRecordset1
Étant donné qur Recordset2 est un objet, tu devrais implémenter la définition de la propriété avec le mot clé Set au lieu de Let afin de préserver le fonctionnement "normal" de VB lors de l'affectation de valeur de type Object.
Tu aurais donc plusieurs choix.. en voici un qui devrait t'éviter l'erreur en plus de mettre le caption à jour à chaque modification du Recordset : '*** ' Form2 Option Explicit
Private adoRecordset2 As ADODB.Recordset
Public Property Set Recordset2(value As ADODB.Recordset) Set adoRecordset2 = value Label2.Caption = "'" & adoRecordset2.RecordCount & "'" End Property '*** '*** ' et sur Form1 ... Private Sub Command1_Click() With Form2 Set .Recordset2 = adoRecordset1 .Show vbModal End With End Sub '***
Pas de pb Yanick, je suis des fois très (trop) impatient... ;-) En tout cas, merci pour ton explication qui est on ne peut des plus claires. Je regarde comment je peux donc régler mon pb. RV
>-----Message d'origine-----
personne pour une solution ? ;-)
hehe! Oui désolé pour le retard.. :O)
Pas de pb Yanick, je suis des fois très (trop)
impatient... ;-)
En tout cas, merci pour ton explication qui est on ne peut
des plus claires. Je regarde comment je peux donc régler
mon pb.
RV
Pas de pb Yanick, je suis des fois très (trop) impatient... ;-) En tout cas, merci pour ton explication qui est on ne peut des plus claires. Je regarde comment je peux donc régler mon pb. RV