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 09/03/2011, 11h51   #1
Invité de passage
 
Inscription : mars 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 23
Points : 0
Points : 0
Par défaut Recuperer une valeur d'une feuille de données afin d'ouvrir le formulaire correspondant

Bonjour à tous,

Je vais essayer d'être le plus clair possible, parce qu'il me semble que mon problème n'est pas simple...

Pour commencer je possède un formulaire comportant un sous formulaire (sous forme de feuille de données) et une liste déroulante, permettant de trier par "package" (le nom d'une de mes colonnes) le sous formulaire.

Une fois le package selectionné dans la liste déroulante, la feuille tri les données, je peux avoir plusieurs lignes pour un même package...

Jusque là c'est simple et ca fonctionne...

Ce que je cherche à faire:

L'utilisateur puisse acceder à des informations complémentaires (qui seront stocké sur un autre formulaire) liées à une des lignes de la feuille de donnée.

Comment puis-je procéder? Peut-on par un "clic" d'une ligne de la feuille de donnée ressortir les informations liées a cette ligne?
Dois-je créer des étapes intermédiaires?
Y aurait il moyen de créer un formulaire générique se modifiant en fonction de la ligne de données sélectionnée dans le sous formulaire?

Comme vous pouvez le voir je ne sais pas très bien par ou commencer...
Je vous remercie tous d'avance

Patoche
mploki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 13h45   #2
Modérateur
 
Avatar de mout1234
 
Inscription : novembre 2006
Messages : 2 200
Détails du profil
Informations personnelles :
Âge : 43
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2006
Messages : 2 200
Points : 2 699
Points : 2 699
Bonjour,

Les possibilités sont limitées dans le cadre d'un sous formulaire (S.F.) de type feuille de données. Il est cependant possible d'associer à l'évènement sur Double-clic du sous formulaire une action en VBA qui ouvrira le formulaire cible et le filtrer pour le faire correspondre à la ligne courante dans le S.F.. L'utilisateur devra alors faire un double-clic sur le sélecteur de la ligne dans le S.F.

On peut également créer un bouton dans le formulaire principal qui lancera un code similaire.

Pour ma part, j'offre généralement les deux solutions à l'utilisateur.
__________________
............................................................................................

Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.


Les FAQs les tutos Les Sources Access Profitez de ces mines d'or...

Postez dans le bon sous forum et mentionnez la version
mout1234 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/03/2011, 14h08   #3
Invité de passage
 
Inscription : mars 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 23
Points : 0
Points : 0
Merci de ta rapidité, c'est assez impressionnant de voir qu'en moins de deux heures j'ai deja des pistes concrètes.

Par contre n'ayant jamais programmé sur VBA ou autre d'ailleurs, je vois mal comment partir, j'opterai bien comme toi pour les deux solutions (double clic sur ligne et bouton).

C'est le fait de récupérer l'information de la ligne suite à la selection et faire correspondre la ligne choisie avec le formulaire voulu qui me dérange. Je ne sais pas comment formuler ca en VBA.

As-tu au moins un début de code ou un code similaire dont je pourrais m'inspirer?

Encore merci
mploki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 14h48   #4
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Bonjour,

Pour ma part, j'opterais plutôt pour un contrôle zone de liste au lieu du sous-formulaire en mode feuille de données. Tu places ta table ou ta requête dans la propriété "Origine source" de la zone de liste. En "colonne liée", tu mets celle qui contient le champ identifiant ton enregistrement. Si tu veux masquer cette colonne il suffit de mettre sa largeur à 0 dans la propriété "Largeur colonnes"

Ensuite le code à placer sur l'évènement click (ou double-click) de la zone de liste ou même encore d'un bouton ressemblerai à quelque chose comme ça :

Code :
DoCmd.OpenForm "F_monFormulaire", acNormal, ,"monID=" & Me.lst_maListe , acFormEdit, acDialog
F_monFormulaire est le formulaire que tu veux ouvrir
monID est le champ identifiant les enregistrements de F_monFormulaire
lst_maListe est le nom du contrôle zone de liste du formulaire principal


AVec cette base tu devrais arriver à ce que tu veux
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 15h44   #5
Invité de passage
 
Inscription : mars 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 23
Points : 0
Points : 0
Bonjour Paidge,

Si j'ai bien compris ce que tu m'as expliqué, je pense qu'un contrôle par liste deroulante (ex:continent) n'est pas possible car il se peut que pour une option de la liste j'optienne plusieurs lignes de données dans le sous formulaire (ex: pays).

En fait le principe serait le même que ce que tu m'as écrit (enfin je pense...) mais en récupérant l'info de la feuille de donnée par la sélection d'une de ces lignes et donc pouvoir ouvrir le formulaire correspondant à une ligne et une seule.

Ce que je pense faisable:

Il faut que je nomme chaque formulaire que je dois appeler (par soit le double clic, soit le bouton, soit les deux) par une partie de l'information contenue dans la ligne sélectionnée.

DoCmd.OpenForm monID & "F_monFormulaire"
avec "monID", l'information récupérée de la ligne et permettant d'ouvrir le formulaire associé...

Est ce une bonne idée?
Si oui, comment puis je récupérer l'information de la ligne de la feuille de donnée?

Mais peut être que c'est ce que tu m'as expliqué et ds ce cas je n'ai pas tout compris...

Merci d'avance
mploki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 15h54   #6
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Soit c'est moi qui n'ait pas compris ton problème, soit c'est toi qui n'a as compris mon explication lol. En tous cas je n'ai pas compris :
Citation:
je pense qu'un contrôle par liste deroulante (ex:continent) n'est pas possible car il se peut que pour une option de la liste j'optienne plusieurs lignes de données dans le sous formulaire (ex: pays).
car je n'ai pas parlé de liste déroulante mais de zone de liste.

Résumons (en tous cas c'est ce que j'aii compris):
Tu as un formulaire avec un une liste déroulante contenant des "packages".
Tu souhaites une fois un "package" sélectionné, que le formulaire t'affiche dans un tableau (pour l'instant un SF en mode une feuille de données mais une zone de liste a le même rendu - voir même mieux ) la liste des enregistrements dont le package correspond à celui choisi.
Ensuite, tu souhaites qu'en cliquant sur un des enregistrements de la liste un 2e formulaire s'ouvre et se cale sur l'enregistrement choisi.

