Bonjour,
Une fois encore je fais appel à vos lumières
J'ai un soucis avec une petite fonction qui marchait très bien il y a quelques mois.
Et puis là, impossible de créer la table nécessaire pour l'impression de mes étiquettes
Le problème se situe au niveau du test conditionnelMon recordset filtré a beau avoir 48 enregistrements (je part d'un rst contenant 621 enregistrements), ce qui est confirmé par mes msgbox, mon "IF..." n'en fait qu'à sa tête et considère toujours qu'il n'y en a aucun !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part If rstFiltre.RecordCount = 0 Then ...
J'ai aussi essayé de tester EOF et BOF pour savoir si le recordset filtré contenait quelque chose mais ça ne fonctionne pas mieux...
J'ai aussi essayé de transférer toute la base dans une nouvelle et vierge. Mais ça ne change rien non plus.
Avez-vous une idée de la raison de ce bug? Ou une manière de le contourner?
En vous remerciant d'avance, voici le code de la fonction
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
78
79
80
81
82
83
84
85
86 Private Function tblToPrintRemplissage() As Boolean 'take a clone of the subform's recordset Dim rst As Recordset Dim rstFiltre As Recordset Dim rstTblToPrint As Recordset 'on ouvre un recordset sur la table à remplir pour la vider si elle ne l'est pas Set rstTblToPrint = CurrentDb.OpenRecordset("tblToPrint", dbOpenDynaset) If rstTblToPrint.EOF Then Else rstTblToPrint.MoveFirst Do Until rstTblToPrint.EOF rstTblToPrint.Delete rstTblToPrint.MoveNext Loop End If 'on clone le recordset du sous-formulaire = tous les enregistrements affichés, un filtre peut (ou non) avoir été appliqué Set rst = Me.[sfrqEspece].Form.Recordset.Clone() rst.MoveLast rst.MoveFirst MsgBox rst.RecordCount 'juste pour le test 'On filtre les enregsitrements qui sont sélectionnés rst.Filter = "[ToPrint] = True" Set rstFiltre = rst.OpenRecordset rstFiltre.MoveLast rstFiltre.MoveFirst MsgBox rstFiltre.RecordCount 'juste pour le test 'On va remplir la table tblToPrint avec les données adéquates après filtrage If rstFiltre.RecordCount = 0 Then tblToPrintRemplissage = False MsgBox "Aucune sélection n'a été réalisée" GoTo EditDossierSelected_Click Else tblToPrintRemplissage = True 'parcours tous les enregistrements Do While Not rstFiltre.EOF Select Case Left(rstFiltre.Fields("Réf").Value, 2) Case "CH" ' Créer un enregistrement dans la table rstTblToPrint.AddNew ' Alimenter les champs rstTblToPrint("Txt1") = rstFiltre.Fields("Nom commun FR") rstTblToPrint("Txt2") = rstFiltre.Fields("Origine") rstTblToPrint("Txt3") = rstFiltre.Fields("Commentaires") rstTblToPrint("Txt4") = rstFiltre.Fields("Réf") ' Valider rstTblToPrint.Update Case Else ' Créer un enregistrement dans la table rstTblToPrint.AddNew ' Alimenter les champs rstTblToPrint("Txt1") = rstFiltre.Fields("Ordre") & " : " & rstFiltre.Fields("Famille") & " : " & rstFiltre.Fields("SousFamille") & " : " & rstFiltre.Fields("Genre") rstTblToPrint("Txt2") = rstFiltre.Fields("Espèce") rstTblToPrint("Txt3") = rstFiltre.Fields("Race") rstTblToPrint("Txt4") = rstFiltre.Fields("Réf") ' Valider rstTblToPrint.Update End Select rstFiltre.MoveNext Loop End If 'vide les variables objets rst.Close Set rst = Nothing rstFiltre.Close Set rstFiltre = Nothing rstTblToPrint.Close Set rstTblToPrint = Nothing Exit_EditDossierSelected_Click: Exit Function EditDossierSelected_Click: MsgBox "Veuillez sélectionner au moins un enregistrement !", vbOKOnly + vbInformation Resume Exit_EditDossierSelected_Click End Function
Partager