Bonjour,
Je dois réaliser une détection de clients perdus (5 semaines de suite avec un volume = 0). Mon programme fonctionne avec un numéro de semaine simple.
Cependant je dois modifier le format de la date pour coller à des exigences (le format est année-n°semaine -> masque de saisie 0000-00).
Je suis capable de manipuler les semaines dans des requêtes grâce à left([champ],4) pour l'année et Right([champ],2) pour la semaine.
Cependant au moment de remplir ma table de détection de clients perdus, je n'arrive pas à imposer le numéro de semaine!
Voici mon code:
La requête semble fonctionner mais je n'ai pas la moindre idée de la syntaxe nécessaire ici: rst(Right("dateDebut", 2)) = i - 4
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 Private Sub Commande24_Click() 'tableCompteur Dim rst As DAO.Recordset 'requete Dim rst_2 As DAO.Recordset Dim i As Long Dim sql As String 'requete ' Ouvrir la table tableCompteur en lecture/écriture Set rst = CurrentDb.OpenRecordset("tableCompteur", dbOpenDynaset) 'a chaque fois que l'on appuie sur le bouton, tous les enregistrements 'de la tableCompteur sont supprimés With DoCmd .SetWarnings False 'Désactive les alertes .RunSQL ("delete * from [tableCompteur];") ' effacement global de toutes les semaines .SetWarnings True End With 'on boucle sur les semaines For i = 5 To 53 'la requete va compter le nombres d'occurrences de 0 dans la table source 'VolumesReels sql = "SELECT VolumesReels.Client, Count(VolumesReels.Volume) AS CompteDeVolume" & _ " FROM VolumesReels " & _ " WHERE Right([VolumesReels.anneesemaine],2) <= " & i & " And (Right([VolumesReels.anneesemaine],2)>" & i & "-5) " & _ " GROUP BY VolumesReels.Client, VolumesReels.Volume " & _ " HAVING (((VolumesReels.Volume)=0));" Debug.Print sql 'on construit le jeu d'enregistrements correspondant a la requete Set rst_2 = CurrentDb.OpenRecordset(sql) 'on verifie que la requete n'est pas vide If rst_2.RecordCount <> 0 Then 'on se place au premier enregistrment de la requete rst_2.MoveFirst 'on boucle tant quil y a des enregistrements dans la requete Do Until rst_2.EOF ' Créer un enregistrement dans la tableCompteur rst.AddNew 'on remplit la table tableCompteur rst("Client") = rst_2.Fields(0) rst(Right("dateDebut", 2)) = i - 4 'rst("dateFin") = i rst("compteurVolumeZero") = rst_2.Fields(1) 'renvoie le deuxième argument de la requête 'détection de client perdu 'si le compteur est >= 5 on met le flag a oui If rst("compteurVolumeZero") >= 5 Then rst("client_potentiellement_perdu") = -1 'coche la case End If 'on met a jour la table rst.Update 'on passe au deuxieme enregistrement de la requete rst_2.MoveNext Loop End If 'on ferme le recordset de la requete rst_2.Close Next i 'on itere 'on ferme le recordset de la table rst.Close 'on libère les variables Set rst = Nothing Set rst_2 = Nothing 'on affiche un message signalant la fin de l'exécution MsgBox "Opération terminée !", vbInformation End Sub
Si quelqu'un a une idée je l'en remercie grandement,
Ostrich95
Partager