OVH Cloud OVH Cloud

Question niveau débutant

12 réponses
Avatar
Yttrium
Bonjour,

Question basique VB6.

Un bouton ouvre une fenetre.
Actuellement il envoi un parametre à cette fenetre par la propriété TAG.
Mais je voudrais qu'il passe lors de l'ouverture deux ou trois paramètres?
Comment procéder ?

Merci d'avance.
Salutations.

--
[- Yttrium -]
Jetez un oeil à http://www.danstesyeux.com

10 réponses

1 2
Avatar
Jean-Marc
"Yttrium" a écrit dans le message de
news:4388226a$0$24411$
Bonjour,

Question basique VB6.

Un bouton ouvre une fenetre.
Actuellement il envoi un parametre à cette fenetre par la propriété TAG.
Mais je voudrais qu'il passe lors de l'ouverture deux ou trois paramètres?
Comment procéder ?



Hello,

tu n'as malheureusement pas beaucoup le choix dans ce cas. Il n'existe pas
en
VB de moyen élégant pour passer des variables ou des paramètres d'une form
à une autre.
La seule solution (simple) consiste à utiliser des variables publiques, que
tu
déclares dans un module (.bas).
En utilisant des conventions de nommage correctes pour tes variables, on
s'y retrouve assez bien, avec des riques limités. Tu peux aussi utiliser
un Type pour définir et passser tous tes paramètres au sein d'une seule
variable.

voici un mini exemple:

'-- LE MODULE --

' MODULE 1
Option Explicit

' definition d'un type
Public Type Tindividu
nom As String
prenom As String
End Type

' declaration d'une variable publique
' le prefixe GLOB_ permet de reconnaitre
' une variable publique et donc de faire attention
Public GLOB_Individu As Tindividu


'-- LA FORM1, qui remplit les parametres --
' FORM 1
Option Explicit

Private Sub Command1_Click()
' on remplit la structure publique
GLOB_Individu.nom = Text1.Text
GLOB_Individu.prenom = Text2.Text
' et on appelle le second formulaire
Form2.Show 1
End Sub

' -- LA FORM2, qui utilise les parametres --
' FORM 2
Option Explicit

Private Sub Form_Load()
Dim nom As String
Dim prenom As String

' on récupère les parametres passés par form1
' dans la variable publique

nom = GLOB_Individu.nom
prenom = GLOB_Individu.prenom
Label1.Caption = nom
Label2.Caption = prenom

End Sub


--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Christian Hugoud
Ma qué jé né souis pas d'accord.

Il suffit d'implémenter une fonction dans la feuille elle même, comme :

Public Function Use(ByVal TheText As String) As Long 'on peut passer
beaucoup de paramètres, byval et byref

'ici on peut faire tout un paquet de trucs. Attention : la feuille n'a
pas encore activé le Load

show vbModal 'ici le code s'arrête tant que la feuille n'est pas
"Hidée"

'lorsque dans la feuille elle-même on a l'instruction me.hide, le code
reprend ici. On peut mettre ce code dans un bouton de la feuille

Use = m_back 'ici on peut mettre des valeurs de retour suivant le job
effectué dans la feuille

End Function


L'appel de la feuille se fait alors :

Dim f As fBox 'on dira que la feuille qui contient le code ci-dessus est
fBox

Set f = New fBox

BoxChoice = f.Use("Ah le beau message que voila...")
Unload f
Set f = Nothing

Si tu ne veut pas le faire en modal, alors c'est possible, mais plus délicat
à gérer.

Code agricole qui fonctionne parfaitement

Hope this helps

Christian


"Jean-Marc" a écrit dans le message de news:
43882680$0$31943$
"Yttrium" a écrit dans le message de
news:4388226a$0$24411$
Bonjour,

Question basique VB6.

Un bouton ouvre une fenetre.
Actuellement il envoi un parametre à cette fenetre par la propriété TAG.
Mais je voudrais qu'il passe lors de l'ouverture deux ou trois
paramètres?
Comment procéder ?



Hello,

tu n'as malheureusement pas beaucoup le choix dans ce cas. Il n'existe pas
en
VB de moyen élégant pour passer des variables ou des paramètres d'une form
à une autre.
La seule solution (simple) consiste à utiliser des variables publiques,
que
tu
déclares dans un module (.bas).
En utilisant des conventions de nommage correctes pour tes variables, on
s'y retrouve assez bien, avec des riques limités. Tu peux aussi utiliser
un Type pour définir et passser tous tes paramètres au sein d'une seule
variable.

