Mise en forme conditionnelle sournoise

Bonjour,

je souhaite faire une MFC sur un tableau qui s'affiche lorsqu'on réalise une recherche (feuille "ACCUEIL").

J'aimerai que toutes les lignes du tableau qui apparaît dont la valeur de la colonne L est "VRAI" soient écrites en rouge..

J'ai donc crée une règle de MFC. Pour être certain que mon tableau soit inclut dans cette règle, j'ai définit des plages larges "A1:L500".

Le problème est que des que je réalise une recherche, les valeurs de cette zone réglementée changent toutes seules, et définissent de nouvelles plages qui contournent parfaitement mon tableau !

Du coup pour éviter ce problème, je me suis dit que j'allais appliquer cette règle directement sur mon tableau source (feuille "SYNTHESE"). Le problème est que la règle n'est pas copiée avec les résultats de la recherche. Cette solution ne fonctionne pas.

Qu'en pensez-vous ?

2stock-mfc.xlsm (66.08 Ko)

Bonjour,

Il te suffit simplement d'appliquer ta MFC en fin de procédure. Ici, la condition porte sur la colonne L qui a la valeur "FAUX" :

Private Sub Textbox1_change()

    Application.ScreenUpdating = False

    Dim Plage As Range '<--- la plage est défini en fin de procédure à partir de B16

    Dim cell As Range, cell1 As Range, résultat As Range
    Dim i As Integer

    If TextBox1 = Empty Then Exit Sub

    '// Stockage des lignes sélectionnées
    With Feuil2.ListObjects(1)
        Set résultat = .HeaderRowRange  'entête sélection
        Set cell = .Range.Find(TextBox1, LookIn:=xlValues, lookat:=xlPart)
        If Not cell Is Nothing Then
            Set cell1 = cell
            Do
                i = cell.Row - .HeaderRowRange.Row   'indice ligne données du tableau
                Set résultat = Union(résultat, .DataBodyRange.Rows(i))
                Set cell = .Range.FindNext(cell)
            Loop Until cell.Address = cell1.Address
        End If
    End With

    '// Affichage et tri du résultat
    Me.Range(adresse_début).CurrentRegion.Clear
    résultat.Copy Me.Range(adresse_début)
    Me.Range(adresse_début).CurrentRegion.Sort Key1:=Range("D16"), Order1:=xlAscending, Header:=xlYes

    '// Réinitialisation de la recherche
    TextBox1.Activate

    '***********************************************************
    Set Plage = DefPlage(Worksheets("ACCUEIL"), 16, 2) 'utilise une fonction qui cherche la valeur la plus basse et la plus à droite (pas forcément la même)

    If Not Plage Is Nothing Then

        Plage.FormatConditions.Add xlExpression, , "=$L14=FAUX"
        Plage.FormatConditions(1).Interior.Color = 255
        Plage.FormatConditions(1).StopIfTrue = False

    End If
    '***********************************************************

End Sub

Function DefPlage(Fe As Worksheet, Optional L As Long = 1, Optional C As Long = 1) As Range

    On Error GoTo Fin

    With Fe

        Set DefPlage = .Range(.Cells(L, C), _
                       .Cells(.Cells.Find("*", .[A1], -4123, , _
                       1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
                       2, 2).Column))

    End With

    Exit Function

Fin:

    Set DefPlage = Nothing

End Function

Merci beaucoup Theze !!

Bonne journée !!

Rechercher des sujets similaires à "mise forme conditionnelle sournoise"