OVH Cloud OVH Cloud

Parcourir

30 réponses
Avatar
Raph
Bonjour =E0 tous,

j'ai une table avec un seul champ et plusieurs=20
enregistrements (mettons table1), et une autre table=20
(table2) avec plusieurs champs et pusieurs enregistrements.

Je voudrais savoir s'il est possible de v=E9rifier si les=20
contenus pr=E9sents dans le champ de la table 1 existent=20
dans n'importe quel champ de la table 2.

En gros, tester si toutes les valeurs dans la table 1 sont=20
des valeurs qui existent quelquepart dans la table2...

Merci d'avance pour vos r=E9ponses

Raph

10 réponses

1 2 3
Avatar
Raymond [mvp]
RE.

tu peux faire :
SELECT table1.Numéro
FROM (table1 LEFT JOIN table2 AS table2_1 ON (table1.Numéro table2_1.Numéro) AND (table1.Numéro = table2_1.Corr_Pays)) LEFT JOIN table2
AS table2_2 ON table1.Numéro = table2_2.Corr_Région
WHERE (((table2_1.Corr_Pays) Is Null) AND ((table2_2.Corr_Région) Is Null));

je n'ai pas testé, ça peut être tout faux comme tout juste;
je pars à 10h jusqu'à 18h, je te laisse le bébé comme on dit. je regarderais
ce soir à 18h si tu as fait du bon travail ! !! !

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Eric" a écrit dans le message de
news:

Raymond,
tu pourrais me faire passer le sql sur un exemple table1(1 champs)
table2(3

champs) car je vois pas comment faire, si tu as 2 minutes ?

Merci
Eric


Avatar
Raymond [mvp]
Je crois qu'on se mélange les pattes.
Si tu contrôle le champ Catégorie d'une table ça veut dire que tu veux
savoir si la valeur contenue dans catégorie est bien une des valeurs
répertoriée dans une autre table. A mon avis ce n'est pas une recherche
n'importe où dans la table. ou alors tu veux contrôler que le champ
catégorie existe dans les 13 autres champs de la table T_Ref_Produits.
Regarde le modèle que j'ai donné à Eric mais faut le faire 13 fois. Je ne
pense pas que ce soit une bonne solution et la structure de ta table avec
les 13 champs m'étonne.
je suis obligé de partir, j'espère qu'Eric pourra discuter avec toi. je
reviens à 18h.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Raph" a écrit dans le message de
news:2881701c463f4$79b854b0$

Salut Raymond,

j'ai ma table de référence (T_Ref_Produits) qui est la
suivante :

15 champs : un champ "Nature" qui contient
nature1,nature2,etc..., un champ "Famille" qui contient
famille1,etc..., puis 13 autres champs.
Donc un produit peut être de nature1, mais de famille2,
etc...

Puis je reçois des tables dans lesquelles j'ai plusieurs
champs, mais je ne veux faire une détection que sur un
seul. Ce champ s'appelle "categorie".

Ce que je veux, c'est tester, quand je reçois ces tables,
si les contenus présents dans le champ "categorie" sont
des contenus qui existent quelquepart (dans n'importe quel
champ) dans ma table "T_Ref_Produits"...

Je sais que c'est un peu "space", mais ça m'aiderait
bien...

Merci beaucoup

Raph
Avatar
Eric
Re Raymond,

Merci pour le sql. J'étais moi aussi absent donc je n'ai pas beaucoup
travaillé ;-)
De plus, l'auteur ne s'est pas manifesté, certainement plus tard dans la
soirée.

J'ai testé sur une table à 8 champs ta proposition - Infernal à écrire ;-).
Pour info, le plus rapide c'est le SQL ou la manipulation d'un tableau en
mémoire du recordset?

Merci encore
Eric



"Raymond [mvp]" écrivait
news:OBGR5a$:

RE.

