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 EXCEL]: Savoir si une mise en forme conditionnelle est active


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 41
    Points
    41
    Par défaut [VBA EXCEL]: Savoir si une mise en forme conditionnelle est active
    Bonjour,

    Je voudrais connaitre la formule magique pour détecter qu'une mise en forme conditionnelle est active sur une cellule. Je détecte la couleur issue de la mise en forme conditionnelle, mais je ne sais pas si cette mise en forme est active sur la cellule. De plus, cells(i,j).Interior.Color détecte la couleur de la cellule hors mise en forme (la cellule peut etre rouge a cause de la mise en form mais le resultat est blanc)

    Pouvez vous m aider ?
    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
     
    For i = 1 To nblignes
       For j = 1 To nbcolonnes
       NbFormatConditons = Cells(i, j).FormatConditions.Count
     
           For k = 1 To NbFormatCondions
               If Cells(i, j).FormatConditions(k).Interior.Color = vbRed then
                    'Je sais que le format cond. est de fond rouge mais je ne sais pas 
                    'si la mise en forme est activé sur cette cellule. (enabled?)
                    MSGBOX "UNE CELLULE OBLIGATOIRE NON RENSEIGNEE"
                    '....
               end if
           Next k
     
         Next j
    Next i

  2. #2
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    Je ne crois pas qu'il existe de propriété pour cela, il faut écrire une méthode de test

  3. #3
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    il vaudrait mieux une approche plus générique, du type

    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
    Function TestCondition(Target As Range) As Boolean
    Dim MonFormat As FormatCondition, Lim1 As Variant, Lim2 As Variant, Result As Boolean
    Dim Valeur As Variant
     
    For Each MonFormat In Target.FormatConditions
        If MonFormat.Type = xlCellValue Then
            Valeur = Target.Value
            Select Case MonFormat.Operator
                Case xlBetween, xlNotBetween
                    Lim1 = Application.Evaluate(MonFormat.Formula1)
                    Lim2 = Application.Evaluate(MonFormat.Formula2)
                    Result = IIf(Application.WorksheetFunction.Min(Lim1, Lim2) < Valeur And Application.WorksheetFunction.Max(Lim1, Lim2) > Valeur, True, False)
                    TestCondition = Result Eqv MonFormat.Operator = xlBetween
     
                Case xlEqual, xlNotEqual
                    Lim1 = Application.Evaluate(MonFormat.Formula1)
                    Result = Lim1 = Valeur
                    TestCondition = Result Eqv MonFormat.Operator = xlEqual
     
                Case xlLess, xlGreater
                    Lim1 = Application.Evaluate(MonFormat.Formula1)
                    If Lim1 <> Valeur Then
                        Result = IIf(Lim1 > Valeur, True, False)
                        TestCondition = Result Eqv MonFormat.Operator = xlLess
                    Else
                        TestCondition = False
                    End If
     
                Case xlLessEqual, xlGreaterEqual
                    Lim1 = Application.Evaluate(MonFormat.Formula1)
                    If Lim1 <> Valeur Then
                        Result = IIf(Lim1 > Valeur, True, False)
                        TestCondition = Result Eqv MonFormat.Operator = xlLess
                    Else
                        TestCondition = True
                    End If
     
                End Select
        Else
            TestCondition = Application.Evaluate(MonFormat.Formula1)
        End If
        If TestCondition = True Then Exit Function
    Next
     
    End Function

  4. #4
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    D'abord le but n'est pas de savoir si il existe une FormatCondition mais de savoir si une des conditions est remplie.
    Si le but était de savoir s'il existait une FormatCondition, un simple appel de FormatConditions.Count suffirait sans avoir besoin de gérer les erreurs
    Enfin si le but était de savoir combien de cellule ont un FormatCondition tu l'aurais directement avec SpecialCells(xlCellTypeAllFormatConditions)

    autres choses...

Discussions similaires

  1. [XL-2010] Installer une mise en forme conditionnelle avec VBA
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 04/04/2019, 15h33
  2. [XL-2007] VBA-MFC Modifier la plage d'application d'une mise en forme conditionnelle
    Par sl.info dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/11/2010, 23h51
  3. Copie d'une mise en forme conditionnelle
    Par jnauche dans le forum Excel
    Réponses: 3
    Dernier message: 24/09/2008, 15h04
  4. Cellules avec une mise en forme conditionnelle
    Par Peanut dans le forum Excel
    Réponses: 2
    Dernier message: 31/07/2008, 13h47
  5. Réponses: 6
    Dernier message: 07/08/2006, 11h26

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