OVH Cloud OVH Cloud

copie d'information d'une feuilles dans une 2eme

7 réponses
Avatar
RV
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

7 réponses

Avatar
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


Avatar
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
'***

--
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/

"ng" a écrit dans le message de
news:
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 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




Avatar
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
Avatar
>-----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
Avatar
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

.



Avatar
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
'***

--
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/
Avatar
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