{Access} Besoin d'aide formulaire Access et recher

Fermé
gabriellemm Messages postés 1 Date d'inscription jeudi 9 juillet 2009 Statut Membre Dernière intervention 9 juillet 2009 - 9 juil. 2009 à 18:11
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 - 13 juil. 2009 à 21:46
Bonjour, je fais une base de donnée sur accès. C’est une base de données des fournisseurs dans le domaine de l’aviation. Pour chaque enregistrement du formulaire, il y a un entré qui correspond à un fournisseur d’avion (avec ses coordonnées ainsi que les appareils que la compagnie possède). Voilà ce que je voudrait : J’ai fait un nouveau formulaire dans lequel je peux tout simplement taper le nom d’un fournisseur (avec l’outil zone de liste) et il apparaît. Je clique ensuite sur mon petit bouton et le formulaire s’ouvre.
Le problème est que, lorsqu’on recherche une information, on ne cherche pas par nom de fournisseur mais nous avons plutôt besoin de savoir qui possède les appareils dont nous avons besoin.
Je voudrait donc pouvoir taper le nom d’un appareil et que les formulaires des fournisseurs correspondant apparaissent.
Pour ceux qui peuvent voir l’image, ce que je veux c’est un champ de recherche qui va chercher a travers tous les champs aircraft model de tous les enregistrements. Je suis capable pour le nom du fournisseur, mais pour le model d’avion je n’y arrive pas puisque il y a plusieurs champs par enregistrement.

Merci de m'aider!!!!

12 réponses

zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
9 juil. 2009 à 22:19
Bonsoir, si je comprends bien, tu as un champ qui comporte plusieurs données...

Si tel est le cas, tu devrais ajouter une table.

Sinon, il est possible de faire des recherches sur une partie de champ avec un critère du type:

Comme "*"&TexteARechercher&"*"

Où TexteARechercher peut être la valeur d'un champ indépendant, par exemple, la procédure s'exécutant AprèsMAJ de ce dernier, ou un input box...
0
Merci pour l’aide, je vais expliquer plus en profondeur comment le tout est fait. Mon formulaire est fait de cette manière : J’ai fait les champs suivant; Aircraft Model 1, Taux horaire 1, Nombre d’heure minimum 1, Aircraft Model 2, Taux horaire 2, Nombre d’heure minimum 2 et ainsi de suite jusqu'à aircraft model 6. J’ai une colonne avec tous les aircraft model, une colonne avec tous les taux horaire et une colonne avec tous les nombres d’heure minimum. Je suis capable de créer un formulaire ou je peux rechercher par exemple dans la case Aircraft Model 1 de tous les enregistrement. Mais ce que je veux c’est pouvoir chercher à travers Aircraft Model 1-2-3-4-5-6 parmis chaque enregistrement. (afin d’avoir les enregistrements qui comprennent ce modèle dans un des champs Aircraft Model) Je dois aussi mentionner que je suis débutante dans ce logiciel donc les explications doivent être détaillées! (S’il y en a pour mon problème!!
Merci!
0
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112
10 juil. 2009 à 08:48
Bonjour gabriellemm,


Voila le code qui remédie à votre difficulté. Il établit une relation entre le formulaire appelant et le formulaire appelé.
Les enregistrement du formulaire appelé qui répondent à la condition : [Ref_n1]=[Ref_n2] sont affichés.
Je préconise de créer cette commande dans un bouton sur le formulaire d'appel.

Dim StDocName As String
Dim StLinkCriteriA As String

StDocName = "<Formulaire à ouvrir>"

StLinkCriteriA = "[<Ref_n1>]=" & Me![<Ref_n2>]
DoCmd.OpenForm StDocName, , , StLinkCriteriA

Cordialement
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
10 juil. 2009 à 21:33
Bonsoir tous les 2...

gabriellemm, si je comprends bien, tous tes enregistrements sont repris dans une seule table.

Je ne vois pas pourquoi tu dois créer des champs reprenant les mêmes données pour chaque avion.

Un seul champ des différents enregistrements peut contenir toutes les données similaires

Alors, une requête simple peut facilement extraire les données.

En résumé, on a un tableau
Chaque ligne correspond à un avion défini et les différentes colonnes reprennent les valeurs des différentes données nécessaires.

S'il y a des données plus globales (p.ex un fabricant peut fabriquer plusieurs modèles, ou une sous-traitant peut fournir des pièces pour différents appareils de différents fabriquants) il faut les regrouper dans des tables distinctes pour faciliter l'extraction des données et éviter les répétitions.