tu peux faire :
SELECT table1.Numéro
FROM (table1 LEFT JOIN table2 AS table2_1 ON (table1.Numéro > table2_1.Numéro) AND (table1.Numéro = table2_1.Corr_Pays)) LEFT JOIN
table2 AS table2_2 ON table1.Numéro = table2_2.Corr_Région
WHERE (((table2_1.Corr_Pays) Is Null) AND ((table2_2.Corr_Région) Is
Null));

je n'ai pas testé, ça peut être tout faux comme tout juste;
je pars à 10h jusqu'à 18h, je te laisse le bébé comme on dit. je
regarderais ce soir à 18h si tu as fait du bon travail ! !! !



Avatar
Raymond [mvp]
Je ne pense pas que le problème réel soit celui indiqué. A voir.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Eric" a écrit dans le message de
news:
Re Raymond,

Merci pour le sql. J'étais moi aussi absent donc je n'ai pas beaucoup
travaillé ;-)
De plus, l'auteur ne s'est pas manifesté, certainement plus tard dans la
soirée.

J'ai testé sur une table à 8 champs ta proposition - Infernal à écrire
;-).

Pour info, le plus rapide c'est le SQL ou la manipulation d'un tableau en
mémoire du recordset?

Merci encore
Eric


Avatar
Raph
Bonjour Eric et Raymond,

je vous remercie déjà d'avoir cogité à mon pb.

Ensuite, le fait est que ma demande est celle d'un client
qui a une base avec des tables bizarrement mises en
place...

Il m'a demandé comment dans ACCESS tester si des valeurs
présentes dans un champ d 'une table le sont dans
n'importe quel autre champ d'une autre table.

Je lui ai bien parlé de la requête de non correspondance,
mais comme vous l'avez bien dit il faudrait en réaliser
plusieurs à la suite...
Il aurait voulu automatiser un peu.

Son test aurait été du type :
Pour chaque valeur dans un champ d'une table, si cette
valeur n'existe pas quelquepart dans l'autre table alors
il a une alerte...

Je peux pas vous en dire plus, c'est ça sa problématique,
c'est tordu, mais bon... ;o))

Merci de votre aide

Raph
Avatar
Raymond [mvp]
Bonjour.

Certainement tordu oui.
Eric a travaillé sur la requête je pense qu'il va se manifester rapidement
sinon je reprendrai le flambeau.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Raph" a écrit dans le message de
news:2834501c464b5$c2db59f0$

Bonjour Eric et Raymond,

je vous remercie déjà d'avoir cogité à mon pb.

Ensuite, le fait est que ma demande est celle d'un client
qui a une base avec des tables bizarrement mises en
place...

Il m'a demandé comment dans ACCESS tester si des valeurs
présentes dans un champ d 'une table le sont dans
n'importe quel autre champ d'une autre table.

Je lui ai bien parlé de la requête de non correspondance,
mais comme vous l'avez bien dit il faudrait en réaliser
plusieurs à la suite...
Il aurait voulu automatiser un peu.

Son test aurait été du type :
Pour chaque valeur dans un champ d'une table, si cette
valeur n'existe pas quelquepart dans l'autre table alors
il a une alerte...

Je peux pas vous en dire plus, c'est ça sa problématique,
c'est tordu, mais bon... ;o))

Merci de votre aide

Raph
Avatar
Eric
Bonjour Raph,

Je te fais passer une procédure "moulinette" qui permet de vérifier la
présence ou non des valeurs d'un champs d'une table dans n'importe quel
champs d'une autre table. Cette procédure a un argument : le nom de la
table dans laquelle on fait la recherche. A la sortie une msgbox indique
les valeurs non présentes dans la table.
Donc il suffit de relancer la proc pour autant de tables à vérifier,
voire en l'adaptant un peu, automatiser pour n tables.

Dans cet exemple, j'ai supposé que Table1 n'avait qu'un seul champ, c'est
pourquoi j'utilise rs1.Fields(0). Si dans cette table tu as plusieurs
champs, adaptes l'indice - si ton champ categorie est le 4eme, ca donnera
rs1.Fields(3)

