Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/06/2011, 17h07   #1
Invité régulier
 
Inscription : mai 2011
Messages : 47
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 47
Points : 8
Points : 8
Par défaut Recuperer une variable d'un autre formulaire

Bonjour a tous,
Voila j'ai un formulaire dans lequel je crée un tableau de structure (appelons ce tableau "monTabStruct"). C'est une variable globale.
Et j'aimerais savoir si il est possible de récupérer cette variable dans un autre formulaire, et si c'est faisable pourriez-vous me donner le code ?

Pour plus de précision, monTabStruct est dans un sous formulaire, et j'aimerais le recuperer dans le formulaire englobant.

Merci d'avance de votre aide
robx2309 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 20h45   #2
Membre Expert
 
Homme Robert JAMIN
Retraité
Inscription : juillet 2009
Messages : 1 223
Détails du profil
Informations personnelles :
Nom : Homme Robert JAMIN
Âge : 73
Localisation : Belgique

Informations professionnelles :
Activité : Retraité
Secteur : Enseignement

Informations forums :
Inscription : juillet 2009
Messages : 1 223
Points : 2 022
Points : 2 022
Bonjour,

Il y a moyen de récupérer la valeur contenue dans un champ d'un formulaire ouvert, dans un champ d'un autre formulaire.
Vous parler de variable ce qui me perturbe un peu, car je ne comprend pas bien ce que vous chercher à faire.
__________________
Cordialement.

RJ
rjamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 21h32   #3
Invité régulier
 
Inscription : mai 2011
Messages : 47
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 47
Points : 8
Points : 8
Alors je vais développer un peu dans ce cas :
En faite j'ai un formulaire dans lequel je saisie des infos sur une Activite. J'enregistre ensuite ces infos dans une structure de données (appelée "activité"). Je mets ensuite l'instance de ma structure dans un tableau, tableau que j'ai declaré en Public dans mon formulaire.
Et ce formulaire est comprit dans un autre formulaire, dans lequel je voudrais recuperer toutes les donnees des activités que j'ai entré dans le sous formulaire.
C'estdonc pour cela que je voulais savoir comment faire pour acceder a une variable Public a partir d'un autre formulaire.
robx2309 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 22h10   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Tu peux essayer Forms("NomTonForm").NomTaVariable ça devrait marcher.

Sinon

Code :
1
2
3
4
5
dim f as form_NomTonForm
set f=forms("NomTonForm")
'exemple d'usage de ta variable 
debug.print f.NomTaVariable
set f=nothing
Note que les pratiques recommandées déconseillent l'usage de variables globales qui sont une source de bugs difficiles à trouver. Quand tu déclares une variable public ou global, tous les objets de ta base peuvent la manipuler.

Si tu veux faire cela de manière plus sécuritaire tu pourrais déclarer une propriété Get sur ton formulaire qui te permettrai de rendre mettre ta variable en mode 'Lecture-Seule'. Ainsi tout le monde peut la lire mais seul ton formulaire peut la modifier.

Code :
1
2
3
public property Get TaVariable() as TonType
   TaVariable=NomTaVariableInterne
end property
Tu pourrais aussi regarder si tu ne peux pas passer ta variable en paramêtre.

Enfin une alternative à ta structure est une table temporaire mais c'est une variable globale déguisée :-). Le seul intéret de la table c'est sa persistance. Elle reste disponible même si ton formulaire est fermé.

Attention : VBA n'est pas un VRAI langage objet comme Java ou VB.Net, c'est un langage procédural avec des objets atrophiés.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/06/2011, 22h45   #5
Invité régulier
 
Inscription : mai 2011
Messages : 47
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 47
Points : 8
Points : 8
Merci
Au sujet de ta 2èeme solution, si je mets un get dans mon formulaire, je suppose qu'il ne faudra pas que je declare mon tableau dans un module, puisque seul mon formulaire doit y avoir acces (en lecture du moins).
Donc ou dois je declarer mon tableau si je fais cette solution ?
robx2309 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 13h43   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Si ton tableau "appartient" au formulaire il suffit que tu le déclares dans le module associé au formulaire. Celui qui s'ouvre quand tu veux ajouter un événement à un formulaire.

Tu mets ta déclaration sous

Code :
1
2
Option Compare Database
Option Explicit
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 20h09   #7
Invité régulier
 
Inscription : mai 2011
Messages : 47
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 47
Points : 8
Points : 8
Encore merci,
et j'ai une derniere question,
comment je fais pour appeler la fonction Get dans mon formulaire dans lequel je vais me servir du tableau ?
robx2309 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 20h51   #8
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
les propriétés sont 'transparentes'

Tu as simplement a écrire

Code :
1
2
 
TaVariable=TonObjetForm.TaPropriété
pour l'appel il n'y a pas de différence avec une variable publique.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 21h35   #9
Invité régulier
 
Inscription : mai 2011
Messages : 47
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 47
Points : 8
Points : 8
Donc la propriété get que j'ai ecrit dans mon autre formulaire s'appelle actTab : (ma variable interne s'appelle actArray)
Code :
1
2
3
Public Property Get actTab() As Activite()
   actTab = actArray
End Property
J'ai crée ma fonction qui recupere le tableau dans mon formualire :
Code :
1
2
    Dim activites() As Activite
    activites = SubFormSaisieAct.actTab
mais quand je veux executer le code j'obtiens : "Method or data member not found", l'erreur est sur cette ligne :
Code :
 activites = SubFormSaisieAct.actTab
Y a t'il quelque chose que j'ai mal ecrit ?
robx2309 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 18h59   #10
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Je ne suis pas sur de qui est l'autre formulaire :-).

Soit F1 le formulaire qui contient ta variable.

dans F1

Code :
1
2
3
4
5
dim mMaVariable as Activite 'Variable privée
 
public property Get MaVariable() as Activite
   MaVariable=mMaVariable
end property
dans F2 le formulaire qui veut lire la variable

Code :
1
2
3
4
dim v as Activite
dim f1 as Form_F1:set f1=forms("F1")
v=f1.MaVariable
set f1=nothing
Cela devait marcher.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 20h41   #11
Invité régulier
 
Inscription : mai 2011
Messages : 47
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 47
Points : 8
Points : 8
En faite j'ai oublié de préciser que F1 est en faitre un sous-formulaire inclus dans F2, est-ce que ca change quelque chose dans le code ?

Parce que avec ce code j'obtiens l'erreur : "Microsoft Access can't find th form 'monSousForm' referred to in a macro expression or in Visual Basic code."
robx2309 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 21h43   #12
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Oui mais je ne sais pas exactement quoi, essaye :

Code :
set f1=f2.NomTonControlSousForm.form
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 21h45   #13
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Pour info la collection Forms() contient la liste des formulaires actuellement ouverts. Un sous-formulaire étant inclus dans un autre il n'apparaît pas dans la collection Forms.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 22h46   #14
Invité régulier
 
Inscription : mai 2011
Messages : 47
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 47
Points : 8
Points : 8
Parfait ca marche,
En tout cas merci pour ton aide ca fait plaisir de pas etre seul dans le marasme du VBA
robx2309 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h08.


 
 
 
 
Partenaires

Hébergement Web