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

Macros et VBA Excel Discussion :

VBA_mise en forme conditionnelle


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut VBA_mise en forme conditionnelle
    Bonjour,

    petite question : est-il possible de créer une mise en forme conditionnelle sur la luminosité d'une cellule ?
    Je voudrais définir un seuil de luminosité d'une cellule à partir duquel la couleur de police du texte de cette cellule s'assombrit (pour simplifier le texte est blanc si le fond de la cellule est foncé et noir si le fond de la cellule est clair).

    Ma solution aurait été de définir l'expression de L (luminosité) dans le format TSL de la couleur mais, après avoir fouillé sur internet, il n'existe aucune solution concrète.

    Merci d'avance

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2002
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 838
    Points : 1 323
    Points
    1 323
    Par défaut
    Salut, si ça peut t'aider, voici une solution vba:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function GetLuminosity(cell As Range) As Double
        Dim color As Long
        Dim r As Integer, g As Integer, b As Integer
        Dim lum As Double
     
        color = cell.Interior.color
        r = color Mod 256
        g = (color \ 256) Mod 256
        b = (color \ 65536) Mod 256
     
        ' Calculer la luminosité
        lum = 0.2126 * r + 0.7152 * g + 0.0722 * b
        GetLuminosity = lum
    End Function
    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
    Sub ChangeFontColor()
        Dim cell As Range
        Dim lum As Double
        Dim ws As Worksheet
     
        Set ws = ActiveSheet
     
        ' Boucle sur chaque cellule dans la sélection
        For Each cell In ws.UsedRange
            If Not IsEmpty(cell) Then
                lum = GetLuminosity(cell)
                If lum < 128 Then
                    cell.Font.color = RGB(255, 255, 255)    ' Blanc si fond foncé
                Else
                    cell.Font.color = RGB(0, 0, 0)    ' Noir si fond clair
                End If
            End If
        Next cell
    End Sub
    Insère les 2 macros dans un module standard et exécute ChangeFontColor pour modifier la couleur de police. Tu peux jouer sur la variable lum pour définir tes seuils ou ajouter des seuils intermédiaires.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2024
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2024
    Messages : 25
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Franc Voir le message
    Salut, si ça peut t'aider, voici une solution vba:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function GetLuminosity(cell As Range) As Double
        Dim color As Long
        Dim r As Integer, g As Integer, b As Integer
        Dim lum As Double
     
        color = cell.Interior.color
        r = color Mod 256
        g = (color \ 256) Mod 256
        b = (color \ 65536) Mod 256
     
        ' Calculer la luminosité
        lum = 0.2126 * r + 0.7152 * g + 0.0722 * b
        GetLuminosity = lum
    End Function
    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
    Sub ChangeFontColor()
        Dim cell As Range
        Dim lum As Double
        Dim ws As Worksheet
     
        Set ws = ActiveSheet
     
        ' Boucle sur chaque cellule dans la sélection
        For Each cell In ws.UsedRange
            If Not IsEmpty(cell) Then
                lum = GetLuminosity(cell)
                If lum < 128 Then
                    cell.Font.color = RGB(255, 255, 255)    ' Blanc si fond foncé
                Else
                    cell.Font.color = RGB(0, 0, 0)    ' Noir si fond clair
                End If
            End If
        Next cell
    End Sub
    Insère les 2 macros dans un module standard et exécute ChangeFontColor pour modifier la couleur de police. Tu peux jouer sur la variable lum pour définir tes seuils ou ajouter des seuils intermédiaires.


    Bonsoir,

    merci pour le retour.

    Je n'ai pas encore testé ta fonction car la luminosité n'est pas égale à 0.2126 * r + 0.7152 * g + 0.0722 * b.
    J'ai fait le teste sur une couleur RGB(0,51,204), et bien 0.2126 * 0 + 0.7152 * 51 + 0.0722 * 204 = 51,204 et non 102 (car RGB(0,51,204) = HSL(160,255,102). Par contre ça fonctionne si j'ajoute la ligne lum = round(lum)*2 mais c'est totalement inutile puisque ça ne fonctionne que pour mon exemple.

    Ca aurait été trop facile que lum soit si facilement exploitable!

    Je suis preneur pour une autre solution

Discussions similaires

  1. mise en forme conditionnelle et vba
    Par malabar92 dans le forum Access
    Réponses: 4
    Dernier message: 26/04/2006, 14h18
  2. Mise en forme conditionnelle
    Par the big ben 5 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 23/12/2005, 15h20
  3. [VBA][Excel] mise en forme conditionnelle
    Par titflocon dans le forum Access
    Réponses: 9
    Dernier message: 19/12/2005, 10h13
  4. Réponses: 4
    Dernier message: 15/11/2005, 18h53
  5. Mise en forme conditionnelle en VBA / Cut-Paste
    Par priest69 dans le forum IHM
    Réponses: 4
    Dernier message: 03/09/2005, 13h54

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