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

VBA Access Discussion :

Formulaire continu : Couleur de fond d'un champ indépendant donné par la valeur RGB stockée dans une table [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut Formulaire continu : Couleur de fond d'un champ indépendant donné par la valeur RGB stockée dans une table
    Bonjour à tous,

    Je travaille avec Access 2010 et je suis confrontée à un problème avec un formulaire affiché en "Formulaires continus" pour "colorier" le fond d'un champ indéprendant en fonction des valeurs affichées dans mon formulaire.

    Mon formulaire est basée sur une table "TB_COULEUR" construite comme suit :
    PK_COULEUR (clé primaire - numéro auto)
    NOM_COULEUR (texte)
    R_COULEUR (numérique)
    G_COULEUR (numérique)
    B_COULEUR (numérique)

    Dans ma partie "En-tête de formulaire" j'ai mes étiquettes de champ de table et dans ma partie "Détails" j'ai les champs de la table.
    J'ai ajouté un champ indépendant dans ma partie "Détails" et je souhaiterais que ce champs ait comme couleur de fond la couleur spécifiée dans l'enregistrement sur lequel il est positionné.

    Voici mon formulaire :
    Nom : ExempleAccess.png
Affichages : 2825
Taille : 29,5 Ko

    Voici ce que j'aimerais (Exemple avec Excel) :
    Nom : Exemple.png
Affichages : 5774
Taille : 23,1 Ko

    J'ai fait quelques tests et j'arrive à "colorier" mon champ mais le problème c'est qu'il est colorié partout de la même couleur ... j'ai également essayé de mettre un bouton qui "colorie" le champ si on clique dessus mais ce n'est pas le but recherché ... je souhaiterais que à l'ouverture du formulaire on voit le visuel ...

    Merci d'avance pour votre aide et j'espère avoir été clair dans ma description de problème.

    Si vous souhaitez plus de précision n'hésitez pas à me contacter.

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour,

    Oui, c'est un des pièges d'Access particulièremnt frustrant. Dans les formulaires en continu il considère que les champs indépendants existent en un seul exemplaire donc si tu le change sur un, il change sur l'autre.

    Il n'y a pas de parade simple mais voici ce que tu peux faire :

    Pour les données
    • créer un champ de données dans ta source de données qui contient la valeur que tu veux.
      utiliser un autre champ pour ton affichage


    Pour l'affichage
    • Utiliser la mise en forme conditionnelle qui se base sur la valeur du champ. Attention il y a un nombre max de tests possibles, en 2003 c'est limité à 3 mais je crois qu'il y en a plus en 2010.
      Utiliser un champ d'image dépendant. Selon la valeur une image est affichée.


    A+

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Autre idée, utiliser le "ColorPicker" de Windows.

    Il y a un article intéressant là

    http://www.la-solutions.co.uk/conten...ourChooser.htm

    A+

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    Sinon, tu peux utiliser le composant OWC comme expliqué dans ce tuto
    Avec ce code :
    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
    Private Sub Form_Open(Cancel As Integer)
        Dim wks As OWC11.Spreadsheet
        Dim fld As DAO.Field, rst As DAO.Recordset
        Dim strSql As String
        Dim i As Integer, j As Integer
     
        ' ===== affectation =====
        i = 1
        j = 1
        Set wks = Me.SpreadMFC.Object
        strSql = "SELECT * FROM T_couleurs;"
        Set rst = CurrentDb.OpenRecordset(strSql)
     
        With wks
        ' ===== préparation de l'aspect =====
            .DisplayToolbar = False                      ' on désactive la barre d'outils
            With .Windows(1)
                .DisplayHorizontalScrollBar = False      ' on désactive la barre de défilement horizontale
                .DisplayWorkbookTabs = False             ' on désactive la visualisation des onglets
                .DisplayColumnHeadings = False           ' on désactive les entêtes de colonnes
                .DisplayRowHeadings = False              ' on désactive les entêtes de lignes
            End With
            .Windows(1).FreezePanes = False
     
            ' ===== mettre les entêtes de colonnes =====
            For Each fld In rst.Fields
                .Cells(i, j).Value = fld.Name
                j = j + 1
            Next fld
     
            ' ===== formatage de l'entête =====
            .Range(.Cells(i, 1), .Cells(i, j - 1)).Interior.Color = RGB(192, 192, 192)
     
            ' ===== on remplit maintenant la feuille =====
            i = i + 1
            While Not rst.EOF
                j = 1
                For Each fld In rst.Fields
                    .Cells(i, j).Value = fld.Value
                    j = j + 1
                Next fld
                .Cells(i, j).Interior.Color = RGB(rst("R"), rst("G"), rst("B"))
                i = i + 1
                rst.MoveNext
            Wend
     
            ' ===== formatage de la feuille =====
            With .Range("A1:E" & wks.Range("A1").End(xlDown).Row)
                .Columns.AutoFit
                .Borders.LineStyle = xlContinuous
            End With
        End With
     
        ' ===== libération =====
        rst.Close
        Set rst = Nothing
        Set wks = Nothing
    End Sub
    on obtient ce résultat :
    Nom : Capture.PNG
