Salut les développeurs
Je suis sur un projet AC/VBA qui concerne une gestion de parc informatique :
Ma table principale, TBL_MATERIEL, comporte un certain nombre de champs dont 5 vont piocher des valeurs dans des tables-listes : TBL_CATEGORIE, TBL_SITE, TBL_AGENT, TBL_SITUATION, TBL_REGIME, chacune construite sur le même modèle : par exemple, TBL_SITE comprend 2 champ : ID_SITE et SITE (le libellé).
J'ai (trop ?) souvent eu recours à des dlookup ou encore des requêtes pleine de jointures (fastidieux avec les réglages de colonnes de la zone de liste, etc.) pour chercher la valeur du libellé dans une table en fonction de la clé étrangère récupérée dans la table principale.
J'ai voulu tenter quelque chose de nouveau, avec des noms très logiques et normés comme décrit plus haut : faire une petite fonction pour mes requêtes.
Exemple concret avec un formulaire-moteur de recherche multicritère "cafeine-like", vous savez, celui qui récupère les résultats dans une zone de liste... Et évidemment, je n'aime pas lire les clés brutes dans un tableau sans avoir la correspondance derrière.
Alors avec une petite fonction dans la requête de type
SELECT ID_MAT, ChercheValeurDe(ID_SITE,"SITE"), ce serait pas mal :
Voilà ce que ça donne :
Alors déjà, je suis obligé de mettre valeur + 1 le code soustrait 1 à la valeur du champ ID_CATEGORIE... D'où ça vient ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Public Function ChercheValeurDe(valeur, nom) As String 'valeur est le nom du champ requeté; nom est le param envoyé à la fonction 'pour construire dynamiquement le dlookup 'en SQL : SELECT ID_MAT, ChercheValeurDe(ID_CATEGORIE,"CATEGORIE") FROM 'TBL_MATERIEL WHERE ID_MAT < 10; Dim sChamp As String Dim sTable As String Dim sCritere As String sChamp = nom sTable = "TBL_" & nom sCritere = "ID_" & nom & "=" & valeur + 1 ChercheValeurDe= DLookup(sChamp, sTable, sCritere) 'Debug.Print ChercheValeurDe End Function
Et peut être qu'il y a encore un truc plus simple qui m'échappe (sachant que dans la table générale, je remplis avec des listes déroulantes sur les tables listes...)
Si quelqu'un peut m'éclairer, 1000 mercis
___
Edit 12.16 -> requete avec jointures pour le rowsource de la liste :
La aussi j'ai un décalage de 1 !!! Ma base est corrompue ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SQL = _ "SELECT TBL_MATERIEL.ID_MAT, TBL_CATEGORIE.CATEGORIE AS TYPE, TBL_MATERIEL.LIB_MAT AS LIBELLE, TBL_MATERIEL.ANNEE_ACQ AS ANNEE, " & _ "Round(TBL_MATERIEL.VAL_NEUF_TTC,2) AS VALEURTTC, TBL_REGIME.REGIME AS REGIME, TBL_SITUATION.SITUATION AS SITUATION, TBL_SITE.SITE AS SITE " & _ "FROM ((((TBL_MATERIEL LEFT JOIN TBL_CATEGORIE ON TBL_MATERIEL.ID_CATEGORIE = TBL_CATEGORIE.ID_CATEGORIE) LEFT JOIN TBL_AGENT ON " & _ "TBL_MATERIEL.ID_AGENT = TBL_AGENT.ID_AGENT) LEFT JOIN TBL_REGIME ON TBL_MATERIEL.ID_REGIME = TBL_REGIME.ID_REGIME) LEFT JOIN TBL_SITE ON " & _ "TBL_MATERIEL.ID_SITE = TBL_SITE.ID_SITE) LEFT JOIN TBL_SITUATION ON TBL_MATERIEL.ID_SITUATION = TBL_SITUATION.ID_SITUATION;"
___
Guillaume
Partager