Désolé si j'ai mal compris ta structure (j'ai interprété le mot "formulaire" comme "table")...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour et un gros merci à vous 2 pour votre temps
Parcontre, je ne suis pas sure de comprendre!!! Pour ce qui est des codes, je ne comprends pas du tout ce que je dois en faire..J’écris ça où?? :S Et Zénon..comme tu dis à la fin chaque fabriquant à plusieurs modèles.. Lorsque je dis un formulaire c’est que nous entrons nos info sur ces formulaires. Mais puisque tous mes modèle pour chaque fournisseur sont dans des champs différents sur une même entrée dans ma table; est ce que ca veut dire que je dois créer des sous table pour chaque entrée (chaque fournisseur)
Ça serait très apprécié si l’un de vous 2 pouvait me donner plus de précisions sur ces explications… je ne suis pas à l’aise avec les requêtes encore et pour ce qui est des codes…vous me perdez complètement!! Désolé… J’espere que vous aurez la patience de m’aider!!
Merci encore!
0
Bonjour à nouveau!
Afin de résoudre mon problème, j’ai tenté de séparer le tout en 2 tables disctinctes
Voilà ce que j’ai essayé de faire : créer une base de données uniquement avec les fournisseurs (adresse, contact etc.) ainsi qu’une base de données uniquement avec les appareils disponibles.
Voulant que ces deux tables soit en relation avec le no. de référence du fournisseur, jai mit des numéros automatiques. Par compte pour un seul numéro, j’entre un fournisseur, mais dans ma table pour les appareils, je dois entrer plus qu’une entrée correspondant à un même numéro…Puisqu’évidemment, il y a plus d’un appareil par fournisseur. Mais les no. ce mettent automatiquement et je ne peux pas mettre plusieurs appareils avec le no de référence 1 par exemple pour que tous ces appareils ce jumèlent avec le fournisseur no.1
Ouf....c'est compliqué!
Merci de votre aide!!
0
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112
11 juil. 2009 à 18:34
gabriellemm,

Vous avez donc créé 2 tables distinctes.

J'imagine qu'un fournisseur est susceptible de fournir une gamme d'appareils ?
Dans ce cas, le fournisseur doit apparaître plusieurs fois dans la table fournisseurs ; c.à.d autant de fois qu'il fournit un appareil différent.
Ainsi, dans la simplification si dessous, on voit que le fournisseur_01 doit figurer 3 fois dans la liste des fournisseurs.
Sous les références : Réf_01, Réf_02, Réf_03

Réf_01 Fournisseur_01 -> Appareil_01
Réf_02 Fournisseur_01 -> Appareil_02
Réf_03 Fournisseur_01 -> Appareil_03



Mais avant de poursuivre, je suggère d'attendre que Zenon donne son point de vue à ce sujet ... Il maîtrise la structure des tables, ce qui n'est pas mon cas.
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
12 juil. 2009 à 14:25
Maîtriser... bon, il ne faut pas exagérer mais un peu de logique peut aider.

D'abord, pour ne pas mélanger les notions, les données sont stockées dans des Tables. Les formulaires ne son qu'un moyen de les afficher. Toute la réflexion quant à la structure doit se faire sur les tables.