Si c'est cela, ma solution fonctionne

EDIT : tu peux peut-être aussi jeter un oeil sur ce tuto. J'y ai appris pas mal de choses ^^

dernier EDIT : je t'ai joint une base exemple sur laquelle tu peux voir concrètement mon explication
Fichiers attachés
Type de fichier : zip bd1.zip (32,2 Ko, 15 affichages)
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 16h28   #7
Invité de passage
 
Inscription : mars 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 23
Points : 0
Points : 0
J'avais donc pas compris, c'est complétement ce que je veux...

J'ai regardé le tuto (rapidement) et il semblerait qu'une zone de liste soit beaucoup plus adapté, éffectivement...

Peux tu m'aider à la créer, je n'arrive pas à trouver le champ "origine source" et "colonne lié" dans mon sous formulaire? ce dernier étant toujours pour l'instant une feuille de donnée.

Je possède en fait plusieurs listes déroulantes inter-agissant ensemble, est ce que ca risque de poser problème?

Je vais continuer a fouiner ds ton tuto, mais les lignes de code ne me parlent pas beaucoup!

Merci de ton temps
mploki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 16h39   #8
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Citation:
je n'arrive pas à trouver le champ "origine source" et "colonne lié"
Je n'ai pas dit "champ" mais "propriété". Et oui....les mots ont une grande importance en prog mais aussi en informatique générale

Ce sont les propriétés du contrôle. Pour les voir tu fais un click droit sur ton contrôle puis propriétés. L'onglet évènement c'est pour placer du code (ou des macros c'est ptet plus simple pour toi qui n'a jamais fait de VBA) qui s'exécutera lorsque l'évènement va se produire. L'onglet format c'est pour l'apparence du contrôle (tu y trouvera LARGEUR DES COLONNES par exemple). L'onglet Données c'est pour l'accès aux données (c'est notamment là que tu auras les propriétés CONTRÔLE SOURCE - dans le cas d'un contrôle dépendant -, ORIGINE SOURCE, CONTENU et COLONNE LIEE).

