IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Mise en formation d'un Label à partir des couleurs dans une table étrangère


Sujet :

Requêtes et SQL.

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 122
    Par défaut Mise en formation d'un Label à partir des couleurs dans une table étrangère
    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 :
    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"));
    Voici le schéma de relations :
    Nom : BDD_Relations.png
Affichages : 181
Taille : 49,1 Ko

    Et voici le code VB que m'a donné ChatGPT :
    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
    Problème
    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.

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 627
    Billets dans le blog
    67
    Par défaut
    Bonsoir,

    Quel est le souci de rendre invisibles ces contrôles ?

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 122
    Par défaut
    Bonjour,

    je pensais la méthode pas propre mais il semblerait qu'elle soit largement utilisée. Les autres solutions étaient soient trop compliquées pour moi soit indisponibles (passer par le RecordSet).

    Donc au final, j'utilise les contrôles que je mets en invisible.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter des couleurs dans une table
    Par stephane67450 dans le forum WinDev
    Réponses: 13
    Dernier message: 15/08/2019, 21h38
  2. [WD18] Tri et perte des couleurs dans une table
    Par philippe30 dans le forum WinDev
    Réponses: 5
    Dernier message: 29/04/2015, 12h53
  3. Enregistrer des données dans une table à partir du code
    Par Ragnarok85 dans le forum Access
    Réponses: 4
    Dernier message: 24/01/2007, 14h03
  4. Réponses: 14
    Dernier message: 22/09/2005, 17h49
  5. Réponses: 2
    Dernier message: 15/06/2005, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo