Bonjour,
Voici le problème que je rencontre:
Je dois réaliser un algorithme qui va détecter un client perdu (5 semaines de suite avec un volume =0), récupérer la semaine de perte et aller mettre à jour le champ semaineFin dans une table GestionClients.
Tout fonctionne mais j'aimerais apporter une fonctionnalité importante: demander, pour chaque client détecté comme perdu, si il l'est effectivement ou non. Si l'utilisateur choisi "oui", alors le champ est mis à jour.
Voici ce que réalise la première requete (de détection de client perdu):
A l'exécution, les 3 MsgBox s'affichent bien et avec les bonnes informations mais quend je clique sur "oui", aucune ligne à mettre à jour n'est trouvée dans la table GestionClients ci dessous:
Pour Sofitel, SemaineFin devrait se mettre à jour à la valeur 7, 6 pour Pullmann et 9 pour Secret de paris.
Voici mon code:
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
58
59
60
61 Private Sub Commande11_Click() 'recordset de la table GestionClients dont on va MAJ un champ Dim rst As DAO.Recordset 'recordset de la requete de detection de clients perdus Dim rst_detecteclientperdu As DAO.Recordset 'servent pour les MSGBOX Dim Msg, Style, Title, Response 'requete sql de détection de clients perdus Dim strsql As String Dim sqlMAJ As String 'requete de MAJ 'on ouvre la table qui se mettra a jour Set rst = CurrentDb.OpenRecordset("GestionClients", dbOpenDynaset) 'la requete qui va chercher les clients détectés et la semaine de perte strsql = "SELECT tableCompteur.client_potentiellement_perdu, tableCompteur.Client, First(tableCompteur.semaineDebut) AS PremierDesemaineDebut " & _ " FROM tableCompteur " & _ " WHERE (((tableCompteur.client_potentiellement_perdu) = -1)) " & _ " GROUP BY tableCompteur.client_potentiellement_perdu, tableCompteur.Client;" Debug.Print strsql 'on construit le jeu d'enregistrements de cette requete Set rst_detecteclientperdu = CurrentDb.OpenRecordset(strsql) If rst_detecteclientperdu.RecordCount <> 0 Then 'on se place sur le premier enregistrement de la requete rst_detecteclientperdu.MoveFirst 'on boucle sur les enregistrements de la requete Do Until rst_detecteclientperdu.EOF 'MsgBox avec le client et la semaine de perte Msg = "Le client " & rst_detecteclientperdu.Fields(1) & " a t-il été perdu en semaine " & rst_detecteclientperdu.Fields(2) 'boutons oui et non Style = vbYesNo + vbQuestion + vbDefaultButton1 Title = "client perdu? " 'on affiche la MsgBox pour chaque client Response = MsgBox(Msg, Style, Title) 'si la réponse est oui, on execute une requete de mise a jour If Response = vbYes Then 'voici le SQL de cette requete de MAJ sqlMAJ = "UPDATE GestionClients " & _ " SET GestionClients.SemaineFin = " & rst_detecteclientperdu.Fields(2) & " WHERE GestionClients.Client= "" & rst_detecteclientperdu.Fields(1) & ""; " 'exécution de la requete de MAJ DoCmd.RunSQL sqlMAJ End If 'on passe a l'enregistrement suivant de la requete rst_detecteclientperdu.MoveNext Loop End If Set rst = Nothing Set rst_detecteclientperdu = Nothing MsgBox "Opération terminée !", vbInformation End Sub
En vous remerciant d'avance de votre aide,
Ostrich95
Partager