En fait je me suis trompé tout à l'heure, c'est la propriété CONTENU dont je parlais tout à l'heure et pas ORIGINE SOURCE

Citation:
Je possède en fait plusieurs listes déroulantes inter-agissant ensemble, est ce que ca risque de poser problème?
A priori non...Tout dépend comment tu as conçu ton formulaire.

NB : pour voir le code VBA, fais ALT+F11
jette un oeil à la base exemple que je t'ai jointe : il n'y a rien de bien compliqué
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 16h43   #9
Membre éclairé
 
Avatar de dok flint
 
Inscription : septembre 2003
Messages : 292
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : septembre 2003
Messages : 292
Points : 378
Points : 378
Bonjour à tous ,
J'ai à proposer une solution relativement simple :
l'hypothèse que le nom de package [nompackage] est le lien avec la table des infos complémentaires
1- tu créer dans ton formulaire un champ indépendant :[N_Package] et tu mets dans la source de données =[sous-formulaire].Formulaire!nompackage
2-tu crée un bouton "Ouvrir un formulaire" et quand il te demande :
"Ouvrir un formulaire et trouver des informations spécifiques à afficher"
tu sélectionne cette option et puis tu sélectionne le champ[N_package ] de ton formulaire et le champ [nompackage] du formulaire à ouvrir.
A+
__________________
Pourquoi faire compliqué quand on peut faire simple
Je suis encore en ACCESS 2003
dok flint est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 16h55   #10
Invité de passage
 
Inscription : mars 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 23
Points : 0
Points : 0
J'avais donc pas compris, c'est complétement ce que je veux...

J'ai regardé le tuto (rapidement) et il semblerait qu'une zone de liste soit beaucoup plus adapté, éffectivement...

Peux tu m'aider à la créer, je n'arrive pas à trouver le champ "origine source" et "colonne lié" dans mon sous formulaire? ce dernier étant toujours pour l'instant une feuille de donnée.

Je possède en fait plusieurs listes déroulantes inter-agissant ensemble, est ce que ca risque de poser problème?

Je vais continuer a fouiner ds ton tuto, mais les lignes de code ne me parlent pas beaucoup!

Merci de ton temps
mploki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2011, 18h10   #11
Invité de passage
 
Inscription : mars 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 23
Points : 0
Points : 0
Merci à tous, en particulier à Paidge

J'ai juste un problème avec mon second formulaire qui s'ouvre mais ne me renvoi pas les information "package", "ID" et "nom"...
Y a-t-il une manip dans les propriétés de la zone de liste que j'aurai manqué?

Encore merci, cest top!
mploki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 00h23   #12
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Bah si ton 2nd formulaire est bien basé sur la table (ou la requête) qui contient les informations que tu désires, il suffit d'y insérer les champs adéquates. Pour cela, dans la barre de menu ACCESS, tu cliques sur Affichage puis tu cliques sur Afficher les champs (un truk du genre, je ne me rappelle plus très bien). En suite tu fais un glisser/coller des champs souhaités sur ton formulaire. Tu le sauvegardes et tu vois le résultat.
Si les champs que tu souhaitent n'apparaissent pas dans la liste il faut revoir la propriété Contrôle source de ton formulaire.
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 09h53   #13
Invité de passage
 
Inscription : mars 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 23
Points : 0
Points : 0
Bonjour

Ok tout fonctionne parfaitement, j'avais fait une faute d'ortographe dans les propriétés du formulaire 2...

J'aimerai savoir si quelqu'un connait la solution pour trier "au fur et à mesure " ma zone de liste, en fonction de mes listes déroulantes .

En fait que lorsqu'aucune de mes listes sont remplies il faudrait que toute la table soit affichée, lorsque que je selectionne ma premiere liste deroulante une premiere partie soit selectionnée et ainsi de suite affiner ma recherche.

Je pense que je n'arrive pas à mettre une condition sur les valeurs par défaut

Merci beaucoup
mploki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 10h05   #14
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Bonjour mplocki.
J'aurais tendance à dire qu'il faille peut-être re-créer un autre topic (mais je ne suis pas modérateur ^^).
Bien sûr que c'est possible. Jette un oeil aux tutoriels

EDIT : je pense que celui-là devrait faire l'affaire
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web