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 :

format conditionnel avec vba [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Par défaut format conditionnel avec vba
    Bonjour, je souhaite rechercher dans une plage de cellules toutes celles qui ont un format conditionnel (deux couleurs, rouge ou vert selon le chiffre qui est dans la cellule) et, parmi celles-ci, isoler celle qui réponde à la condition "rouge"... je ne sais pas si je suis claire....

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Bonjour,

    Je viens de faire ça assez rapidement. Tu as des commentaires dans le code pour aider.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
     
    For i = 1 To 100 'Pour tes 100 premières lignes et ta colonne A (il te faut une double boucle pour d'autres colonnes)
        If Cells(i, 1).Interior.ColorIndex = 3 Or Cells(i, 1).Interior.ColorIndex = 10 Then
            Cells(i, 2).Value = "Format Conditionnel" 'On affiche un message à côté des cellules présentant un format conditionnel
            If Cells(i, 1).Interior.ColorIndex = 3 Then
                Cells(i, 3).Value = "O.K." 'O.K. à côté des cellules rouges
            Else
                Cells(i, 3).Value = "K.O." 'K.O. à côté des cellules vertes
            End If
        End If
    Next
     
    End Sub
    Si tu veux quelque chose de plus adapter à tes besoins, il va falloir expliciter un peu mieux que ça tes besoins. Quelle est la plage de cellules en question ? Que faut-il faire lorsqu'on trouve un format conditionnel (vert ou rouge peu importe) ? Rien ? Faut-il seulement faire quelque chose lorsqu'on trouve du rouge ? Que faut-il faire alors ? Marquer OK dans la cellule adjacente ? Supprimer les autres ?

    A ton clavier

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Bonjour Dead, désolé mais .Interior.ColorIndex ne renvoi pas la couleur d'un format conditionnel, il faut une fonction en VBA asser compliquée. Si ça intéresse je doit encore avoir ça dans mes cartons.
    A+

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Par défaut
    Citation Envoyé par LeForestier Voir le message
    Bonjour,
    Bonjour Dead, désolé mais .Interior.ColorIndex ne renvoi pas la couleur d'un format conditionnel, il faut une fonction en VBA asser compliquée. Si ça intéresse je doit encore avoir ça dans mes cartons.
    A+
    oui ça m'interesse vraiment !!! merci de vous pencher ainsi sur mon problème
    pour expliquer plus complètement, j'ai un fichier dont certains chiffres (mais pas tous) viennent d'autres fichiers. Certaines cellules ont une mise en forme conditionnelle (par exemple, si la valeur est inférieure à 75 mettre en rouge, sinon mettre en bleu). Mais bien sur, lorsque je regarde la véritable couleur des cellules, elles sont "automatiques". Je voudrais "compter" les cellules écrites en rouges, qu'elles viennent ou non d'une mise en forme conditionnelle...
    (le tableau est assez grand et toutes les lignes et colonnes sont concernées)

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Bonjour LeForestier et re les autres,

    Damn ! Je croyais que la mise en forme conditionnelle ne faisait qu'attribuer .Interior.ColorIndex à certaines cellules Au temps pour moi

    Du coup, ta proposition m'intéresse aussi

    EDIT : juste pour être bien clairs quant au code final, tu veux compter les cellules rouges provenant de la mise en forme conditionnelle ET celles qui sont rouges par un simple .Interior.ColorIndex (lorsque tu règles la couleur de fond de la cellule) ?

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Dans un module général (Module1 par exemple) tu colle le code ci-dessous
    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
    Public Sub NbRouge()
    Dim Plage As Range
    Dim Cel As Range
    Dim Compteur As Long
        Set Plage = Range("A1:H20")
        For Each Cel In Plage
            If Cel.Interior.ColorIndex = 3 Then
                Compteur = Compteur + 1
            ElseIf Cel.FormatConditions.Count > 0 Then
                If MFC(Cel) = 3 Then
                    Compteur = Compteur + 1
                End If
            End If
        Next Cel
        'Adapter l'adresse
        Range("A1")=compteur
    End Sub
     
     
    Private Function MFC(RG As Range) As Integer
    Dim e As Long, i As Byte, Test As Boolean
    Dim MFCobj As FormatCondition
     
        For i = 1 To RG.FormatConditions.Count
            Set MFCobj = RG.FormatConditions(i)
            If MFCobj.Type = xlCellValue Then
                Select Case MFCobj.Operator
                Case xlEqual
                    Test = RG = Evaluate(MFCobj.Formula1)
                Case xlNotEqual
                    Test = RG <> Evaluate(MFCobj.Formula1)
                Case xlGreater
                    Test = RG > Evaluate(MFCobj.Formula1)
                Case xlGreaterEqual
                    Test = RG >= Evaluate(MFCobj.Formula1)
                Case xlLess
                    Test = RG < Evaluate(MFCobj.Formula1)
                Case xlLessEqual
                    Test = RG <= Evaluate(MFCobj.Formula1)
                Case xlNotBetween
                    Test = (RG < Evaluate(MFCobj.Formula1) Or RG > Evaluate(MFCobj.Formula2))
                Case xlBetween
                    Test = (RG >= Evaluate(MFCobj.Formula1)) And (RG <= Evaluate(MFCobj.Formula2))
                End Select
                If Test Then
                    MFC = MFCobj.Interior.ColorIndex
                    Exit Function
                End If
            End If
        Next i
        MFC = 0
    End Function
    Sur la feuille où tu veux compter tu met un bouton qui envoi à la macros NbRouge
    Pas oublié d'adapter la plage à tester et la cellule où tu veux le résultat.
    A+
    Edit: Faut mettre un bouton sur la feuille et pas un raccourci clavier, les sub ne fonctionne que sur la feuille active.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Re,

    Je viens de trouver ce qu'il fallait pour résoudre le problème !

    Alors, voilà la fonction lié au format conditionnel :

    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
    Public Function CouleurMFC(RG As Range, Optional Mode As Byte = 0) As String
    Dim e As Long, i As Byte, LoTest As Boolean
    Dim LoMFC As FormatCondition
        Application.Volatile
        For i = 1 To RG.FormatConditions.Count
            Set LoMFC = RG.FormatConditions(i)
            If LoMFC.Type = xlCellValue Then
                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
                        CouleurMFC = LoMFC.Interior.ColorIndex
                    Exit Function
                End If
            End If
        Next i
        CouleurMFC = 0
    End Function
    Et voilà la procédure principale :

    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
    Sub test()
     
    Dim i As Long, j As Long
    Dim cpt As Long
     
    cpt = 0
     
    For i = 1 To 100
        For j = 1 To 20
            If Cells(i, j).Interior.ColorIndex = 3 Or CouleurMFC(Cells(i, j)) = 3 Then
                cpt = cpt + 1
            End If
        Next
    Next
     
    MsgBox cpt
     
    End Sub
    Dans ce cas, les tests ne sont faits que pour les 100 premières lignes et les 20 premières colonnes. A toi de changer ça. Le compteur cpt s'incrémente de 1 à chaque fois que la couleur rouge est trouvée soit en fond de cellule classique, soit en fond pour celles soumises à un format conditionnel.

    Ainsi, tu as un MsgBox qui se déclenche à la fin et qui te dit combien de cellules "rouges" tu as dans ta plage considérée. Et voilà !

    EDIT : et mince, faudrait que je pense à rafraîchir les pages que je laisse ouvertes depuis 30 mins pendant que je m'amuse dans Excel

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    EDIT : et mince, faudrait que je pense à rafraîchir les pages que je laisse ouvertes depuis 30 mins pendant que je m'amuse dans Excel
    Comme je l'avais sur mon PC j'ai pas du chercher.

    Faudrai enlever
    ça ne sert que quand c'est une fonction de feuille
    Et comme tu ne te sert pas de Mode tu peu aussi supprimer
    De plus tu ne renvoi pas un String mais un integer.

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Alala, je me suis fait "grillé" lamentablement

    Pour le string, je l'avais changé, c'était un variant à la base. Et je m'en suis rendu compte après avoir validé le post mais j'ai eu la flegme de changer alors que ça marchait correctement

    Par contre, tu viens encore de m'en apprendre sur reste

    A bientôt pour de nouvelles leçons ! (pour moi )

    Et bonne chance pour la suite didinette56.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 4
    Par défaut MERCIIIIIIII
    Ca marche du feu de Dieu, sauf que j'ai modifié interior par font. Mais sinon, c'est géant et je n'aurais jamais pu m'en sortir sans vous ! merci mille fois !

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

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-2013] Tri multi-conditionnel avec VBA
    Par Suc_Pith dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/02/2015, 20h33
  3. Problème de format conditionnel avec condition
    Par Chrisp2 dans le forum Excel
    Réponses: 3
    Dernier message: 29/10/2014, 12h52
  4. format conditionnel avec condition
    Par Chrisp2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/10/2014, 14h45
  5. [XL-2003] reproduire "Format painter" avec VBA
    Par MacroFlavia dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/09/2011, 15h16

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