VBA Mise en Forme Conditionnelle [Résolu/Fermé]

Signaler
Messages postés
193
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
3 août 2012
-
Messages postés
193
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
3 août 2012
-
Bonjour,

J'ai un tableau avec une vingtaine de cellules soumise à une mise en forme conditionnelle
(il s'agit de valeurs numérique, la mise en forme renvoi vrai ou est active si la valeur dépasse le seuil, l'intérieur de la cellule devient rouge)

Mon problème est que je voudrais répertorier toutes les conditions qui sont actives, un peu comme une alarme, si la cellule est rouge alors la condition de cette mise en forme est vrai et elle est repérée.

Et tous cela en VBA, du style cela, if FormatConditions(1) = True then copy cells(i,1).value

J'ai pas mal cherché et apparemment, pour FormatConditions on ne peut pas savoir si
la condition renvoie Vrai.

C'est pour cela que je me tourne vers vous, si quelqu'un a une idée,

Merci d'avance pour votre aide.

9 réponses

Je pense que tu n'as pas étudié le code de la fonction transmise ci-dessus.
En effet, je l'ai adapté pour obtenir comme résultat si la condition est vrai; il refait le calcul permettant d'appliquer le format conditionnel

Son utilisation sera donc la suivante :
If fctMFC(ThisWorkbook.Worksheets(1).Cells(I, 1)) = True Then _
 ThisWorkbook.Worksheets(1).Cells(I, 1).Copy ThisWorkbook.Worksheets(2).Cells(J, 1)

La pratique étant beaucoup plus explicite que des écrits, voici un exemple d'utilisation de la fonction fctMFC dans les circonstances de ta demande
4
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

Messages postés
6284
Date d'inscription
lundi 28 janvier 2008
Statut
Membre
Dernière intervention
29 avril 2020
1 215
Essaye plutôt avec la couleur choisie

If ActiveCell.Interior.ColorIndex = 3 then ...
Messages postés
193
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
3 août 2012
5
Sa fonctionne nickel, merci, super coup de pouce, effectivement je n'avais pas étudié le code comme il le fallait.

Merci encore a toi

a+
Messages postés
193
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
3 août 2012
5
Salut

Merci d'abord pour ton aide, c'est une bonne idée, mais le soucis c'est que la cellule n'est pas vraiment en rouge, si tu fais clique droit, format cellule dans l'onglet motif il n'y a aucune couleur, la couleur est ajoutée par la mise en forme conditionnelle.
Messages postés
6284
Date d'inscription
lundi 28 janvier 2008
Statut
Membre
Dernière intervention
29 avril 2020
1 215
If ActiveCell.FormatConditions(1).Interior.ColorIndex = 3 then ...
Messages postés
193
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
3 août 2012
5
salut Farfadet88,

désolé j'ai déjà essayé cette façon, ça ne fonctionne pas, car le problème c'est que de cette manière, j'aurais toute les cellules dont la forme est de devenir a fond rouge même quand il n'y a pas d'alarme ou de condition Vrai.

Il me faut que celle qui sont en condition Vrai.
Messages postés
193
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
3 août 2012
5
Personne n'a une autre idée ???
Bonjour,

L'option la plus rapide est de passer sur Office 2007 car il existe un filtre sur la couleur de la cellule ;)

Mais la curiosité apporte souvent des solutions; bien qu'il semblerait ne pas avoir de propriété pour vérifier si un format conditionnel est actif, il est possible de développer une fonction simulant le test du format conditionnel

Public Function fctMFC(rng As Range) As Boolean
  Dim varFC As Variant

  fctMFC = False                ' Intialisation de la fonction

  For Each varFC In rng.FormatConditions
    If varFC.Interior.ColorIndex = 3 Then
      ' La couleur de fond de la cellule de la condition est rouge
      Select Case varFC.Type
        Case xlCellValue        ' La valeur de la cellule est
          Select Case varFC.Operator
            Case xlEqual        ' égale à
              fctMFC = rng = Evaluate(varFC.Formula1)
            Case xlNotEqual     ' différente de
              fctMFC = rng <> Evaluate(varFC.Formula1)
            Case xlGreater      ' supérieur à
              fctMFC = rng > Evaluate(varFC.Formula1)
            Case xlGreaterEqual ' supérieure ou égale à
              fctMFC = rng >= Evaluate(varFC.Formula1)
            Case xlLess         ' inférieure à
              fctMFC = rng < Evaluate(varFC.Formula1)
            Case xlLessEqual    ' inférieur ou égale à
              fctMFC = rng <= Evaluate(varFC.Formula1)
            Case xlNotBetween   ' non comprise entre
              fctMFC = (rng < Evaluate(varFC.Formula1) Or rng > Evaluate(varFC.Formula2))
            Case xlBetween      ' comprise entre
              fctMFC = (rng >= Evaluate(varFC.Formula1)) And (rng <= Evaluate(varFC.Formula2))
          End Select
        Case xlExpression       ' La formule est
          fctMFC = Evaluate(varFC.Formula1)
      End Select
    End If
  Next
End Function

On peut pousser la fonction jusqu'au point de remonter l'information de format souhaitée à partir d'une constante placée en variable d'appel mais c'est une autre histoire ;)

Source : Adaptation de la Fonction qui retourne la couleur active d'une MFC
Messages postés
193
Date d'inscription
jeudi 2 octobre 2008
Statut
Membre
Dernière intervention
3 août 2012
5
Bonjour et merci d'avance pour votre aide,

J'ai déjà essayé cette fonction, je suis d'accord, on peut savoir la couleur ou divers format de la Mise en Forme Conditionnelle se trouvant dans une cellule donnée.

Par-contre, exemple je mets une MFC dans la cellule A1 qui dit, si la valeur de cette cellule est supérieur à 10 alors (donc si condition VRAI) l'intérieur de la cellule devient rouge.

Cette même cellule, quand la condition est VRAI, (Intérieur Rouge) n'est pas différente des autres, car si on clique droit sur format de cellule "MOTIF", là on se rend compte que l'intérieur de la cellule n'est pas rouge.

Donc tous portent à croire que c'est la mise en forme conditionnel qui gère ce format et c'est pour cela qu'on ne peut pas faire de boucle de recherche sur une cellule à fond rouge ou tout autre format.

Voila mon problème exactement.

Maintenant cette fonction me permet de dire, ok la cellule A1 a une MFC et devient en rouge, elle a sa comme format et comme bordure etc...

Mais la question la plus importante, on ne peut pas différencier d'une cellule qui à Condition VRAI (donc qui est ACTIVE dans l'exemple dépasse la valeur 10) d'une autre.

Je prend une cellule A1 et A2 qui ont la même MFC, j'en met une à valeur 11 l'autre à 2, l'une sera a fond rouge l'autre non, je prend cette fonction, je demande laquelle est en rouge il me dit les deux, pourquoi ? parce que les deux cellules ont pour format d'être rouge, c'est ce que cette fonction demande, mais elle demande pas de savoir laquelle est active.

Il est fort probable que cette fonction n'existe pas et se serait fort dommage de ne pas pouvoir mêler le VBA et les Mise en Forme Conditionnelle.
je précise que j'ai encore Excel 2003, il es possible aussi que dans 2007 cela change.

J'espère avoir été bien explicite et merci encore pour votre aide.