Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vérifier si MEFC appliqué sur feuille

17 réponses
Avatar
ThierryK
Bonjour à toutes & à tous
et tous mes voux de santé, bonheur et prospérité pour cette nouvelle année

sur une feuille, j'ai de nombreuses Mise En Forme Conditionnelles (MEFC)
pour contrôler les erreurs:

exemple: MEFC pour les 2 cellules A1 & B1:
si A1<>B1 alors Format texte en gras et motif rouge

en théorie s'il n'y a pas d'erreur sur ma feuille, aucune MEFC ne devrait
s'appliquer.

mais comment vérifier qu'aucune MEFC n'est appliqué sur toute ma feuille?

en vous remerciant d'avance pour votre aide et vos conseils

ThierryK

Windows XP Pro SP3
Office 2003

7 réponses

1 2
Avatar
Philippe.R
Bonsoir,

Rien n'interdit de nommer 2 plages de cellules non adjacentes pour en
contrôler les caractéristiques deux à deux.
Si d'aventure, il s'agit à chaque fois de vérifier une égalité entre 2
cellules, il sera très simple de vérifier l'égalité des sommes des 2 plages
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/web/mpfe
News://news.microsoft.com/microsoft.public.fr.excel
"ThierryK" a écrit dans le message de
news:
Michdenis
ok pour les cellules adjacentes
encore merci,

mais j'ai également d'autres cellules situés un peu partout sur ma
feuille.

n'est il pas possible de définir plusieurs plages (non adjacentes)
et vérifier que la couleur de la MEFC (rouge) est appliquée dans chaque
cellule constituant les plages?


en vous remerciant d'avance pour votre aide et vos conseils

ThierryK



"michdenis" a écrit dans le message de groupe de
discussion :
Dans ta situation, à l'évidence, tu ne parles pas
des erreurs générées par Excel.

Pour tester si une mise en forme conditionnelle est en
application sur la plage de cellules, tu dois tester chacune
des cellules de la plages de cellules affectées de cette mise
en forme conditionnelle pour vérifier si la condition stipulée
est effectivement vérifiée.

Exemple de code :
'-------------------------------------
Sub Test()
Dim C As Range, X As Integer

With Worksheets("Feuil1")
'Définir la plage
For Each C In .Range("A1:A50")
'Définir la ou les conditions de la MEFC
If C.Value <> C.Offset(, 1) Then
X = X + 1
End If
Next
End With
If X <> 0 Then
MsgBox X & " erreurs trouvées"
Else
MsgBox "Aucune erreur"
End If
End Sub
'-------------------------------------



"ThierryK" a écrit dans le message de
groupe de discussion
:
Bonjour michdenis
et merci de t'intéresser à mon problème

en effet je n'ai pas été assez précis,

En A1 je fais la somme de x cellules "=somme("toutes les cellules
concernés")
en B1 je fais la somme de x AUTRES cellules "=somme("toutes les cellules
AUTRES concernés")

Et si tout est bon, A1 = B1

mais s'il y a une faute de frappe (nombre incorrect) dans les cellules
qui composent le total affiché en A1 ou B1, je le contrôle par la MEFC

en MEFC j'ai mis pour A1 & B1 ¡<>B1 (avec motif rouge)
donc si A1 est différent de B1 le motif est rouge
et si A1 = B1 le motif est celui du format de la cellule (gris)


cette feuille est ensuite envoyée par mail,
mais avant expédition, je souhaiterai m'assurer (par VBA) qu'il n'y a pas
de
cellule avec le motif de la MEFC en rouge
et cela sur toute la feuille (environ 50 MEFC)

penses-tu que c'est possible?

@+
cordialement


en vous remerciant d'avance pour votre aide et vos conseils

ThierryK

Windows XP Pro SP3
Office 2003






Avatar
michdenis
Si ta plage n'est pas trop grande, tu peux utiliser quelque chose
comme ceci .
Dans une nouvelle feuille, tu auras le nombre d'erreurs ainsi que
l'adresse des cellules où l'erreur aura été trouvé.

'-------------------------------------------
Sub test()

Dim Rg As Range, C As Range, Col As Range
Dim A As String, X As Variant, i As Integer
Dim Erreur As Integer, Tblo(), Sh As Worksheet

