Bonjour à tous,
Voici mon problème:
Je dispose d'une table "VolumesReels" avec des champs "Client", "Volume" et "Semaine" où je sais quel client a demandé tel volume lors de telle semaine.
Mon objectif est d'être capable de dire quand un client est "perdu".
Un client est perdu lorsque pendant 4 semaines consécutives, son volume est à 0.
J'aimerais alimenter une table "tableCompteur" qui afficherait le client, la semaine de début et de fin où le compteur a été établi et enfin le compteur.
Voici mon code (s'exécute depuis un formulaire en cliquant sur un bouton).
Mon code fonctionne partiellement puisqu'à l'exécution, la fenêtre "client potentiellement perdu détecté!" s'affiche autant de fois que le compteur atteint au moins 4 (l'intervalle de semaines se décale 1-6 puis 2-7 puis 3-8 etc).
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
48
49
50
51
52
53
54
55
56
57 Private Sub Commande6_Click() Dim rst As DAO.Recordset Dim rst_2 As DAO.Recordset Dim i As Long Dim cpt As Long Dim strsql As String ' Ouvrir la table en lecture/écriture Set rst = CurrentDb.OpenRecordset("tableCompteur", dbOpenDynaset) With DoCmd .SetWarnings False 'Désactive les alertes .RunSQL ("delete * from [tableCompteur];") ' effacement global de toutes les semaines .SetWarnings True End With For i = 5 To 52 ' Créer un enregistrement dans la table rst.AddNew sql = "SELECT VolumesReels.Client, Count(VolumesReels.Volume) AS CompteDeVolume" & _ " FROM VolumesReels " & _ " WHERE((VolumesReels.Semaine) <= " & i & "And (VolumesReels.Semaine)>" & i & "-5) " & _ " GROUP BY VolumesReels.Client, VolumesReels.Volume " & _ " HAVING (((VolumesReels.Volume)=0));" Debug.Print sql Set rst_2 = CurrentDb.OpenRecordset(sql) 'On remplit le champ client par la première valeur de la requete rst("Client") = rst_2.Fields(0) rst("semaineDebut") = i - 5 rst("semaineFin") = i If rst_2.RecordCount <> 0 Then rst("compteurVolumeZero") = rst_2.Fields(1) 'renvoie le deuxième argument de la requête If rst("compteurVolumeZero") >= 4 Then MsgBox "client potentiellement perdu détecté!", vbInformation End If Else rst("compteurVolumeZero") = 0 ' si aucun enregistrement alors 0 dans sommeValue End If ' Valider rst.Update rst_2.Close Next i rst_2.Close Set rst = Nothing Set rst_2 = Nothing MsgBox "Opération terminée !", vbInformation End Sub
Voici ma table tableCompteur
Cependant à la fin un message d'erreur s'affiche :
"Erreur d'exécution 3021 : aucun enregistrement en cours" qui me pointe à la ligne
rst("Client") = rst_2.Fields(0)
Si quelqu'un aurait une idée de méthode plus "propre" qui ne me ferait pas d'erreur je suis preneur!
En vous remerciant d'avance de vos réponses,
Ostrich95
Partager