IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

recherche dans sous formulaire [AC-2013]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Points : 11
    Points
    11
    Par défaut recherche dans sous formulaire
    Bonjour,

    j'ai un formulaire BL qui contient un sous-formulaire produit. Je souhaite effectuer une recherche de tous les BL contenant un produit.
    Si je fais la recherche sur le formulaire principal, Access ne regarde pas le sous formulaire. Si je fais la recherche sur le sous formulaire, Access ne cherche que dans les données du sous formulaire correspondant au formulaire principal sélectionné.

    pour complexifier un peu la chose,j'aimerai pouvoir effectuer ma recherche uniquement sur une partie des BL (entre 2 dates par exemple ou de 2 n° de BL). et bien sur il faut que la fonction soit utilisable par tous les utilisateurs de la base...


    j’envisage différentes possibilités surement non adaptées :
    > transférer les données dans un fichier excel temporaire pour faire des tris et des filtres, mais la fusion des différentes tables risque d'être périlleuse automatiquement ????
    > faire une macro qui ouvre tous les formulaires (BL) les uns après les autres, effectue la recherche dans le sous formulaire, enregistre le résultat (dans une table ou un fichier excel) passe au formulaire (BL) suivant? mais je ne suis pas bien sur de savoir faire cela proprement!

    Est ce possible ? Comment puis je faire? Comment feriez vous ?

    Merci!
    Séb'

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Les BL sont dans une seule et même table (éventuellement lié à d'autres tables annexes : client, facture...), les produits logiquement dans une table fille. Entre les 2, la liaison se fait au mieux par un ID (N° long) au pire par le N° du BL.

    Si tu souhaites faire une recherche dans des tables tu dois utiliser une requête et rien d'autre. Les transferts dans Excel pour faire des filtres etc, c'est du bricolage, tu vas galérer pour les transferts et l'exploitation du retour.

    Ce que je ferais :

    D'abord une requête contenant les 2 tables lié par le champ prévu à cet effet.
    Je n'afficherai qu'un champ, le N° du BL ou l'ID.
    Dans cette requête je poserai mes filtres :
    produits, période...

    Une fois que ça c'est fait il ne reste qu'à utiliser ce qui est renvoyé (les id ou N°bl) dans la clause Where de l'ouverture du formulaire. Avec l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "monform", , , "ID_BL IN(SELECT ID_BL FROM marequete)"
    L'opérateur logique In() est prévu pour ce genre de chose.
    MaRequete est le nom de la requête après sauvegarde.

    Le plus complexe est de te former à la création de requête via le QBE (générateur de requête d'ACCESS).

    Enfin une fois que ça c'est fait tu pourras toujours penser à améliorer ça en créant une petite IHM pour paramétrer la requête.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Merci loufab de t'être intéressé à mon problème.

    J'ai fait une requête, mis ton code dans la macro de démarrage du formulaire! Nickel...sur le principe!

    En effet j'ai un soucis avec ma requête il s'agit du code SQL issu de ma requête crée depuis le générateur Access)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT t_liaison_BL.id_BL, t_liaison_BL.num_bl AS [N° BL], t_liaison_BL.date_bl AS [date BL], t_liaison_BL_pdt.qtt_pdt_bl AS Quantité, t_accessoires.nom_accessoire AS produit, t_pdt_BL.lot_pdt_bl AS [lot / version], t_liaison_BL_pdt.commentaires
    FROM (t_accessoires INNER JOIN t_pdt_BL ON t_accessoires.id_accessoire = t_pdt_BL.ref_acc_bl) INNER JOIN ((t_liaison_BL INNER JOIN t_liaison_BL_pdt ON t_liaison_BL.id_BL = t_liaison_BL_pdt.ref_BL) INNER JOIN t_liaison_BL_RMA ON t_liaison_BL.id_BL = t_liaison_BL_RMA.ref_BL) ON t_pdt_BL.id_pdt_bl = t_liaison_BL_pdt.ref_pdt_bl
    WHERE (((t_liaison_BL.date_bl)>=[Formulaires]![f_recherche_BL]![date_debut_recherche] And (t_liaison_BL.date_bl)<=[Formulaires]![f_recherche_BL]![date_fin_recherche]) AND ((t_accessoires.nom_accessoire) Like "*" & [Formulaires]![f_recherche_BL]![produit_recherche] & "*") AND ((t_pdt_BL.lot_pdt_bl) Like "*" & [Formulaires]![f_recherche_BL]![lot_recherche] & "*"))
    ORDER BY t_liaison_BL.id_BL;
    Elle ne retrouve que partiellement les données voulues: si par exemple je tape carte il me trouve certaines carte électronique, certaines carte mère pas l'ensemble de chaque item. j'utilise une table pour les produits et je n'ai que un enregistrement carte électronique un enregistrement carte mère...
    Voyez vous une erreur dans ma requête ? j'ai mis les "*" pour que la recherche ne s'arrête pas au mot exacte mais que la chaîne trouvée contienne la chaîne tapée Est ce une erreur ?

    J'ai aussi fait l'essai en supprimant le filtrage par date et le résultat est le même...
    Avez vous des idées ?

    Merci
    Séb'

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    La plupart du temps, quand tu as un problème d'affichage de TOUTES les données dans une requête avec plusieurs tables, il faut manipuler les types de jointures entre les tables. En regardant ta requête, a priori, les jointures entre tes tables sont des jointures simples et cela n'affiche que quand il y a exactement les mêmes données dans les 2 tables. Il faut selon, soit mettre une jointure gauche (LEFT JOIN), soit une jointure droite (RIGHT JOIN) en lieu et place des INNER JOIN.
    Pour cela, dans le QBE (mode éditeur des requêtes d'Access), tu sélectionnes la ligne qui relie les 2 tables et double-clique dessus. Tu auras une boîte de dialogue où tu peux choisir le type de jointure (il faut bien lire l'un des 3 choix par contre.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Merci madefemere, j'ai pu résoudre mon problème avec un "left" à la place d'un des "inner". ce qui m'a permis de me rendre compte que j'appelais une table inutilement et donc d'éclaircir ma requete!

    Merci à vous deux!
    Séb'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Afficher recherche dans sous formulaire
    Par tsuki95 dans le forum VBA Access
    Réponses: 1
    Dernier message: 01/02/2011, 17h11
  2. [AC-2007] Recherche dans sous-formulaires
    Par brg2009 dans le forum IHM
    Réponses: 2
    Dernier message: 30/05/2009, 10h34
  3. rechercher dans sous formulaire selon 1 critère
    Par cilcemax dans le forum IHM
    Réponses: 2
    Dernier message: 05/02/2008, 18h05
  4. Recherche dans sous-formulaire
    Par Junior_jef dans le forum IHM
    Réponses: 2
    Dernier message: 27/06/2007, 09h14
  5. Recherche dans sous formulaires
    Par dfournier dans le forum IHM
    Réponses: 5
    Dernier message: 08/12/2005, 17h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo