... et les mettre dans un champ d'une autre table (en access 2007)
Bonjour
Ce que je souhaites (ou plutôt que je DOIS) faire est un peu compliquer pour mon faible niveau en VBA mais je n'est pas le choix...
Je sais ce que je dois faire mais je ne sais pas comment le faire
J'ai un peu fouiller quand même avant de venir ici, j'ai regardé dans l'aide access et j'ai trouvé un début de piste mais je n'arrive pas à l'appliquer.
Enfin bref... faisons les choses dans l'ordre.
J'ai un formulaire contenant un formulaire sous forme feuille de données qui repose sur la table OPERATIONS ainsi qu'un groupe d'option sous la forme de radio bouton.
Cette table est reliée à 2 autres tables (ASSEMBLAGE et SAV) qui vont me servir.
Mes Tables:
Table OPERATIONS (IdOperation, NomOperation,..., IdOpAssemblage, IdOpSAV)
Table ASSEMBLAGE (IdOpAssemblage, OpAssemblage)
Table SAV (IdOpSAV, OpSAV1, OpSAV2, OpSAV3,..., OpSAVn) >> pour le moment je n'ai que 4 champs dans cette table mais il pourrait y en avoir plusieurs à l'avenir d'où le OpSAVn
Les tables ASSEMBLAGE et SAV correspondent en fait à des listes. Par ex, dans le champ OpAssemblage il y a un liste de 4 ou 5 opérations ce qui fait 4 ou 5 enregistrements. Idem pour la table SAV (pour le moment seul le champ OpSAV1 contient des enregistrements!)
Dans mon formulaire, mon groupe d'options en comporte 4 qui sont:
OpAssemblage, OpSAV1, OpSAV2, OpSAV3
correspondant aux champs respectifs du même nom des tables ASSEMBLAGE et SAV.
Voilà pour la présentation.
Maintenant ce qu'il faut que je fasse, c'est lorsque je choisi une option (par ex OpAssemblage), mettre les valeurs de ce champ dans le champ NomOperation de la table OPERATIONS et qui se trouve dans le sous-formulaire.
J'ai d'abord utiliser un select case et DLookUp pour le faire mais ça ne marche pas et en plus j'ai une erreur d'exécution (94)
En fouillant un peu plus, je suis tomber sur un exemple dans l'aide qui utilise la méthode Seek.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Private Sub Choix_cycle_Click() Dim NomOp As String NomOp = SF_Détails_Opérations_Composant.Form.NomOperation Select Case Me.Choix_cycle.Value Case 1 NomOp = DLookUp ("[OpAssemblage]", "ASSEMBLAGE") Case 2 NomOp = DLookUp ("[OpSAV1]", "SAV") Case 3 NomOp = DLookUp ("[OpSAV2]", "SAV") Case 4 NomOp = DLookUp ("[OpSAV3]", "SAV") End Select End Sub
J'ai donc créé mes 2 fonctions sur le modèle de l'exemple, une pour la table ASSEMBLAGE et une pour la table SAV.
Mais ça marche pas des masses non plus et j'ai toujours cette foutu erreur d'exécution
Pour assemblage:
Pour sav:
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
18
19
20
21
22
23
24
25
26
27 Function GetOpAssemblage(lgOpAssemblageId As Long) As Variant Dim dbsBDD As DAO.Database Dim rstAssemblage As DAO.Recordset On Error GoTo ErrorHandler Set dbsBDD = CurrentDb Set rstAssemblage = dbsBDD.OpenRecordset("ASSEMBLAGE") rstAssemblage.Index = "PrimaryKey" rstAssemblage.Seek "=", lgOpAssemblageId If rstAssemblage.NoMatch Then GetOpAssemblage = Null Else GetOpAssemblage = rstAssemblage!OpAssemblage End If rstAssemblage.Close dbsBDD.Close Set rstAssemblage = Nothing Set dbsBDD = Nothing Exit Function ErrorHandler: MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description End Function
Mais le problème de cette méthode c'est que je ne récupère qu'un seul enregistrement, or je dois récupérer tous les enregistrements du champ pour les mettre dans le champ NomOperation de la table OPERATIONS.
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
18
19
20
21
22
23
24
25
26
27 Function GetOpSAV1(lgOpSAVId As Long) As Variant Dim dbsBDD As DAO.Database Dim rstSAV As DAO.Recordset On Error GoTo ErrorHandler Set dbsBDD = CurrentDb Set rstSAV = dbsBDD.OpenRecordset("SAV") rstSAV.Index = "PrimaryKey" rstSAV.Seek "=", lgOpSAVId If rstSAV.NoMatch Then GetOpSAV1 = Null Else GetOpSAV1 = rstSAV!OpSAV1 End If rstSAV.Close dbsBDD.Close Set rstSAV = Nothing Set dbsBDD = Nothing Exit Function ErrorHandler: MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description End Function
De plus, pour la table SAV j'ai plusieurs champs et je ne peux pas faire une fonction pour chaque champs, ce serait trop lourd à géré d'autant plus qu'il pourrait y en avoir davantage par la suite. Il faudrait donc que je puisse mettre tout dans une seule fonction pour la table SAV mais je ne sais pas comment
Voilà, c'est un peu long mais j'espère avoir été clair dans mes explications et merci de m'avoir lu jusqu'au bout. Si certains points vous parraissent obscurs ou mal expliquer, n'hésitez pas à me redemander.
Merci aussi à ceux qui voudront bien se pencher sur mon problème épineux et me donner conseils et solutions
Partager