Bonjour,
Après quelques recherches, je commence à penser que ce que je souhaite faire n'est pas possible, mais j'aimerais en avoir la confirmation.
Dans un formulaire continu, par défaut Access alterne la couleur de fond à chaque enregistrement. Je voudrais que cette alternance ait lieu à chaque fois que la valeur d'un enregistrement est différente du précédent.
J'ai fait une tentative avec l'évènement Détail_Paint(), mais ça fait comme un Refresh permanent qui semble utiliser beaucoup de ressources. En plus de ça, étonnamment, en mode debug je n'ai pas réussi à interrompre l'exécution du code en cours : quand je clique sur "Réinitialiser" (le petit carré bleu), le programme continue de tourner et s'arrête au prochain point d'arrêt.
Pour info, voici le code essayé :
Je suppose qu'initialiser puis fermer un recordset dans un évènement Paint() n'est pas une bonne idée. Est-ce que créer un Recordset public, initialisé par Form_Load() pourrait améliorer le résultat ? Je vais essayer, mais je n'y crois pas trop.
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 Public lngCouleurPrec As Long Private Sub Détail_Paint() On Error GoTo Err_Previous Dim strPrecedent As String Dim rstClone As DAO.Recordset Dim strBookmark As String Dim lngCouleurPrec As Long With Me.Form Set rstClone = .RecordsetClone strBookmark = .Bookmark rstClone.Bookmark = .Bookmark End With ' Si premier enregistrement du recordSet If rstClone.BOF Then ' Obtient la couleur de fond lngCouleurPrec = Me.Section("Détail").BackColor ' Sinon se déplace au précédent Else rstClone.MovePrevious ' Lit valeur précédent strPrecedent = rstClone.Fields("Champ1") ' Re-synchronise bookmark Me.Form.Bookmark = strBookmark End If ' Si, dans l'enregistrement courant, le champ a la même valeur que le précédent If rstClone.Fields("Champ1") = strPrecedent Then With Me.Section("Détail") ' Applique la même couleur comme couleur de fond .BackColor = lngCouleurPrec ' Supprime l'alternance de couleur .AlternateBackColor = .BackColor End With Else With Me.Section("Détail") .BackColor = .AlternateBackColor lngCouleurPrec = .AlternateBackColor End With End If Exit_Previous: Exit Sub Err_Previous: If Err.Number <> 3021 Then 'Not at the 1st or New Record MsgBox Err.Description, vbExclamation, "Error in Previous()" End If Resume Exit_Previous End Sub
Partager