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

IHM Discussion :

Pouvoir gérer la couleur de fond de la partie détail d'un formulaire [AC-2007]


Sujet :

IHM

  1. #1
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut Pouvoir gérer la couleur de fond de la partie détail d'un formulaire
    Bonjour,

    J'ai créer un formulaire et je souhaiterais pouvoir gérer la couleur de fond de la zone Détail en fonction de son contenu.

    Ce formulaire est en mode Formulaires Continus et est alimenté par une requête. Un des champs de cette requête contient un code couleur (Ex : #FF9900) et je souhaiterais que ce code couleur serve à définir la couleur de fond de la zone détail concerné. Cela signifie que cette couleur doit pouvoir varier pour chaque enregistrement.

    J'ai parcouru les tutos et la FAQ j'ai trouvé une ligne de code qui peut peut être marcher...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms("MonFormulaire").Controls.Backcolor = rst("Code_Couleur")
    Mais je ne sais pas où la mettre pour obtenir le bon résultat... Du coup je ne sais même pas si ce code est le bon...

    Merci de votre aide

    Oliv'

    P.S. Si vous ne souhaitez pas lire toute la discution la solution est ici : http://www.developpez.net/forums/d85...e/#post4905477

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 917
    Points : 4 818
    Points
    4 818
    Par défaut
    Bonjour,
    Quand tu es dans ton formulaire en mode Création, tu peux mettre du formatage conditionnel sur le champ sélectionné (le texte ou le fond) via le menu Format / Formatage conditionnel


  3. #3
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    Bonjour micniv,

    Merci de ton aide mais cela ne correspond pas à ce que je veux faire. Je veux que ce soit le fond complet de la partie détail qui soit d'une couleur pas celui des champs. Et il me semble impossible d'activer la mise en forme conditionnelle pour le fond de la partie Détail.

    Ceci dit en effectuant la bidouille suivante cela semble fonctionner:
    Je rajoute le champ "Code_Couleur" dans ma zone Détail, je l'étire jusqu'à ce qu'il couvre toute la zone et je le mets en arrière plan. Ensuite je mets une mise en forme conditionnelle sur ce champ et j'obtiens un résultat qui peut convenir.

    Maintenant si quelqu'un connait une méthode plus dans la norme je suis preneur...

    Oliv'

  4. #4
    Membre habitué Avatar de miamou
    Inscrit en
    Novembre 2009
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 161
    Points : 178
    Points
    178
    Par défaut
    j'ai trouvé cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Détail.BackColor = vbBlue

  5. #5
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 917
    Points : 4 818
    Points
    4 818
    Par défaut
    je l'étire jusqu'à ce qu'il couvre toute la zone et je le mets en arrière plan. Ensuite je mets une mise en forme conditionnelle sur ce champ et j'obtiens un résultat qui peut convenir.
    On doit en effet bidouiller ainsi avec les MFC


  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Une piste intéressante à explorer : http://argyronet.developpez.com/offi...ghlightrecord/

    Philippe

  7. #7
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    Bonjour Messieurs, Dames,

    Miamou merci de ta syntaxe elle fonctionne à condition de ne vouloir qu'une seule couleur pour tous les enregistrements, je n'ai pas reussi à avoir plusieurs couleurs en utilisant le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Load()
    If Me.Code_Couleur = "#FF9900" Then
    Me.Détail.BackColor = vbRed
    Else
    Me.Détail.BackColor = vbBlue
    End If
    End Sub
    Peut être que ce code n'est pas mis au bonne endroit...

    Philippe, j'avais déja lu ce tuto mais il ne permet de mettre en valeur qu'un enregistrement et non la zone Détail. Donc à moins de bidouiller comme je l'ai expliqué je ne vois pas la solution (si elle existe).

    En tous cas merci à vous de m'aider et je vous souhaite une bonne année 2010.

    Oliv'

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re

    Combien de couleurs veux-tu ?

    Pourquoi la Mise en forme conditionnelle ne te convient pas ?

    Philippe

  9. #9
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    Re,

    En fait c'est pour classer mes clients par catégorie. Pour l'instant le nombre de catégories est assez peu élevé mais cela pourrait évoluer.

    Pour chaque client j'ai défini un code couleur dans son profil et je voudrais que ce code couleur serve de fond à la zone détail de sa présentation. Il est vrai qu'avec ma "bidouille" de la cellule étirée en arrière plan, avec une MFC sur cette cellule, le résultat est satisfaisant mais si je viens à rajouter des catégories cela implique que je doive à chaque fois rajouter des conditions à ma formule.

    Je me demandais donc si il n'était pas possible de définir via un code la couleur de la zone détail et qu'ainsi, avec un formulaire continu qui présente mes différents clients, chaque fond de client puisse avoir la couleur de son code couleur client.

    Ai-je été clair?

    Oliv'

  10. #10
    Invité
    Invité(e)
    Par défaut
    Re

    Va jeter un coup d'oeil la-dessus, c'est une autre approche : http://starec.developpez.com/tuto/msfcillimitee/

    Philippe

  11. #11
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    Merci de ton aide,

    En lisant ton tuto j'ai déja appris que la MFC n'était réalisable qu'avec 3 conditions max...

    Maintenant la présentation que j'ai ne permet pas d'utiliser le mode feuille de donnée ou alors avec des contraintes que je ne souhaite pas avoir, donc il me semble compliqué de la mettre en oeuvre dans mon cas.

    Il va sans doute falloir que j'y passe car je vais très vite avoir plus de 3 catégories de client (nombre que j'ai actuellement).

    Il serait tellement plus simple de pouvoir faire une MFC sur la partie Détail...

    Oliv'

  12. #12
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    Hello Oliv
    en lisant ton post, je viens de tester:
    j'ai utilisé l'évènement "sur le dessin" de l'objet détail de mon formulaire
    j'ai utilisé un oui/non pour mon test mais tu peux le remplacer par une boucle qui compare la variable de ton choix avec la 1°colonne d'une table de paramétrage, si égualité -> affectation de la valeur de la 2°colonne au backcolor et exit sinon boucle
    En fin de boucle, soit: rien on laisse la couleur déja mise
    soit: une affectation programmée

    exemple simpliste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Détail_Paint()
    If Payer_encaisser Then Détail.BackColor = 255 Else Détail.BackColor = -1
    End Sub

  13. #13
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    Salut Simplifi,

    Encore une fois tu viens me sortir de mes problèmes

    Le resultat obtenu avec le code suivant me convient tout à fait.

    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
    Private Sub Détail_Paint()
     
    If [Code_Couleur] = "RGB(255, 51, 0)" Then
        Détail.BackColor = RGB(255, 51, 0)
    Else
        If [Code_Couleur] = "RGB(0, 0, 0)" Then
            Détail.BackColor = RGB(0, 0, 0)
        Else
            If [Code_Couleur] = "RGB(192, 192, 192)" Then
                Détail.BackColor = RGB(192, 192, 192)
     
            Else
                Détail.BackColor = RGB(0, 255, 0)
            End If
        End If
    End If
     
    End Sub
    Maintenant je me dit qu'il doit être possible de le simplifier de la sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Détail_Paint()
     
    Détail.BackColor = [Code_Couleur]
     
    End Sub
    Mais je me heurte à un problème de format. En effet je n'arrive pas à passer [Code_Couleur] (dont la valeur est "RGB(0, 255, 0)" par exemple) en format Long.

    As tu une ruse de sioux???

    En tout cas MERCI

    Oliv'

  14. #14
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 028
    Points : 24 579
    Points
    24 579
    Par défaut
    Bonjour,

    Rgb est une fonction qui renvoi un long.

    Encore faut-il écrire la fonction sans guillemets.

    Cordialement,

  15. #15
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    en fait, je dois avouer que j'ai mis très longtemps à découvrir la fonction RGB, donc pour mettre des couleurs, je passais en mode création, je mettais la couleur choisie, je relevais la valeur dans la propriété Backcolor et je la copiais sans trop chercher à comprendre.
    Et ensuite, j'ai fais un formulaire pour initialiser mes paramètres avec ces codes: un pour afficher la couleur en fond de zone de texte
    l'autre pour lancer la boite à couleur et récupérer la valeur
    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
    Private Sub cmdColor_Click()
    Dim couleur_mémo As String
        ' ===== récupération de la couleur =====
        If Couleur > 0 Then couleur_mémo = Couleur
        Couleur = ShowColor(Me.Hwnd)
        If Couleur <= 0 Then Couleur = couleur_mémo
        texte_ouvert.BackColor = Couleur
        DoCmd.RunCommand acCmdSaveRecord
        Me.Refresh
    End Sub
     
    Private Sub Détail_Paint()
    On Error Resume Next
     texte_ouvert.BackColor = Couleur
    End Sub
    et le fonctionnement de la boite à couleur elle mê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
    Private Declare Function CHOOSECOLOR Lib "comdlg32.dll" Alias _
    "ChooseColorA" (pChoosecolor As CHOOSECOLOR) As Long
    Private Type CHOOSECOLOR
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        rgbResult As Long
        lpCustColors As String
        flags As Long
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
    End Type
    Public Function ShowColor(Handle As Long) As Long
        Dim cc As CHOOSECOLOR
        Dim Custcolor(16) As Long
        Dim lReturn As Long
     
        'set the structure size
        cc.lStructSize = Len(cc)
        'Set the owner
        cc.hwndOwner = Handle
        'set the custom colors (converted to Unicode)
        cc.lpCustColors = StrConv(CustomColors, vbUnicode)
        'no extra flags
        cc.flags = 0
     
        'Show the 'Select Color'-dialog
        If CHOOSECOLOR(cc) <> 0 Then
            ShowColor = cc.rgbResult
            CustomColors = StrConv(cc.lpCustColors, vbFromUnicode)
        Else
            ShowColor = -1
        End If
    End Function
    je dois même avouer que je ne suis pas sûr d'avoir tout suivi, je remercie donc d'autant plus le forum sur lequel j'ai trouvé ce code.

  16. #16
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    Citation Envoyé par loufab Voir le message

    Encore faut-il écrire la fonction sans guillemets.

    Cordialement,
    Salut loufab,

    J'avais compris que c'était les guillemets qui posaient un problème mais je ne sais pas comment faire pour les supprimer afin de définir ma variable. Je sais comment en rajouter mais pas comment les oter...

    Salut Simplifi,

    Je ne suis pas au taf aujourd'hui donc je regarderai ta proposition demain et je te tiens au courrant. En tout cas merci.

    Oliv'

  17. #17
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 028
    Points : 24 579
    Points
    24 579
    Par défaut
    En les enlevant simplement.

    Un exemple parmis d'autres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim couleur as long
     
    couleur = rgb(255,51,0)
     
    if couleur = rgb(255,51,0) then
       me.détail.backcolor = couleur
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.détail.backcolor = rgb(255,51,0)

  18. #18
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    Salut loufab,

    Merci de ta réponse mais là où se trouve mon problème c'est que la valeur RGB est issue d'un champ de mon formulaire qui est alimenté par une table dans laquelle je stock les codes couleur de chaque client donc j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lgCouleur = Me.Code_Couleur
    Et là j'ai les guillemets qui me posent problème...

    Oliv'

  19. #19
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 028
    Points : 24 579
    Points
    24 579
    Par défaut
    Normalement on évite de stocker des expressions on stocke plutot leur résultat... mais heureusement que Microsoft a prévu ce genre de fonctionnement.

    Essaye cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.détail.backcolor = eval(me.monchampcontenantlexpressionRgb)
    Eval() permet d'évaluer l'expression pour en retourner la valeur réponse.

    Cordialement,

  20. #20
    Membre averti Avatar de Oliv'83
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mars 2008
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2008
    Messages : 421
    Points : 309
    Points
    309
    Par défaut
    Citation Envoyé par loufab Voir le message
    Normalement on évite de stocker des expressions on stocke plutot leur résultat...
    Moi je suis d'accord pour stocker les résultats, mais de quel résultat parles tu????

    Aujourd'hui (avant d'avoir eu le formulaire de Simplifi sur lequel je vais revenir dans un autre post) pour obtenir la couleur qui me convient je vais dans un champ, je clique sur les "..." de Couleur Fond, je choisis ma couleur et ensuite je récupère soit la combinaison RGB soit le code de cette couleur dans la case Couleur Fond. Je ne connais aucun autre "résultat".

    Sur un autre plan, ton code fonctionne parfaitement merci. Et du coup la mise en forme couleur du fond de ma partie détail devient un jeu d'enfant.

    Oliv'

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 14
    Dernier message: 24/05/2013, 10h43
  2. TDBGRID - Couleur de fond d'une seule cellule
    Par cgo dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/09/2009, 10h16
  3. Réponses: 4
    Dernier message: 23/06/2004, 14h30
  4. debutant : couleur de fond d'une application direct3D
    Par ptidrone dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2004, 17h08
  5. Changer la couleur de fond de l'écran
    Par tnk dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 19/01/2003, 01h37

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