Bonjour,
Je rencontre un problème en voulant améliorer un code qui fonctionne déjà bien:
Je dispose d'une table initiale "VolumesReels" avec les champs "Client", "Volume", "Ligne" et "Semaine" où je sais quel client a demandé tel volume lors de telle semaine.
Je remplis une table "tableSommeVolume" avec les champs "sommeVolume", "Semaine" et "Ligne"
Mon code actuel est capable de me renvoyer le volume total pour chaque semaine (tous clients confondus). Cependant je rencontre un problème au niveau de la ligne quand il y en a des différentes.
Voici de quoi illustrer mon propos:
voici mes données:
**VT signifie Vêtements de travail et Ligne = ligne d'une usine**
Ainsi je devrais avoir:
-pour la semaine 1 : un enregistrement avec (sommeVolume = 15; semaine = 1 et ligne=Ligne Restauration)
et un enregistrement avec (sommeVolume = 12; semaine = 1 et ligne=Ligne VT)
-pour la semaine 2: un enregistrement avec (sommeVolume = 20+13=33; semaine = 2 et ligne=Ligne VT)
-pour la semaine 3: un enregistrement avec (sommeVolume = 15+10=25; semaine = 3 et ligne=Ligne Restauration)
Cependant ma table se remplit ainsi:
Je pense que le problème vient peut-être du fait que dans la table tableSommeVolume, le champ "semaine" est une clé primaire (ce qui explique pourquoi la Ligne VT de la semaine 1 n'est pas affichée), mais en mettant un ID [numéroAuto] en plus et en retirant la clé primaire de Semaine, j'obtiens le même résultat donc...
Voilà mon code (exécuté à partir d'un bouton dans un formulaire):
Si quelqu'un a une petite idée je l'en remercie grandement,
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 Private Sub Commande0_Click() ' Quelques variables Dim rst_2 As DAO.Recordset Dim rst As DAO.Recordset Dim i As Long Dim strsql As String ' Ouvrir la table en lecture/écriture Set rst = CurrentDb.OpenRecordset("tableSommeVolume", dbOpenDynaset) ' Boucler sur le nombre de semaines ' With DoCmd .SetWarnings False 'Désactive les alertes .RunSQL ("delete * from [tableSommeVolume];") ' effacement global de toutes les semaines .SetWarnings True End With ' For i = 1 To 52 ' Créer un enregistrement dans la table rst.AddNew ' Alimenter les champs rst("semaine") = i ' strsql = "SELECT Sum(VolumesReels.Volume) AS SommeDeVolume, VolumesReels.Semaine, VolumesReels.Ligne FROM VolumesReels GROUP BY VolumesReels.Semaine,VolumesReels.Ligne HAVING VolumesReels.Semaine =" & i & ";" ' Set rst_2 = CurrentDb.OpenRecordset(strsql) 'Debug.Print strSQL ' If rst_2.RecordCount <> 0 Then rst("sommeVolume") = rst_2.Fields(0) 'renvoie le premier argument de la requête rst("Ligne") = rst_2.Fields(2) Else rst("sommeVolume") = 0 ' si aucun enregistrement alors 0 dans sommeValue rst("Ligne") = "" End If ' Valider rst.Update rst_2.Close Next rst.Close Set rst = Nothing Set rst_2 = Nothing MsgBox "Opération terminée !", vbInformation End Sub
En vous remerciant d'avance de vos réponses,
Ostrich95
Partager