Il faut charger la rérérence Microsoft DAO 3.x Object Library

A mettre dans un module standard.
Appel par :
VerifPresence "NomTableAVerifier"
ou
Call VerifPresence("NomTableAVerifier")

Sub VerifPresence(NomTable As String)
' NomTable désigne la table à vérifier
' NomTable contient n champs
Dim bd As DAO.Database, Tableau()
Dim rs1 As DAO.Recordset, rs2 As DAO.Recordset
Dim I As Long, J As Long, K As Long
Dim Rows As Long, Cols As Long
Dim tmpArray, Existe As Boolean
Dim msg As String
Set bd = CurrentDb
' table1 : table dont on veut s'assurer que les valeurs
' d'un champs sont présentes dans l'autre table
Set rs1 = bd.OpenRecordset("Table1") ' table1 - 1 champs
Set rs2 = bd.OpenRecordset(NomTable) ' table2 - n champs
rs2.MoveLast: rs2.MoveFirst
Rows = rs2.RecordCount ' nb d'enregistrements
Cols = rs2.Fields.Count ' nb de champs
tmpArray = rs2.GetRows(Rows) ' on récupère le jeu de table2
rs2.Close
Set rs2 = Nothing
While Not rs1.EOF
Existe = False
For J = 0 To Rows - 1
For I = 0 To Cols - 1
If rs1.Fields(0) = tmpArray(I, J) Then
Existe = True
Exit For
End If
Next I
If Existe Then
'l'élément a été trouvé sur une ligne
'inutile de vérifier sa présence sur les autres
Exit For
End If
Next J
If Not Existe Then
' on stocke l'élément
ReDim Preserve Tableau(K)
Tableau(K) = rs1.Fields(0)
K = K + 1
End If
rs1.MoveNext
Wend
rs1.Close
Set rs1 = Nothing
bd.Close: Set bd = Nothing
' Affichage des éléments non trouvés dans NomTable
msg = "Les éléments suivants sont absents" & vbCrLf
msg = msg & "de la table " & NomTable & vbCrLf
For I = 0 To K - 1
msg = msg & vbTab & " - " & Tableau(I) & vbCrLf
Next I
MsgBox msg, vbInformation
Erase Tableau
End Sub

Voila, si ca peut te dépanner.

A+
Eric


"Raph" écrivait news:2834501c464b5
$c2db59f0$:


Bonjour Eric et Raymond,

je vous remercie déjà d'avoir cogité à mon pb.

Ensuite, le fait est que ma demande est celle d'un client
qui a une base avec des tables bizarrement mises en
place...

Il m'a demandé comment dans ACCESS tester si des valeurs
présentes dans un champ d 'une table le sont dans
n'importe quel autre champ d'une autre table.

Je lui ai bien parlé de la requête de non correspondance,
mais comme vous l'avez bien dit il faudrait en réaliser
plusieurs à la suite...
Il aurait voulu automatiser un peu.

Son test aurait été du type :
Pour chaque valeur dans un champ d'une table, si cette
valeur n'existe pas quelquepart dans l'autre table alors
il a une alerte...

Je peux pas vous en dire plus, c'est ça sa problématique,
c'est tordu, mais bon... ;o))

Merci de votre aide

Raph



Avatar
Eric
"Raymond [mvp]" écrivait
news:#:

Bonjour.

Certainement tordu oui.
Eric a travaillé sur la requête je pense qu'il va se manifester
rapidement sinon je reprendrai le flambeau.



Bonjour Raymond,

Je viens de lui envoyer ma moulinette. C'est une procédure avec pour
argument le nom de la table à vérifier. Ca me parait plus simple que le sql
et plus facile à automatiser pour n tables.

