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 :

Test couleur de fond [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Par défaut Test couleur de fond
    Bonjour à tous,

    En passant à la version 2007, mon programme rencontre un problème lors de l'exécution d'une macro qui test la couleur de fond de la cellule.
    en version 2003, le test se faisait sur le ColorIndex = 15, ici, en 2007, j'ai sélectionné la couleur "gris moyen" (3ième cellule à gauche dans les gris).
    En faisant un enregistrement automatique d'une macro pour connaître la valeur du "ColorIndex", il n'y a plus de ColorIndex mais un "ThemeColor = xlThemeeColorDark1" et un "TintAndShade = -0,24997111117893"
    lorsque je mets le code suivant dans ma macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      If (Selection.Interior.TintAndShade = -0.249946592608417) Then
    La macro passe au "Else" sans exécuter le Then.
    Auriez-vous une solution pour tester le code couleur d'une cellule?

    Merci d'avance pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Essayez cela en supposant que mes couleurs correspondent aux vôtres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      If Selection.Interior.Color = RGB(221, 217, 196) Then
    Sinon, les paramètres des couleurs sont accessibles dans l'onglet "Personnalisées" de l'icône couleurs de remplissage.

    Cordialement.

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    l'affichage de la couleur ne fonctionne pas ?

    Debug.Print Activecell.Interior.ColorIndex … (ou .Color)

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Par défaut
    Bonjour Marc_L et Eric,

    J'avais bien obtenu le code couleur dans une variable et j'ai le même dans le Debug.Print le code est 2.

    J'ai essayé avec le IF ... RGB(221, ... ) mais ça ne va pas non plus.

    La couleur de fond est mise en utilisant la mise en forme conditionnelle : si je mets la couleur dans la cellule en utilisant directement la couleur de remplissage dans le ruban accueil et que je prends la 3ième case, j'ai le code couleur 15, si je passe par la mise en forme conditionnelle, pour la même sélection de case en passant d'abord par le mode personnalisé, j'obtiens le code 2 alors que je sélectionne la même case couleur.

    Le problème, c'est que lors du test sur la cellule suivante qui est avec un fond blanc, j'ai toujours le code couleur 2...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Voir la réponse de Philippe TULLIEZ sur ce message

    Détecter-Exploiter-Paramètres d'une MFC

    Il s'agit d'utiliser cette fonction :

    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
    Public Function CouleurMFC(RG As Range, Optional Mode As Byte = 0) As Variant
     Dim e As Long, i As Byte, LoTest As Boolean
     Dim LoMFC As FormatCondition
     Application.Volatile
     'boucle sur le nombre de condition(s)
     'Si pas de MFC .FormatConditions.Count renvoi 0
     For i = 1 To RG.FormatConditions.Count
      Set LoMFC = RG.FormatConditions(i)
      If LoMFC.Type = xlCellValue Then
        'tester le type de la formule entrée
        Select Case LoMFC.Operator
          Case xlEqual
               LoTest = RG = Evaluate(LoMFC.Formula1)
          Case xlNotEqual
               LoTest = RG <> Evaluate(LoMFC.Formula1)
          Case xlGreater
               LoTest = RG > Evaluate(LoMFC.Formula1)
          Case xlGreaterEqual
               LoTest = RG >= Evaluate(LoMFC.Formula1)
          Case xlLess
               LoTest = RG < Evaluate(LoMFC.Formula1)
          Case xlLessEqual
               LoTest = RG <= Evaluate(LoMFC.Formula1)
          Case xlNotBetween
               LoTest = (RG < Evaluate(LoMFC.Formula1) Or RG > Evaluate(LoMFC.Formula2))
          Case xlBetween
               LoTest = (RG >= Evaluate(LoMFC.Formula1)) And (RG <= Evaluate(LoMFC.Formula2))
        End Select
        If LoTest Then
          'Peu ajouter d'autre format si nécessaire,
            'comme la bordure, la police etc..
          Select Case Mode
            Case 0
               CouleurMFC = LoMFC.Interior.ColorIndex
            Case 1
               CouleurMFC = LoMFC.Interior.Color
          End Select
          Exit Function
        End If
      End If
     Next i
     CouleurMFC = 0
    End Function
    Votre condition devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       If CouleurMFC(Selection, 0) Then
    Elle fonctionne bien chez moi.

    Cordialement.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Par défaut
    Rebonjour Eric,

    Merci pour votre réponse.

    j'ai essayé ton code mais en vain, je viens de créer un fichier minimum que je joints à ce message.
    Il suffit d'exécuter la macro. Vous verrez qu'il n'y a pas de détection de couleur. Les cellules de la colonne A sont grisées par la mise en forme conditionnelles et celles de la B en utilisant le ruban "Accueil et le Bouton couleur de remplissage où j'ai sélectionné la 3ieme case à gauche (Blanc plus sombre 25%),.
    Je suis vraiment embêté car le code "colorindex" en XL-2003 fonctionnait très bien et avait la valeur 15.

    Désolé, avec la macro, j''envoie le prg "zippé".

    Encore merci pour l'aide.
    Fichiers attachés Fichiers attachés

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ci-joint, le fichier corrigé.

    Ta MFC est basée sur une formule alors que la fonction est basée sur la valeur d'une cellule.

    En ce qui concerne la colonne B, j'ai modifié le code. Il correspond à ma première réponse aux paramètres RGB près.

    Cordialement.

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Par défaut
    Merci Eric,

    Le code fonctionne bien, je pourrais l'utiliser avec la fonction CouleurMFC mais pour l'évolution de mon programme, j'aimerais aller un peu plus loin et connaître le code couleur de la couleur conditionnelle dans la cellule.
    Pour la même sélection (de A1:A4) j'ai ajouté une condition pour me mettre la cellule A3 en bleu si elle contient la valeur 3, (valeur que j'ai mise en A3). La cellule se met bien en bleu. A l'exécution de la macro, les cellules D1 et D3 affichent la même valeur (-4142), hors j'aimerais avoir la valeur du code color bleu en D3 (et aussi celle de D1 qui est en gris) si c'est possible.

    Si ce n'est pas possible, ce n'est pas trop grave.
    Je vous remercie beaucoup pour vos conseils.

    Bonne soirée.

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Par défaut
    Bonjour Eric,

    J'avais testé la macro sur le programme couleur et elle fonctionne bien.
    Le problème, c'est que l'utilisation de la forme conditionnelle est basée sur le contenu d'une cellule et pas sur une formule qui détermine le format.
    Si je mets dans la formule "=($A1=1)", la fonction CouleurMFC... ne fonctionne plus, hors dans mon programme, je suis obligé de passer par une formule dans le format conditionnel.

    Si vous trouvez une solution, je suis naturellement preneur, je vais, en attendant essayer de trouver une autre manière de détourner ce problème....

    Merci et bonne journée.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Par rapport à votre message d'hier 18h30, la formule devient dans la macro TestCouleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If CouleurMFC(Selection, 0) Then Selection.Offset(0, 3) = CouleurMFC(Selection, 0)
    Cordialement.

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Par défaut
    Bonjour Eric,

    Je vais abandonné le test sur la couleur dans une formule dans format conditionnel. Je vais laisser la formule dans la mise en forme conditionnelle comme avant pour mettre en gris les 5 colonnes suivantes qui respectent la condition (juste pour l'affichage).
    Je pensais rajouter simplement une condition dans la première cellule qui teste la valeur d'une cellule dans une autre feuille et qui met cette cellule en gris si la condition est remplie.
    ex :
    En "A1" j'ajoute la formule du style "=SI(Feuille!C4=1;Gris;Blanc).
    En "A2" j'ajoute la formule du style "=SI(Feuille!C5=1;Gris;Blanc)

    et ainsi de suite.

    Gris serait une fonction du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Gris(Selection as Range)
    '
    ' Met en gris la sélection
    '
        With Selection.Interior
            .ColorIndex = 15
        End With
     
    End Sub
    Il me faut trouver la façon d'introduire la macro dans la fonction de la cellule.

    Merci pour ton aide et j'ai appris que la mise en forme conditionnelle avec formule n'est qu'un affichage qu'il est difficile de tester.

    Bonne fin de journée.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par electrons Voir le message
    Bonjour Eric,

    Je vais abandonné le test sur la couleur dans une formule dans format conditionnel. Je vais laisser la formule dans la mise en forme conditionnelle comme avant pour mettre en gris les 5 colonnes suivantes qui respectent la condition (juste pour l'affichage).
    J'allais à l'instant te répondre que je ne voyais pas la difficulté de laisser un test sur les valeurs dans ton cas. As-tu au moins essayé de mettre toutes tes conditions en tant que valeurs ?

    Met un fichier en ligne correspondant exactement à ton problème et indique les différents cas à traiter pour voir.


    Cordialement.

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Par défaut
    Rebonjour Eric,

    Pour répondre à ta demande, mon programme gère les congés. J'ai une feuille par mois. En fonction de l'année entrée, chaque feuille se met à jour en grisant les samedi et dimanche ainsi que les jours fériés.

    Voici les 2 formules mises dans le format conditionnel en sélectionnant les cellules de A1 à A31 pour Janvier, de A1 à A29 pour février ...

    =WEEKDAY($A6:$A36;2)>=6
    =AND(COUNTIF(Feries;$A6)>0;$A6<>"")

    avec le même format (3ième cellule couleur à gauche(blanc 25%)).
    Dans la 2ième formule, 'feriers' est le nom donné à un ensemble de cellules qui reprennent tous les congés calculés en fonction de l'année entrée.

    Mon problème principal est qu'en fonction de la couleur de la cellule, j'ai un test qui rempli différemment la feuille à imprimer pour la gestion des heures supplémentaires :

    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
    If  (Selection.Interior.ColorIndex <> 15) Then
                 Sheets("PrintHrSup").Select
                    'Saisie de l'heure et des minutes en entier pour la conversion en décimale
                Heure = Hour(Worksheets(FeuilleActive).Range("D" & CptLgMois)        
                MinuteInteger = Minute(Worksheets(FeuilleActive).Range("D" & CptLgMois)                     
           If (Heure >= 18) Then              
                    Call HrArrondi(Heure, MinuteInteger, Ferie)               
                    Cells(CptHrSup, 2).Value = Heure & " Hr " & MinuteInteger             
           End If
          Else
                    Sheets("PrintHrSup").Select
                    If Worksheets(FeuilleActive).Range("D" & CptLgMois) <> BLANK Then
                        Ferie = True
                        Heure = Hour(Worksheets(FeuilleActive).Range("E" & CptLgMois))
                        MinuteInteger = Minute(Worksheets(FeuilleActive).Range("E" & CptLgMois))
                       Call HrArrondi(Heure, MinuteInteger, Ferie)
                       Cells(CptHrSup, 4).Value = Heure & " Hr " & MinuteInteger
                        Ferie = False
                    End If
     End If
     
            'test si l'heure de départ est > a 18, remplir la bonne case
            CptLgMois = CptLgMois + 1
            CptHrSup = CptHrSup + 1
     
     Next k
    Voila où j'en suis.
    Comme je le disais lors de mon dernier message, je peux tester dans une feuille "Calendrier" toutes les cellules qui sont mises à 1 si fériés ou week-end et à 2 si jour de travail normal, d'où mon dernier message.
    Encore merci pour vos conseils et votre persévérance.
    Bonne fin de journée.

    .

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par electrons Voir le message
    Voici les 2 formules mises dans le format conditionnel en sélectionnant les cellules de A1 à A31 pour Janvier, de A1 à A29 pour février ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    =WEEKDAY($A6:$A36;2)>=6
    =AND(COUNTIF(Feries;$A6)>0;$A6<>"")
    La solution de contournement serait donc de tester dans la macro les conditions pour chaque jour de la colonne A en adaptant les deux formules pour ne tester que le jour étudié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =WEEKDAY($A6:$A36;2)>=6
    =AND(COUNTIF(Feries;$A6)>0;$A6<>"")
    Bon courage.

    Cordialement.

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

Discussions similaires

  1. 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
  2. Réponses: 5
    Dernier message: 27/04/2006, 14h51
  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