Bonjour,

Après avoir chercher un peu partour sur le forum et avoir essayé un bout de code trouvé sur un autre post, je lance un sos...

J'ai un tableau avec des cellules qui contiennent des mises en forme conditionnelles. Si les cases ne sont pas complétées correctement la cellule est en orange (code 45). J'aimerai savoir si le test est ok ou non.

En gros, je voudrais tester à l'enregistrement du fichier qu'il ne reste aucune cellule orange, c'est à dire cellule obligatoire non remplis.

J'ai testé la fonction evaluate() avec le code suivant trouvé sur le forum mais je n'arrive pas à la faire fonctionner...

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
53
54
55
56
57
Public Sub NbRouge()
Dim Plage As Range
Dim Cel As Range
Dim Compteur As Long
    Set Plage = Range("B4:B7")
    For Each Cel In Plage
        If Cel.FormatConditions.Count > 0 Then
            If MFC(Cel) = 45 Then
                Compteur = Compteur + 1
            End If
        End If
    Next Cel
    'Adapter l'adresse
    Range("A2") = 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
 
 
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 
NbRouge
 
End Sub
En fait je ne rentre jamais dans la condition "If MFCobj.Type = xlCellValue Then"
car MFCobj.Type = 1 et xlCellValue = 2

un exemple de mise en forme conditionnelle sur la première cellule testée :
=SI(B4="";VRAI)
Cette cellule est vide donc la condition est vérifiée.

J'espère avoir été suffisamment clair

Merci d'avance pour votre aide.