Je vais lui donner un exemple du sql que j'avais fait - figé pour une table
- *en m'inspirant de ton envoi* mais je trouve le code lourd à adapter pour
passer en argument le nom des tables.

Si ma proc ne te parait pas top, n'hésites pas à me le dire.

A+
Eric

Avatar
Eric
Re Raph

Voila un exemple de sql (requête de non-correspondance) pour vérifier
l'existence des valeurs d'un champ de la table1 dans n'importe quel
champs de la table2. Dans cet exemple table2 a 7 champs. Le sql est figé
mais tu dois pouvoir l'adapter dans ton code en passant en variable le
nom de la table2, la table1 étant toujours la même.

SELECT [table1].[champ1]
FROM ((((((table1 LEFT JOIN table2 AS table2_1 ON [table1].[champ1]
=table2_1.chp1) LEFT JOIN table2 AS table2_2 ON [table1].[champ1]=table2_
2.chp2) LEFT JOIN table2 AS table2_3 ON [table1].[champ1]=table2_3.chp3)
LEFT JOIN table2 AS table2_4 ON [table1].[champ1]=table2_4.chp4) LEFT
JOIN table2 AS table2_5 ON [table1].[champ1]=table2_5.chp5) LEFT JOIN
table2 AS table2_6 ON [table1].[champ1]=table2_6.chp6) LEFT JOIN table2
AS table2_7 ON [table1].[champ1]=table2_7.chp7
WHERE (((table2_1.chp1) Is Null) AND ((table2_2.chp2) Is Null) AND
((table2_3.chp3) Is Null) AND ((table2_4.chp4) Is Null) AND ((table2_
5.chp5) Is Null) AND ((table2_6.chp6) Is Null) AND ((table2_7.chp7) Is
Null));

A+
Eric

PS: Largement inspiré de la réponse donnée par Raymond car je n'avais pas
imaginé faire ca comme ça et je ne savais pas qu'il était possible de
faire une recherche de non-correspondance sur plus d'un champ à la fois.



"Raph" écrivait news:2834501c464b5
$c2db59f0$:


Bonjour Eric et Raymond,

je vous remercie déjà d'avoir cogité à mon pb.

Ensuite, le fait est que ma demande est celle d'un client
qui a une base avec des tables bizarrement mises en
place...

Il m'a demandé comment dans ACCESS tester si des valeurs
présentes dans un champ d 'une table le sont dans
n'importe quel autre champ d'une autre table.

Je lui ai bien parlé de la requête de non correspondance,
mais comme vous l'avez bien dit il faudrait en réaliser
plusieurs à la suite...
Il aurait voulu automatiser un peu.

Son test aurait été du type :
Pour chaque valeur dans un champ d'une table, si cette
valeur n'existe pas quelquepart dans l'autre table alors
il a une alerte...

Je peux pas vous en dire plus, c'est ça sa problématique,
c'est tordu, mais bon... ;o))

Merci de votre aide

Raph


Avatar
Raymond [mvp]
tu sais bien que toute procédure qui fonctionne est toujours top. je
regarderai que pour te critiquer. Comme j'ai dit à Jessy, Pierre est en
vacances et j'ai les ordres pour surveiller les jeunots !

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Eric" a écrit dans le message de
news:
"Raymond [mvp]" écrivait
news:#:

Bonjour.

Certainement tordu oui.
Eric a travaillé sur la requête je pense qu'il va se manifester
rapidement sinon je reprendrai le flambeau.



Bonjour Raymond,

Je viens de lui envoyer ma moulinette. C'est une procédure avec pour
argument le nom de la table à vérifier. Ca me parait plus simple que le
sql

et plus facile à automatiser pour n tables.

Je vais lui donner un exemple du sql que j'avais fait - figé pour une
table

- *en m'inspirant de ton envoi* mais je trouve le code lourd à adapter
pour

passer en argument le nom des tables.

Si ma proc ne te parait pas top, n'hésites pas à me le dire.

A+
Eric



1 2 3