|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 23 ![]() |
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 |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : novembre 2006 Messages : 2 200 ![]() |
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 |
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 23 ![]() |
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 |
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() |
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 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 |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 23 ![]() |
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 |
|
|
00
|
|
|
#6 | |
|
Membre éclairé
![]() |
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:
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 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 |
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 23 ![]() |
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 |
|
|
00
|
|
|
#8 | ||
|
Membre éclairé
![]() |
Citation:
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:
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é |
||
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Inscription : septembre 2003 Messages : 292 ![]() |
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
|
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 23 ![]() |
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 |
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 23 ![]() |
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! |
|
|
00
|
|
|
#12 |
|
Membre éclairé
![]() |
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. |
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 23 ![]() |
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 |
|
|
00
|
|
|
#14 |
|
Membre éclairé
![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com