Access 2007 - ajout de données

Novice -  
Gaunts Messages postés 1125 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je ne sais pas comment éditer une table de données sous Access 2007 de la manière suivante:

J'ai une table listant des objets, contenant une colonne "nom", et une colonne "catégorie". Cette colonne est remplie pour les objets des catégories A,B,C et D, mais pas E et F.
J'ai une autre table listant les objets de la catégorie E, et encore une autre pour ceux de la catégorie F.
Comment faire pour compléter la colonne "catégorie" de la première table? Je ne veux pas créer une nouvelle colonne, mais juste remplir les trous de celle qui existe déjà.

Merci infiniment si vous pouvez m'aider!!!



A voir également:

5 réponses

Gaunts Messages postés 1125 Date d'inscription   Statut Membre Dernière intervention   116
 
Bonjour,

Il faut que tu créées une requête qui va combiner les trois tables.
Pour cela dans ta requête, dans ton champ catégories, tu entres une condition qui dira : Si le champ catégorie de la table 1 n'est pas vide, alors on l'affiche, sinon on affiche le champ catégorie de la table 2, et de même pour celui de la table 3.
Si tu ne sais pas comment faire, pose tes questions et je te guiderai.
0
Novice
 
En effet c'est ce que je veux faire, mais je ne sais pas comment créer de conditions.
Pourrais-tu me guider un peu plus en détail??
Merci!
0
Gaunts Messages postés 1125 Date d'inscription   Statut Membre Dernière intervention   116
 
Tu dois commencer par creer une requête, dans laquelle tu importes tes 3 tables. Tu devras ensuite lier ces tables grâce au champ qu'elles ont en commun, c'est à dire "nom" (pour faire ça, tire simplement un trait entre les tables).
Puis dans ta requête, affiche biensur la colonne nom, et une autre colonne appelée "catégorie".
Ici tu vas devoir utiliser une formulle qui vérifiera les conditions dont je t'ai parlé.
Pour ça tu utiliseras la fonction VraiFaux, sa syntaxe est la suivante:
VraiFaux(condition à verifier; action à effectuer si la condition est vraie; action à effectuer si la condition est fausse)
0
Novice
 
Merci Gaunts! Voilà où j'en suis:
J'ai créé ma requête et lié les tables. J'affiche la colonne nom. Pour la colonne catégorie j'ai entré:
Champ : Catégorie
Critère : VraiFaux (List_products.Categorie=""; VraiFaux (CategorieE???????; "E"; VraiFaux (CatégorieF ???????????? ; "F"; "") ; List_product.Categorie)
Ce qui veut dire :
- Condition : si la case de la colonne categorie est vide;
- Alors : il faut qu'il cherche dans la première liste, et si oui mettre la valeur E, sinon aller chercher dans la deuxième liste, et si oui mettre la valeur F, sinon mettre rien ;
- Sinon (si la case initiale n'est pas vide), je la copie (A, B, C ou D).

La formule est bien à mettre dans la colonne critère?
Et comment je peux lui demander de chercher que la valeur est dans les autres listes (partie ??????????)

Merci infiniment...
0
Gaunts Messages postés 1125 Date d'inscription   Statut Membre Dernière intervention   116
 
Oui ta formule est juste, il manque juste une parenthèse fermante. Ensuite pour les critères de E et F, refait la même chose que là:
List_products.Categorie="";
en remplaçant List_products par le nom des tables E et F.
Si tu vérifies si E et F sont vides, il faudra juste inverser l'ordre des actions.
Tu rencontreras peut être un problême qui viendra du fait qu'un champ vide ne vaut pas forcément: "", si ça ne marche toujours pas donne moi ta formule qu'on modifiera, et si ça marche, bah tant mieux :)
0
Novice
 
Ma formule marche quand il y a déjà une catégorie d'entrée (A B C D), donc la partie "sinon" fonctionne.
Mais il ne me donne rien quand il faut ajouter E ou F. J'ai l'impression qu'il ne comprend pas où chercher quand je mets juste [List_Product_F] dans le deuxième VraiFaux.

Ma formule est la suivante :

Category: VraiFaux([List_products.Categorie]="",VraiFaux([List_Product_E]="",VraiFaux([List_product_F]="","","F"),"E"),[List_of_ports].[Cluster])

De plus quand je vais tourner la requête, il me demande une valeur pour List_product_E et List_product_F, à quoi est-ce que cela correspond?
Merci!
0
Gaunts Messages postés 1125 Date d'inscription   Statut Membre Dernière intervention   116
 
Oui il y a une erreur, tu inclues la table [List_Product_E], mais pas son champ! Il faut mettre [List_Product_E].[Categorie], pareil avec F, et pareil avec List_Products.
A quoi correspond [List_of_ports].[Cluster] ? C'est pas [List_products].[Categorie] que tu veux afficher?
0
Novice
 
Oui pardon, faute lors de la copie, c'est bien [List_products].[Categorie] à la fin.

Dans ma table [List_Product_E] je n'ai pas de champ disant la catégorie, c'est juste le fait que le produit soit dans la table qui me permet de dire de quelle catégorie il fait parti. Et c'est là où je ne sait pas comment le coder. Est-ce que ça ne devrait pas être le lien qui fasse ça?
Peut-être que je m'y prend mal, et qu'il faudrait une fonction qui vérifie juste si un lien existe avec la table [List_Product_E], dans quel cas il le classerait en catégorie E. Tu sais si ça existe comme fonction?
0
Gaunts Messages postés 1125 Date d'inscription   Statut Membre Dernière intervention   116
 
Ah je vois, je pensais que ton champ était présent dans toutes les tables.
Je ne sais pas si cette fonction exite déja, mais avec un peu de connaissances en vb, tu peux la creer toi même (je peux t'aider si tu as besoin d'aide là dessus aussi)

PS: Désolé du retard de ma réponse, je mangeais^^
0

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

Posez votre question
Gaunts Messages postés 1125 Date d'inscription   Statut Membre Dernière intervention   116
 
Voila la fonction vb qui te permettra de vérifier si un champ contient une certaine valeur. Pour pouvoir utiliser cette fonction, va dans créér, macro, module et entre ceci:
Public Function isInTable(ByVal val As String, ByVal table As String) As Boolean    

    Set bd = CurrentDb()
    Set base = bd.OpenRecordset(table)

    base.Edit
    base.MoveFirst
    While (base.EOF = False)
        If (base.[Champ à tester] = val) Then
            isInTable = True
            Exit Function
        End If
        base.MoveNext
    Wend
    isInTable = False
End Function

Il faut l'appeler de la maniere suivante:
isInTable("valeur à tester"; "table dans laquelle est la valeur")
et remplacer Champ à tester par le nom de ton champ.
Elle renvoie True si la valeur est trouvée, sinon elle renvoit False.

Pour les habitués du vba, je suis désolé si ce code ne respecte pas les normes, n'est pas optimisé ou je ne sais quoi, je connais le vba depuis peu, et ne manipule les tables avec que depuis ce matin.

Tu devras donc faire:
VraiFaux([List_products].[Categorie]="";VraiFaux(isInTable([List_products].[nom];"List_product_E") = False;VraiFaux(isInTable([List_products].[nom];"List_product_E") = False;"";"F");"E");[List_of_ports].[Categorie])
0
Gaunts Messages postés 1125 Date d'inscription   Statut Membre Dernière intervention   116
 
Je rentre chez moi, mais si tu répond plus tard je pourrai toujours te répondre.
0
Gaunts Messages postés 1125 Date d'inscription   Statut Membre Dernière intervention   116
 
Pas de nouvelles, as tu résolu ton problême?
0