Voici ci-après le détail des actions que je voudrais faire faire à un bouton dans mon formulaire :
Les données :
sql = jeu d’enregistrement créé sur deux tables liées tbl1 et tbl2 par un champ commun champN
rs = recordset construit sur sql
l’action à faire :
tant que rs n’est pas à la fin du jeu d’enregistrement, je lui demande de rechercher les enregistrements qui correspondent à un critère.
i) Si trouvé alors modifier la valeur du champ Champ2, champ2 est une case à cochée définie par défaut à vraie dans la table tbl1.
Par un me.requery, je fais la mise à jour du Champ2 et calcule la nouvelle valeur du textBox NbResultat qui fait la somme de (Champ2.Value).
ii) Si pas trouvé, alors je lui demande d’ajouter des enregistrements aux deux tables uniquement pour les enregistrements de mon jeu où champ2. value = vrai (condition1) et si l’utilisateur a accepté de continuer par msgbox (message) =vbyes (condition 2).
Si condition 1 et 2 = faux alors sortir et ré-initialiser le formulaire.
Il manque une condition à vérifier et je ne sais pas où la mettre dans mon code :
Toute la boucle while… wend n’est possible que si la valeur initiale du textbox NbResultat est >1.
Voici mon code, merci de m’indiquer ce que je peux améliorer.
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 Private Sub bt_valider_Click() Dim DB As DAO.Database Dim rs As DAO.Recordset Dim sql As String sql = " SELECT tblENVOI.*, tblFAX.* " _ & " FROM tblENVOI INNER JOIN tblFAX ON " _ & " tblENVOI.num_envoi = tblFAX.num_envoi;" Set DB = Application.CurrentDb Set rs = DB.OpenRecordset(sql) While Not rs.EOF 'verifie si le fax à envoyer existe déja rs.FindFirst ("code_client=" & Me.SF_ResultatCircul.Form!txtClient & " AND code_fnr=" & _ Me.SF_ResultatCircul.Form!txtFnr & _ " AND date_arrete=#" & CDate(Me.SF_ResultatCircul.Form!txtDateArrete) & "#") If Not rs.NoMatch Then 'si le fax à envoyer existe déjà alors modifier case à cocher "circulariser" = 0 With rs .Edit !circulariser.Value = 0 .Update .Close Set rs = Nothing End With Me.SF_ResultatCircul.Requery 'calcul de la nouvelle valeur du nombre de lignes trouvées Me.txtNbResultat.Value = -DSum(Me.SF_ResultatCircul.Form!circulariser.Value) ' mise à jour instantanée Me.txtNbResultat.Requery Else 'si aucun fax trouvé alors ajouter à condition que case à cocher "circulariser" = -1 et utilisateur ok pour continuer If (Me.SF_ResultatCircul.Form!circulariser.Value = -1) And (MsgBox(" Plusieurs fax de votre sélection " _ & " ont déja été envoyés ! " & vbCrLf & " Souhaitez-vous continuer? ", vbYesNo + vbQuestion) = vbYes) Then With rs .AddNew !date_envoi = Me.txtDateEnvoi !nb_envoi = Me.txtNbResultat !type_envoi = 1 !code_client = Me.SF_ResultatCircul.Form!txtClient !code_fnr = Me.SF_ResultatCircul.Form!txtFnr !num_collab = Me.txtUser !circulariser = True !reponse = False !date_arrete = Me.SF_ResultatCircul.Form!txtDateArrete .Update .Close Set rs = Nothing End With 'confirmation de la créaton des fax MsgBox " Vous avez généré " & Me.txtNbResultat & " fax." & vbCrLf & "" _ & " Envoi n° " & Me.txtNumEnvoi & " du " & Format(Me.txtDateEnvoi, "dd/mm/yyyy"), vbInformation 'ré-initialisation du formulaire par appel de la sub Initialisation() Initialisation Else 'si l'utilisateur ne souhaite pas continuer DoCmd.Quit MsgBox "Action annulée", vbInformation Initialisation End If End If Wend
Partager