Access comp° champ / valeurs dattributs table [Résolu/Fermé]

Signaler
Messages postés
48
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
27 juillet 2009
-
 ankatsoun -
Bonjour,

Je recherche le moyen de comparer un champ avec toutes les valeurs d'une table.
En gros, je veux faire une condition qui dit : si la valeur de mon champ est dans le résultat d'une requete (un seul attribut), alors blablabla

J'ai vu la 'fonction' DLookup qui pouvait être utilisée mais elle prend la première valeur de la table, Donc ma question est :
Peux on utliser DLookup dans une boucle qui permettrait de tester avec toutes les valeurs (au fur et à mesure du parcours de la boucle) si la valeur de mon champ est dans la colonne de ma table.

Il doit avoir un autre moyen dans le genre avec une boucle While ou for ... mais erf, j'y arrive pas.j'ai dejà tenté quelques boucles et ca n'a rien donné

Merci d'avance.

20 réponses

Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 166
Salut,

Si j'ai bien compris tu veux vérifier si une donnée saisie dans un champ existe dans une table ?
Messages postés
48
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
27 juillet 2009
4
oui, exactement
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 166
Peux tu coller ton code ici, stp
Messages postés
48
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
27 juillet 2009
4
Private Sub Véhicule_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim varX As Variant
varX = DLookup("[id_ Véhicules]", "[VehiculeAntoine]", "[plus_fabriqué]= True")
MsgBox varX


If (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule] = varX) Then
MsgBox "condition 1 ok"
End If

If (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![iCoefVehicule].Value <> "") Then
MsgBox "condition 2 ok"
End If

If (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule].Value = "") And (Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![iCoefVehicule].Value <> "") Then
MsgBox "condition 1 & 2 ok"
'Forms![Form Modification des Lignes]!Commande234.SetFocus
'Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule].Enabled = False

'MsgBox "Attention, véhicule masqué car plus fabriqué, pas de modification possible"
End If


End Sub
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 166
Tu travailles directement dans la table ? sans passer par une requête SQL ?

Il est préférable de passer par une requête SELECT et ensuite tester le recordset ...

SELECT * FROM maTable WHERE champDeMaTable = variableAtester
Messages postés
48
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
27 juillet 2009
4
voici ma requête :

Select VA.[id_ Véhicules]
FROM [Association Fiche caisse] AFC, VehiculeAntoine VA
WHERE AFC.id_véhiculeOpep = VA.[id_ Véhicules]
AND VA.plus_fabriqué= True;

Mai voila, j'ai pas réussi à l'utiliser correctement dans le code....
Messages postés
48
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
27 juillet 2009
4
Dim varX As Variant
Dim base As Database
Dim rs As Recordset
Dim requete As String
requete = "Select VA.[id_ Véhicules] FROM [Association Fiche caisse] AFC, VehiculeAntoine VA WHERE AFC.id_véhiculeOpep = VA.[id_ Véhicules] AND VA.plus_fabriqué= True;"
Set base = CurrentDb
Set rs = base.OpenRecordset(requete, dbDynaset)

rep = rs![id_véhicule]
MsgBox rep

Si je code ca, ca marche pas, je vois pas pourquoi! vous voyez vous?
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 166
il y a t il un message d'erreur ?
Avez vous des points d'arret pour tester les variables ?
Messages postés
48
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
27 juillet 2009
4
Erreur d'exécution '3001':

Argument non valide.
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 166
dsl de répondre si tard mais j'étais occupé:

Voilà ce que j'ai trouvé sur l'erreur 3001 sur le site : https://support.microsoft.com/fr-fr/help/202955

Symptômes
Vous filtrez quand un jeu d'enregistrements pour un champ caractère qui contient plus de un guillemet simple par exemple CompanyName = Pub d'O'Riley l'un des messages d'erreur suivants s'affiche :
Erreur d'exécution "3001" Arguments ne sont pas le bon type, sont hors des limites acceptables ou sont en conflit avec la une d'autre.
-ou--
Erreur d'exécution "-2147024809 (80070057)" : le paramètre est incorrect.

Il y a peut être un champ avec un guillemet simple ...
Mmm ok, je vois. J'vais jetter un coup d'oeil sur la table. J'te r'mercie.
pas sur la table.... sur les champs plutot
Messages postés
48
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
27 juillet 2009
4
Re
je suis à la recherche d'un nouveau moyen me permettant d'aboutir et je tombe sur un problème :