Il ne faut pas se soucier que les données ne soient pas reprises "en clair" sur ces dernières. On peut toujours extraire les données avec de requêtes simples (faites avec l'assistant).

Il ne faut pas hésiter à créer autant de tables que nécessaire avec deux idées simples:

Tout ce qui peut être groupé pour un et un seul élément va dans la même table.
Toutes les données redondantes qui se repètent dans une même table vont dans une nouvelle table.

Par exemple, pour un avion, on a ce qui concerne le fournisseur (qui fournit plusieurs avions), ce qui concerne l'entretien (un même atelier peut entretenir plusieurs avions de différents fournisseurs) et ce qui concerne l'avion lui-même (nombre d'heures de vol...).

Dans l'exemple ci-dessus, on pourrait créer des tables:

T_Constructeurs (N°Constructeur,NomConstructeur,Adresse,...)
T_Avions (N°Avion(N°Auto), N°Constructeur (clé externe),Immatriculation,AnnéeConstruction,...-

Si tu ouvres la table Avions, tu te diras que ça ne sert à rien puisque dans le champ constructeur tu n'as que de N° qui ne te disent rien mais le nom peut être "extrait par une requête.

Si on veut savoir par qui et quand l'entretien de cet appareil a été réalisé ou quel est son fournisseur, par exemple, il suffit de créer les requêtes correspondantes.
Pour cela on doit lier les tables.

P. ex, la table "Avions" aura une clé primaire (qui peut-être son N°de série ou son N°d'immatriculation, mais il vaut mieux à mon avis créer un N°Auto), mais aussi une "clé externe" qui fait référence à la clé primaire de la table contructeurs (elle doit être de type numérique, la clé externe, pas la clé primaire qui peut être numérique ou N°Auto)...

Si tu veux obtenir la liste des avions fabriqués par Untel, il suffit de créer une requête en mode graphique en ajoutant les tables "Constructeurs" et "avions" (liées par une relation un à plusieurs), de sélectionner les champs NomConstructeur dans la table constructeurs et les champs que tu souhaites dans l'autre en ajoutant le nom du constructeur souhaité dans la ligne "critères", éventuellement avec des alias "*" pour ne pas devoir taper le mon complet.

Après on peut évidemment perfectionner l'affichage en fondant des listes ou un sous-formulaire sur le même type de requête, mais c'est une autre histoire...

Bon amusement!
0
Bonjour Zenon
Bon, si je comprends bien; je fais 2 tables.
1-Table Fournisseur (No. Auto (clé primaire), Nom, adresse, etc)
2-Table Avions (No.Auto + clé externe numérique en lien avec la clé primaire de la table 1, et autres infos)
À la fin de votre message, vous dites; si tu veux obtenir la liste des avions fabriqués par Untel. En fait c’est le contraire; je veux inscrire un nom d’appareil (Ex; Cessna 185) et voir tous les fournisseurs qui offrent ce modèle (puisqu’il peut y en avoir plusieurs). Est ce que ça fonctionnerait quand même?
Si oui, je ne comprends pas comment les données peuvent se mettrent en relation.. c’est avec la clé externe? Dans ma table Avion, pour un appareil qui est offert par plusieurs fournisseurs, comment j’indique qu’il correspond à plusieurs entrées de la table 1…
Désolé pour toutes ces questions!! Mais l’aide est plus qu’apprécié et j’aimerais vraiment venir à bout de ce projet!!
Merci!!!
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
12 juil. 2009 à 17:48
Oui, cela fonctionnera, mais par rapport à l'exemple donné, ce sera le contraire:

UN avion a PLUSIEURS founisseurs, donc, dans la relation, c'est la table avion dont tu dois utiliser la clé primaire pour établir la liaison avec la table fournisseurs.

Tu dois donc modifier la structure des tables:

T_Avions (N°Avion, N°Founisseur,...)
T_Fournisseurs (N°Fournisseur, ...)

En somme c'est l'inverse mais ça ne t'empêche pas d'avoir aussi une table fabricants...
Le problème se pose si les fournisseurs sont aussi des fabricants (et si tu dois disposer des deux données) parce qu'il est impossible d'avoir une double liaison avec une table...
0
Bonjour!! Merci tout fonctionne!!
Lorsque je fais la requête pour trouver quel fournisseur possède un type d’appareil, je tape le type d’appareil dans ma requête (dans modifier) et ensuite je le re-ouvre et ça affiche l’info que j’ai besoin (les fournisseurs qui ont cet appareil). Y a t-il un moyen moins compliqué et plus direct pour afficher et obtenir mon info lors de ma requête.. (au lieu de tout le temps allé dans modifier et ensuite ré-ouvrir, etc)??
Aussi j’ai un autre petit problème à résoudre…
Pour chaque transporteur, nous faisons des mises à jours une fois par année (mise à jour des info de contact ainsi que des appareils disponibles etc..) Y aurait t-il un moyen d’envoyer à chaque fournisseur par courriel (que ce soit un formulaire ou bien un état) les infos de ce même fournisseur.
Un fournisseur ne doit pas avoir accès aux informations concernant un autre fournisseur. Il faut donc envoyer (pour chaque fournisseur) un état de ses propres infos et aucune autre.
Peut importe le moyen..J’aimerais bien que ça fonctionne!
Merci 1000 fois
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
13 juil. 2009 à 21:46
Bonsoir,

oui, bien sûr c'est possible.

Difficile de t'expliquer sans connaître la structure de ton (tes) formulaires: il y a de nombreux moyens...

Par exemple:

imagine une liste déroulante fondée sur ta requête. Il suffit que, en mode création, dans les propriétés de la liste, sous l'onglet données/source, tu cliques sur les trois points à droite puis que tu ajoutes en critère dans la colonne NomFournisseur: = RechercheTexte&"*"

Ensuite, tu crées un champ texte indépendant dans la même portion du formulaire (l'en-tête) et, à nouveau dans les propriétés du champ, sous l'onglet événement,AprèsMaj, en cliquant sur les trois points à droite, choisis : procédure événementielle.

Là, entre Sub et End Sub,
tapes:
NomDeTaListe.Requery

et hop, ta liste est mise à jour en fonction des infos encodées dans le champ.
ensuite, tu peux déterminer ce qui se passe en cliquant dans la liste, mais c'est une autre histoire.

On peut aussi simplement filtrer le formulaire avec une liste déroulante:

Tu crées une requête reprenant les infos dont tu as besoin et tu l'utilises pour créer un formulaire.
Dans la section en-tête, avec l'assistant ("baquette magique" dans la boite à outils sélectionnée), tu ajoutes une liste déroulante.

Dans la première boite de dialogue, choisis: je veux qu'access recherche un enregistrement, puis choisis les champs que tu veux utiliser en incorporant la clé primaire en premier. Le reste est automatique...

Pour la deuxième question, là aussi difficile de t'expliquer comment faire sans connaître ta structure.
Les états se construisent un peu comme des formulaires.
Tu auras besoin d'un état principal reprenant les données propres au fournisseur puis d'un ou de plusieurs sous-états reprenant les données des différents appareils.
Essaie avec les assistants, ça fonctionne généralement bien.
Là aussi, le plus simple est de créer une requête pour commencer en regroupant les champs nécessaires des différentes tables, de créer un état avec l'assistant en se basant sur cette dernière, et Access te proposera plusieurs solutions de présentation et de tri. Si ça ne convient pas, on jette et on recommence...
0