Bonjour,
je reprends Access après une longue pause et je tente des choses nouvelles.
Contexte :
J'ai une base de données de noms d'espèces d'animaux. Je sauvegarde la taxonomie de l'espèce (Classe / Ordre / Famille). Pour me simplifier la vie, je n'ai pas créé d'arborescence de dépendance entre Classe / Ordre et Famille (donc techniquement on peut, pour le moment, affecter un Ordre à la mauvaise Classe).
Ces 3 données taxonomiques sont liées par une clé étrangère dans 3 tables respectives.
Dans la table Classe (et ultérieurement pour Ordre et Famille), j'ai créé un champ CouleurTexte et CouleurFond. ces couleurs au format RGB serviront dans l'Etat.
Dans ma table tblAnimaux, en fonction du champ Classification, on distingue 2 cas de figure :
- Ceux qui valent "Groupe" et qui sont en fait un conteneur de Famille (et non pas une espèce à proprement parler).
- Tout le reste qui constitue une espèce.
J'ai un état qui permet de ne sélectionner que "Groupe". Le résultat sera imprimé ensuite pour faire une sorte d'intercalaire entre les espèces de familles différentes.
Dans cet état, je récupère bien les informations et les valeurs des clés étrangères pour la taxonomie.
J'ai renommé la zone de liste déroulante en haut par TitreRapport.
Objectif :
Adapter TitreRapport aux couleurs de Texte et de Fond à partir des valeurs issues de l'enregistrement correspondant dans la table Classe.
Etat actuel :
Voici la requête SQL qui est attachée comme source à mon Etat :
Voici le schéma de relations :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT tblAnimaux.*, tblTaxonomie_Classe.CouleurFond, tblTaxonomie_Classe.CouleurTexte FROM tblAnimaux LEFT JOIN tblTaxonomie_Classe ON tblAnimaux.Classe = tblTaxonomie_Classe.N° WHERE (((tblAnimaux.Classification)="Groupe"));
Et voici le code VB que m'a donné ChatGPT :
Problème
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 '------------------------------------------------------------------------------ ' Function : HexToRGB ' Description : Convertit une couleur au format hexadécimal (ex : #ABCDEF) en un ' tableau de 3 valeurs Long représentant les composantes Rouge, Vert ' et Bleu (RGB). ' Parameters : ' hexColor (String) : Chaîne représentant une couleur en format hexadécimal (#RRGGBB). ' Returns : ' Long() : Tableau de trois valeurs Long contenant les composantes Rouge (0), ' Vert (1), et Bleu (2). ' Example : ' Dim RGBValues() As Long ' RGBValues = HexToRGB("#FF5733") ' Debug.Print "R: " & RGBValues(0) & " G: " & RGBValues(1) & " B: " & RGBValues(2) '------------------------------------------------------------------------------ Function HexToRGB(hexColor As String) As Long() Dim RGBValues(2) As Long Dim RedHex As String Dim GreenHex As String Dim BlueHex As String ' Supprimer le # si présent hexColor = Replace(hexColor, "#", "") ' Séparer la chaîne hexadécimale en composants rouge, vert et bleu RedHex = Left(hexColor, 2) GreenHex = Mid(hexColor, 3, 2) BlueHex = Right(hexColor, 2) ' Convertir chaque composant de la couleur hexadécimale en une valeur Long RGBValues(0) = CLng("&H" & RedHex) ' Rouge RGBValues(1) = CLng("&H" & GreenHex) ' Vert RGBValues(2) = CLng("&H" & BlueHex) ' Bleu ' Retourner le tableau avec les valeurs RGB HexToRGB = RGBValues End Function Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) Dim hexFond As String Dim hexTexte As String Dim RGBFond() As Long Dim RGBTexte() As Long ' ************************************************************* ' Classe ' ************************************************************* ' Récupérer les valeurs de couleur depuis les champs hexFond = Nz(Me![tblTaxonomie_Classe.CouleurFond], "#FFFFFF") ' Blanc par défaut si CouleurFond est vide hexTexte = Nz(Me![tblTaxonomie_Classe.CouleurTexte], "#000000") ' Noir par défaut si CouleurTexte est vide ' Convertir les couleurs hexadécimales en valeurs RGB RGBFond = HexToRGB(hexFond) RGBTexte = HexToRGB(hexTexte) ' Appliquer les couleurs Me.Classe.BackColor = RGB(RGBFond(0), RGBFond(1), RGBFond(2)) ' Couleur de fond Me.Classe.ForeColor = RGB(RGBTexte(0), RGBTexte(1), RGBTexte(2)) ' Couleur du texte End Sub
Si je drag&drop un contrôle sur le rapport, ça fonctionne.
si je les retire, ça plante car il ne reconnait pas CouleurFond, ni CouleurTexte.
Donc côté source, il ne prend pas la valeur dans la table.
Workaround
Je peux garder ces contrôles et mettre le Visible à false, ça ferait le job mais est ce que l'on n'a pas un moyen de s'en passer ?
Quelqu'un pourrait-il m'aiguiller ?
Merci
EDIT : Correction du code partiellement fonctionnel.







Répondre avec citation




Partager