J'ai un champs (une liste déroulante en fait, mais qui ne me sert que pour le rajout de nouveau élément...). Ce champ possédant une source controle, soit : id_véhiculeOpep (mais bon, peu importe le non), avec une origine source : Table/Requête et un contenu :

SELECT DISTINCTROW VehiculeAntoine.[id_ Véhicules], VehiculeAntoine.cNomVéhicule FROM VehiculeAntoine WHERE VehiculeAntoine.plus_fabriqué=False ORDER BY VehiculeAntoine.cNomVéhicule;

Mon problème est celui ci : POURQUOI, quand VéhiculeAntoine.plus_fabriqué=False ( la case de la liste étant donc vide), SI je demande d'afficher la valeur du champ (case), et bien, il me donne un résultat non vide (qui n'est ni plus que id_véhiculeOpep??????

(affichage : MsgBox Forms![Form Modification des Lignes]![SF Association Fiche Caisse]![Véhicule].Value )

Ou alors, COMMENT puis-je faire pour que, quand VéhiculeAntoine.plus_fabriqué=False, alors ma case est entièrement vide, SANS valeur!!??????

Merci pour l'attention portée.
Messages postés
48
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
27 juillet 2009
4
Bon, je viens de voir que le problème venait directement de la table :
elle possède une colonne dans la quelle, en affichant, je vois une chaine de type XXX-YYY-(...) alors que finalement, quand je fais dse tests dessus ( exemple, choix des lignes dont l'attributs commence par 'X' ca marche pas(pourtant yen a) mais la même chose avec '1' ca marche(pourtant yen a pas de visible, la table doit être une liaison ou dans ce genre là, j'ai du mal à suivre, d'autant que toute la base n'a pas été développé par ma personne), il s'avère qu'il y a des valeurs derrières (autre attribut d'une autre table), heu, j'suis perdu là, quelqu'un pourrez m'expliquer un peu?
Messages postés
48
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
27 juillet 2009
4
Passons, il faudrait juste que je sache comment, à partir d'une requête comment tester si un champ est égal à une des valeurs d'un attribut dans la table!
Quelqu'un aurrait un petit exemple à me montrer?
Messages postés
48
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
27 juillet 2009
4
Dim truc As Integer

Dim rep As String
Dim varX As Variant
Dim base As Database
Dim RS As Recordset
Dim requete As String
requete = "Select VA.[id_ Véhicules] FROM [Association Fiche caisse] AFC, VehiculeAntoine VA WHERE AFC.id_véhiculeOpep = VA.[id_ Véhicules]; "
Set base = CurrentDb
Set RS = base.OpenRecordset(requete, dbOpenDynaset)

RS.MoveLast
truc = RS.RecordCount
RS.MoveFirst

For cpt = 0 To 5 'RS.RecordCount - 1
MsgBox RS(cpt)
''''RS.MoveNext

Next cpt


Quand j'effectue cette boucle, il m'affiche la première valeur avant d'aboutir à une erreur du type : '3265, élément non trouvé dans cette collection'.
Une idée sur mon problème?
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 166
Bonjour

C'est normal ta boucle : For cpt = 0 to 5 ... 1) la syntaxe n'est pas bonne : RS.Fields(cpt) ... 2) Tu n'as qu'un champ dans ta requête donc tu lis bien le champ(0) mais le champ(1) n'existant pas, le programme lève une exception.

Pour lire le recordset il faut une boucle type while ...
...
While Not RS.EOF
MsgBox RS.Fields(0).Value
Wend
...

D'autre part :

// RS.MoveLast 'Inutile pour l'instruction suivante
truc = RS.RecordCount
// RS.MoveFirst 'Doit être placer placer juste après l'envoie de la requête pour se placer sur le premier enregistrement.


Bon courage

;o)

Polux
Messages postés
48
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
27 juillet 2009
4
c'est bon, ca marche , et parfaitement en plus! merci
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 166
De rien, c'est avec plaisir ...

;o)

Polux
Bjr à tous,

je n'arrive pa à afficher la valeur (contenue dans une autre table access) correspondante à celle saisie par l'utilisateur; en fait je veux utiliser l'événement "sur perte focus" du champ précédent et la valeur correspondante à celle saisie sera affichée dans le prochain champs
il y a évidemment liaison entre les tables
comment procéder?