voici un mini exemple:

'-- LE MODULE --

' MODULE 1
Option Explicit

' definition d'un type
Public Type Tindividu
nom As String
prenom As String
End Type

' declaration d'une variable publique
' le prefixe GLOB_ permet de reconnaitre
' une variable publique et donc de faire attention
Public GLOB_Individu As Tindividu


'-- LA FORM1, qui remplit les parametres --
' FORM 1
Option Explicit

Private Sub Command1_Click()
' on remplit la structure publique
GLOB_Individu.nom = Text1.Text
GLOB_Individu.prenom = Text2.Text
' et on appelle le second formulaire
Form2.Show 1
End Sub

' -- LA FORM2, qui utilise les parametres --
' FORM 2
Option Explicit

Private Sub Form_Load()
Dim nom As String
Dim prenom As String

' on récupère les parametres passés par form1
' dans la variable publique

nom = GLOB_Individu.nom
prenom = GLOB_Individu.prenom
Label1.Caption = nom
Label2.Caption = prenom

End Sub


--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



Avatar
Jacques93
Bonjour Yttrium et Jean-Marc,
Yttrium a écrit :
Bonjour,

Question basique VB6.

Un bouton ouvre une fenetre.
Actuellement il envoi un parametre à cette fenetre par la propriété TAG.
Mais je voudrais qu'il passe lors de l'ouverture deux ou trois paramètres?
Comment procéder ?



La méthode de Jean-Marc a l'avantage de conserver les valeurs lorsque la
feuille est déchargée, mais si ce n'est pas utile, ont peut faire :

Dans la feuille appelante :

Private Sub Command1_Click()
Form2.Nom = "Mon Nom"
Form2.Prenom = "Mon Prénom"
Form2.Show vbModal
End Sub

et dans la feuille appelée :

Public Property Let Nom(newValue As String)
Me.Label1.Caption = newValue
End Property

Public Property Let Prenom(newValue As String)
Me.Label2.Caption = newValue
End Property

On peut éventuellement stocker les valeurs dans des variables privées de
la feuille, mais elle seront perdues lors du Unload de la feuille.

--
Cordialement,

Jacques.
Avatar
Jean-Marc
"Christian Hugoud" a écrit dans le message de
news:
Ma qué jé né souis pas d'accord.

Il suffit d'implémenter une fonction dans la feuille elle même, comme :

Public Function Use(ByVal TheText As String) As Long 'on peut passer
beaucoup de paramètres, byval et byref

'ici on peut faire tout un paquet de trucs. Attention : la feuille n'a
pas encore activé le Load

show vbModal 'ici le code s'arrête tant que la feuille n'est pas
"Hidée"

'lorsque dans la feuille elle-même on a l'instruction me.hide, le code
reprend ici. On peut mettre ce code dans un bouton de la feuille

Use = m_back 'ici on peut mettre des valeurs de retour suivant le job
effectué dans la feuille

End Function


L'appel de la feuille se fait alors :

Dim f As fBox 'on dira que la feuille qui contient le code ci-dessus


est
fBox

Set f = New fBox

BoxChoice = f.Use("Ah le beau message que voila...")
Unload f
Set f = Nothing

Si tu ne veut pas le faire en modal, alors c'est possible, mais plus


délicat
à gérer.

Code agricole qui fonctionne parfaitement

Hope this helps

Christian



Hello,

C'est effectivement une façon de faire, qui présente des avantages certains.
Les inconvénients sont l'usage du New, un usage très antinaturel du Unload
et
une bidouille très contestable (utiliser le hide dans la form et faire un
unload dans l'appelant, c'est comment dire ... agricole comme tu disais ...)
Le code résultatnt n'est pas super lisible, mais bon, je suppose qu'avec les
commentaires idoines, on doit s'en sortir.

Moyennant quoi, chacun sa solution. Celle que je proposais est loin d'être
parfaite, c'est clair.

L'alternative proposée par Jacques est une très bonne façon de faire quand
on
n'a pas besoin de persistance, comme il l'explique fort bien dans son
dernier post.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Yttrium
Bonsoir,
Merci pour ces conseils..
Mais voila une question dérivée de vos remarques
Lorsque le paramatre que l'on veut transmettre est un objet , (une
instance de classe), cela ne semable pas fonctionner de la meme maniere..