With Worksheets("Feuil1") ' Nom à adapter
.Activate
Set Rg = .Range("A1:C10") 'Plage à adapter
End With
i = 1
For Each Col In Rg.Columns
For Each C In Col.Cells
C.Select
If C.FormatConditions.Count > 0 Then
A = Replace(C.FormatConditions(1).Formula1, "=", "")
X = Split(A, "<>")
If Range(X(0)) <> Range(X(1)) Then
Erreur = Erreur + 1
ReDim Preserve Tblo(1 To i + 1)
Tblo(i) = C.Address
i = i + 1
End If
End If
Next
Next
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Erreur").Delete
Application.DisplayAlerts = True
Set Sh = Worksheets.Add
With Sh
.Name = "Erreur"
.Range("A1") = Erreur
.Range("B1").Resize(UBound(Tblo)) = Application.Transpose(Tblo)
End With
End Sub
'-------------------------------------------
Avatar
michdenis
Si tu préfères, tu pourrais modifier cette section de
la procédure pour ceci :

'----------------------------------------------
For Each C In Col.Cells
C.Activate
With C.FormatConditions
If .Count > 0 Then
If Evaluate(.Item(1).Formula1) = True Then
Erreur = Erreur + 1
ReDim Preserve Tblo(1 To i + 1)
Tblo(i) = C.Address
i = i + 1
End If
End If
End With
Next
'----------------------------------------------



"michdenis" a écrit dans le message de groupe de discussion :

Si ta plage n'est pas trop grande, tu peux utiliser quelque chose
comme ceci .
Dans une nouvelle feuille, tu auras le nombre d'erreurs ainsi que
l'adresse des cellules où l'erreur aura été trouvé.

'-------------------------------------------
Sub test()

Dim Rg As Range, C As Range, Col As Range
Dim A As String, X As Variant, i As Integer
Dim Erreur As Integer, Tblo(), Sh As Worksheet

With Worksheets("Feuil1") ' Nom à adapter
.Activate
Set Rg = .Range("A1:C10") 'Plage à adapter
End With
i = 1
For Each Col In Rg.Columns
For Each C In Col.Cells
C.Select
If C.FormatConditions.Count > 0 Then
A = Replace(C.FormatConditions(1).Formula1, "=", "")
X = Split(A, "<>")
If Range(X(0)) <> Range(X(1)) Then
Erreur = Erreur + 1
ReDim Preserve Tblo(1 To i + 1)
Tblo(i) = C.Address
i = i + 1
End If
End If
Next
Next
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Erreur").Delete
Application.DisplayAlerts = True
Set Sh = Worksheets.Add
With Sh
.Name = "Erreur"
.Range("A1") = Erreur
.Range("B1").Resize(UBound(Tblo)) = Application.Transpose(Tblo)
End With
End Sub
'-------------------------------------------
Avatar
Caetera
"ThierryK" a écrit dans le message de news:

en réalité j'ai + de 50 MEFC
éparpillés sur toute ma feuille
avec des cellules de comparaisons différentes et non adjacentes



********************
Il suffit de nommer les 2 plages et comparer les 2 sommes obtenues
PS : Que les cellules d'une plage soient adjacentes ou pas n'a strictement
aucune importance pour nommer cette plage

Etc
Avatar
ThierryK
Bonjour Caetera

merci pour ton conseil
j'ai sommé toutes les plages et je compare les valeurs

encore merci et bonne journée
ThierryK


<EtiennePloufCahé@wanadoo.fr> a écrit dans le message de groupe de
discussion :
"ThierryK" a écrit dans le message de
news:
en réalité j'ai + de 50 MEFC
éparpillés sur toute ma feuille
avec des cellules de comparaisons différentes et non adjacentes



********************
Il suffit de nommer les 2 plages et comparer les 2 sommes obtenues
PS : Que les cellules d'une plage soient adjacentes ou pas n'a strictement
aucune importance pour nommer cette plage

Etc





--
Bonjour à toutes & à tous



en vous remerciant d'avance pour votre aide et vos conseils

ThierryK

Windows XP Pro SP3
Office 2003 & 2007
Avatar
ThierryK
Bonjour Michdenis
encore merci pour ton aide

j'ai résolu mon soucis en sommant toutes les valeurs intermédiaires et en
comparant les totaux
donc plus qu'un seul contrôle à vérifier

j'ai utilisé ta procédure (réponse précédente) dans une autre partie de mon
fichier
pour suivre facilement les "erreurs"

encore merci et bonne journée

ThierryK


"michdenis" a écrit dans le message de groupe de
discussion :
Si tu préfères, tu pourrais modifier cette section de
la procédure pour ceci :

'----------------------------------------------
For Each C In Col.Cells
C.Activate
With C.FormatConditions
If .Count > 0 Then
If Evaluate(.Item(1).Formula1) = True Then
Erreur = Erreur + 1
ReDim Preserve Tblo(1 To i + 1)
Tblo(i) = C.Address
i = i + 1
End If
End If
End With
Next
'----------------------------------------------