Affichages : 3947
Taille : 11,0 Ko

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Attention, il me semble que OWC n'est plus supporté après Access 2007.

    A+

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    En effet, il a fallu que j'installe OWC11 et que j'aille rechercher le .dll
    La question que je me posais c'est : "Que se passerait-il si je déployais une appli avec OWC sur un poste équipé du runtime ?"

    EDIT : Je viens de tester et en installant le composant OWC11 sur le poste utilisateur avec le runtime 2010, ça fonctionne

  7. #7
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Bonjour à tout le monde.

    Merci pour toutes vos réponses.

    Je vais les étudier de près et essayer de faire quelques tests afin de voir les possibilités que j'ai.

    Je vous redonne des nouvelles très vite.

    MERCI POUR VOTRE AIDE

  8. #8
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Bonjour à tous,

    Voila, j'ai effectué mes tests et avec votre aide j'ai trouvé une solution (qui ne me plait pas spécialement visuellement mais qui est fonctionnelle).

    J'ai opté pour la solution proposée par "paidge" qui me recommandait d'utiliser un composant "OWC" selon un tutoriel (http://starec.developpez.com/tuto/msfcillimitee/).
    (le tuto est super ! :-) ... )

    Voici le résultat :
    Nom : FRM_CouleurStandard.png
Affichages : 4168
Taille : 34,4 Ko

    J'ai utilisé le code suivant (un copier - coller à 95% du code que "paidge" a donné ---> MERCI ) :

    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
     
    Private Sub Form_Open(Cancel As Integer)
        Dim wks As OWC11.Spreadsheet
        Dim fld As DAO.Field, rst As DAO.Recordset
        Dim strSql As String
        Dim i As Integer, j As Integer
     
     
        ' ===== affectation =====
        i = 1
        j = 1
        Set wks = Me.SpreadMFC.Object
        strSql = "SELECT NOM_COULEUR, R_COULEUR, G_COULEUR, B_COULEUR, DETAIL_COULEUR FROM TB_COULEUR;"
        Set rst = CurrentDb.OpenRecordset(strSql)
     
        With wks
        ' ===== préparation de l'aspect =====
            .DisplayToolbar = False                      ' on désactive la barre d'outils
            With .Windows(1)
                .DisplayHorizontalScrollBar = False      ' on désactive la barre de défilement horizontale
                .DisplayWorkbookTabs = False             ' on désactive la visualisation des onglets
                .DisplayColumnHeadings = False           ' on désactive les entêtes de colonnes
                .DisplayRowHeadings = False              ' on désactive les entêtes de lignes
            End With
            .Windows(1).FreezePanes = False
     
        ' ===== mettre les entêtes de colonnes =====
            For Each fld In rst.Fields
                .Cells(i, j).Value = fld.Name
                j = j + 1
            Next fld
     
        ' ===== formatage de l'entête =====
            .Range(.Cells(i, 1), .Cells(i, j - 1)).Interior.Color = RGB(192, 192, 192)
     
        ' ===== on remplit maintenant la feuille =====
            i = i + 1
            While Not rst.EOF
                j = 1
                For Each fld In rst.Fields
                    .Cells(i, j).Value = fld.Value
                    j = j + 1
                Next fld
                .Cells(i, j).Interior.Color = RGB(rst("R_COULEUR"), rst("G_COULEUR"), rst("B_COULEUR"))
                i = i + 1
                rst.MoveNext
            Wend
     
        ' ===== formatage de la feuille =====
            With .Range("A1:E" & wks.Range("A1").End(xlDown).Row)
                .Columns.AutoFit
                .Borders.LineStyle = xlContinuous
            End With
        End With
     
        ' ===== libération =====
        rst.Close
     
        Set rst = Nothing
        Set wks = Nothing
     
    End Sub
    Je peux donc mettre ce problème en RESOLU grâce à votre aide ...

    Merci beaucoup et bonne journée à tout le monde.

    :-) :-) :-)

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/03/2014, 19h42
  2. Réponses: 2
    Dernier message: 02/04/2012, 08h34
  3. Couleur de fond d'un champ
    Par leloup84 dans le forum Débuter
    Réponses: 17
    Dernier message: 03/04/2008, 10h44
  4. [POO] changer la couleur de fond d'un champ formulaire
    Par LeXo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/03/2007, 09h08
  5. Changer la couleur de fond d'un champ "text"
    Par nic211 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/02/2005, 13h50

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