Comment puis je transmettre cet instance de classe d'un form vers un autre ?

Merci encore.


Le 26/11/2005 09:53, Yttrium nous disait:
Bonjour,

Question basique VB6.

Un bouton ouvre une fenetre.
Actuellement il envoi un parametre à cette fenetre par la propriété TAG.
Mais je voudrais qu'il passe lors de l'ouverture deux ou trois paramètres?
Comment procéder ?

Merci d'avance.
Salutations.





--
[- Yttrium -]
Jetez un oeil à http://www.danstesyeux.com
Avatar
Jean-Marc
"Yttrium" a écrit dans le message de
news:438899eb$0$24882$
Bonsoir,
Merci pour ces conseils..
Mais voila une question dérivée de vos remarques
Lorsque le paramatre que l'on veut transmettre est un objet , (une
instance de classe), cela ne semable pas fonctionner de la meme maniere..

Comment puis je transmettre cet instance de classe d'un form vers un autre


?

Hello,

Pour un objet, cela fonctionne exactement de la même façon, pourquoi
cela serait il différent?

En tout cas, avec la méthode variable publique, il n'y a pas de problème,
le tout étant de créer l'instance à un endroit visible de tous.

J'emploie par exemple souvent ceci quand j'ai besoin d'une connection
database (donc une instance de Database et une d'un recordset) dans
plusieurs forms.

Aurais tu un cas concret (avec un bout de code?) illustrant un cas qui
ne fonctionne pas ? Ce sera sans doute plus aisé alors de t'aider sur
un exemple réel.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Yttrium
Le 26/11/2005 18:33, Jean-Marc nous disait:
Hello,

Pour un objet, cela fonctionne exactement de la même façon, pourquoi
cela serait il différent?

En tout cas, avec la méthode variable publique, il n'y a pas de problème,
le tout étant de créer l'instance à un endroit visible de tous.

J'emploie par exemple souvent ceci quand j'ai besoin d'une connection
database (donc une instance de Database et une d'un recordset) dans
plusieurs forms.

Aurais tu un cas concret (avec un bout de code?) illustrant un cas qui
ne fonctionne pas ? Ce sera sans doute plus aisé alors de t'aider sur
un exemple réel.




Bonjour et merci encore du coup de main.
En fait, j'ai un form qui instancie un objet.
J'ouvre une seconde fenetre à laquelle je voudrais transmettre mon objet.
Cet objet gère une connection FTP et comporte entre autre un handler de
connection, et d'autres méthodes et propriétés.

Je ne parviens pas à transmettre et récupérer cet objets avec les
coinseils qui m'ont été donnés ici...

Désolé, mais je débute en VB, étant développeur PHP par ailleurs.
Merci

--
[- Yttrium -]
Jetez un oeil à http://www.danstesyeux.com
Avatar
Jacques93
Bonsoir à tous,
Yttrium a écrit :
Le 26/11/2005 18:33, Jean-Marc nous disait:

Hello,

Pour un objet, cela fonctionne exactement de la même façon, pourquoi
cela serait il différent?

En tout cas, avec la méthode variable publique, il n'y a pas de
problème,
le tout étant de créer l'instance à un endroit visible de tous.

J'emploie par exemple souvent ceci quand j'ai besoin d'une connection
database (donc une instance de Database et une d'un recordset) dans
plusieurs forms.

Aurais tu un cas concret (avec un bout de code?) illustrant un cas qui
ne fonctionne pas ? Ce sera sans doute plus aisé alors de t'aider sur
un exemple réel.





Bonjour et merci encore du coup de main.
En fait, j'ai un form qui instancie un objet.
J'ouvre une seconde fenetre à laquelle je voudrais transmettre mon objet.
Cet objet gère une connection FTP et comporte entre autre un handler de
connection, et d'autres méthodes et propriétés.

Je ne parviens pas à transmettre et récupérer cet objets avec les
coinseils qui m'ont été donnés ici...




Je vais essayer de t'indiquer quelques pistes avec l'objet Excel, donc à
adapter.

Si tu utilises la méthode de Jean-Marc, avec une variable globale dans
un module, avec l'Early Binding (ajout d'une référence, via Outils =>
Références, à Micosoft Excel)

Dans ton module :

Public MonObjet as Excel.Application

et pour l'instancier

Set MonObjet = New Excel.Application

sinon avec le Late Binding :

Public MonObjet as Object

et pour l'instancier

Set MonObjet = CreateObject("Excel.Application")


Si tu utilise le système de propriété, il faut utiliser Property Set au
lieu de Property Let (le systéme Early Binding / Late Binding est le même) :

Dans Form1 :

Set Form2.MonObjet = New Excel.Application
ou
Set Form2.MonObjet = CreateObject("Excel.Application")


et dans Form2 :

Private m_Objet As Excel.Application
ou
Private m_Objet As Object


Public Property Set MonObjet(newValue As Object)
Set m_Object = newValue
m_Object.Visible = True
End Property


--
Cordialement,

Jacques.
Avatar
Jean-Marc
"Yttrium" a écrit dans le message de
news:43889e92$0$28402$
Le 26/11/2005 18:33, Jean-Marc nous disait:
> Hello,
>
> Pour un objet, cela fonctionne exactement de la même façon, pourquoi
> cela serait il différent?
>
> En tout cas, avec la méthode variable publique, il n'y a pas de


problème,
> le tout étant de créer l'instance à un endroit visible de tous.
>
> J'emploie par exemple souvent ceci quand j'ai besoin d'une connection
> database (donc une instance de Database et une d'un recordset) dans
> plusieurs forms.
>
> Aurais tu un cas concret (avec un bout de code?) illustrant un cas qui
> ne fonctionne pas ? Ce sera sans doute plus aisé alors de t'aider sur
> un exemple réel.


Bonjour et merci encore du coup de main.
En fait, j'ai un form qui instancie un objet.
J'ouvre une seconde fenetre à laquelle je voudrais transmettre mon objet.
Cet objet gère une connection FTP et comporte entre autre un handler de
connection, et d'autres méthodes et propriétés.

Je ne parviens pas à transmettre et récupérer cet objets avec les
coinseils qui m'ont été donnés ici...

Désolé, mais je débute en VB, étant développeur PHP par ailleurs.
Merci



Tu as donc besoin d'instancier un objet, et cet objet doit être "visible"
dans ta seconde fenêtre.
Une solution est de faire comme je l'indiquais dans mon premier post,
je vais essayer de détailler.

Tu déclares ta variable objet (et les autres paramètres dont tu as besoin)
dans un module normal (un .bas). Tu fais ta déclaration en indiquant que
tu veux une variable publique, comme ceci:

Public mon_objet as MaClasseObjet

Une fois ton objet instancié, comme la variable objet est publique, ton
objet est
visible depuis ta seconde feuille, tu n'as rien de spécial à faire.

L'idée ici, c'est que tu n'as rien à "transmettre": la variable étant
publique,
elle est visible naturellement de partout, sans qu'il soit nécessaire de
faire
quelque chose.

Je vais essayer de te faire un exemple et je mettrais un lien ici.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Hervé
Bonsoir Yttrium,
En complément de Jean-Marc, tu peux aussi déclarer publique tes variables
dans le module de la Form appelée, de cette manière tu y fait référence un
peu comme pour une propriété ou une méthode, exemple :

dans le module de la Form appelante :
'-------------------------
Private Sub Form_Click()
With Form2
.Var1 = "variable 1"
.Var2 = "variable 2"
.Show
End With
End Sub
'-------------------------

dans le module de la Form appelée :
'------------------------
Public Var1 As String
Public Var2 As String

Private Sub Form_Load()
Label1.Caption = Var1
Label2.Caption = Var2
End Sub
'-----------------------

Tu peux aussi utiliser un tableau pour stocker tes valeurs mais dans ce cas,
il te faut bien faire attention à mettre tes valeurs aux bons emplacements !

Hervé.


"Yttrium" a écrit dans le message de news:
4388226a$0$24411$
Bonjour,

Question basique VB6.

Un bouton ouvre une fenetre.
Actuellement il envoi un parametre à cette fenetre par la propriété TAG.
Mais je voudrais qu'il passe lors de l'ouverture deux ou trois paramètres?
Comment procéder ?

Merci d'avance.
Salutations.

--
[- Yttrium -]
Jetez un oeil à http://www.danstesyeux.com


1 2