"michdenis" a écrit dans le message de groupe de
discussion :

Si ta plage n'est pas trop grande, tu peux utiliser quelque chose
comme ceci .
Dans une nouvelle feuille, tu auras le nombre d'erreurs ainsi que
l'adresse des cellules où l'erreur aura été trouvé.

'-------------------------------------------
Sub test()

Dim Rg As Range, C As Range, Col As Range
Dim A As String, X As Variant, i As Integer
Dim Erreur As Integer, Tblo(), Sh As Worksheet

With Worksheets("Feuil1") ' Nom à adapter
.Activate
Set Rg = .Range("A1:C10") 'Plage à adapter
End With
i = 1
For Each Col In Rg.Columns
For Each C In Col.Cells
C.Select
If C.FormatConditions.Count > 0 Then
A = Replace(C.FormatConditions(1).Formula1, "=", "")
X = Split(A, "<>")
If Range(X(0)) <> Range(X(1)) Then
Erreur = Erreur + 1
ReDim Preserve Tblo(1 To i + 1)
Tblo(i) = C.Address
i = i + 1
End If
End If
Next
Next
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Erreur").Delete
Application.DisplayAlerts = True
Set Sh = Worksheets.Add
With Sh
.Name = "Erreur"
.Range("A1") = Erreur
.Range("B1").Resize(UBound(Tblo)) = Application.Transpose(Tblo)
End With
End Sub
'-------------------------------------------








--
Bonjour à toutes & à tous



en vous remerciant d'avance pour votre aide et vos conseils

ThierryK

Windows XP Pro SP3
Office 2003 & 2007
Avatar
michdenis
Si tu as créé une plage nommée des cellules affectées de
la mise à jour conditionnelle, modifie cette ligne :

Set Rg = .Range("A1:C10") 'Plage à adapter

Par

Set Rg = Range("Nom_Plage_nommée") 'Plage à adapter

Cela va grandement améliorer la performance de la procédure !




"ThierryK" a écrit dans le message de groupe de discussion
:
Bonjour Michdenis
encore merci pour ton aide

j'ai résolu mon soucis en sommant toutes les valeurs intermédiaires et en
comparant les totaux
donc plus qu'un seul contrôle à vérifier

j'ai utilisé ta procédure (réponse précédente) dans une autre partie de mon
fichier
pour suivre facilement les "erreurs"

encore merci et bonne journée

ThierryK


"michdenis" a écrit dans le message de groupe de
discussion :
Si tu préfères, tu pourrais modifier cette section de
la procédure pour ceci :

'----------------------------------------------
For Each C In Col.Cells
C.Activate
With C.FormatConditions
If .Count > 0 Then
If Evaluate(.Item(1).Formula1) = True Then
Erreur = Erreur + 1
ReDim Preserve Tblo(1 To i + 1)
Tblo(i) = C.Address
i = i + 1
End If
End If
End With
Next
'----------------------------------------------



"michdenis" a écrit dans le message de groupe de
discussion :

Si ta plage n'est pas trop grande, tu peux utiliser quelque chose
comme ceci .
Dans une nouvelle feuille, tu auras le nombre d'erreurs ainsi que
l'adresse des cellules où l'erreur aura été trouvé.

'-------------------------------------------
Sub test()

Dim Rg As Range, C As Range, Col As Range
Dim A As String, X As Variant, i As Integer
Dim Erreur As Integer, Tblo(), Sh As Worksheet

With Worksheets("Feuil1") ' Nom à adapter
.Activate
Set Rg = .Range("A1:C10") 'Plage à adapter
End With
i = 1
For Each Col In Rg.Columns
For Each C In Col.Cells
C.Select
If C.FormatConditions.Count > 0 Then
A = Replace(C.FormatConditions(1).Formula1, "=", "")
X = Split(A, "<>")
If Range(X(0)) <> Range(X(1)) Then
Erreur = Erreur + 1
ReDim Preserve Tblo(1 To i + 1)
Tblo(i) = C.Address
i = i + 1
End If
End If
Next
Next
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Erreur").Delete
Application.DisplayAlerts = True
Set Sh = Worksheets.Add
With Sh
.Name = "Erreur"
.Range("A1") = Erreur
.Range("B1").Resize(UBound(Tblo)) = Application.Transpose(Tblo)
End With
End Sub
'-------------------------------------------








--
Bonjour à toutes & à tous



en vous remerciant d'avance pour votre aide et vos conseils

ThierryK

Windows XP Pro SP3
Office 2003 & 2007
1 2