[Résolu mais sans MFC] Macro MFC avec formule personalisée

vgendron

XLDnaute Barbatruc
Bonjour,

j'ai besoin de vos lumières pour le problème suivant car je suis dans le flou total. voire le noir....

dans une feuille, j'ai une ligne sur laquelle est appliqué le filtre automatique. disons de A1 à D1
je voudrais mettre en évidence par une MFC les cellules pour lesquelles le filtre est activé. (le nouveau symbole d'Excel 2007, n'est guère mieux que la flèche bleue d'Excel 2003..)


pour savoir quelles sont les colonnes ou le filtre est actif, j'utilise la fonction de Boisgontier "ChampActif"
puis dans une règle de MFC, je colore en rouge la cellule si le filtre y est actif:

ce qui donne ceci:

la fonction: champactif ():


Function ChampActif(c)
Application.Volatile
ChampActif = Sheets(Application.Caller.Parent.Name).AutoFilter.Filters.Item(c.Column - Sheets(Application.Caller.Parent.Name).Range("_FilterDataBase").Column + 1).On
End Function

puis la macro de MFC:

Sub ColorChampActifs2()

'sélection des cellules contenant le filtrage automatique
Set LineDebut = Application.InputBox("selectionnez la première cellule de gauche de la zone", Type:=8)
LineDebut.Select
AdresseDebut = ActiveCell.Address(rowabsolute:=False, columnabsolute:=False)

Set ZoneAColorer = Range(ActiveCell, ActiveCell.End(xlToRight))
ZoneAColorer.Select
MsgBox ("ici")
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=champactif(" & AdresseDebut & ")"
MsgBox ("la")
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
MsgBox ("et ici")
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
MsgBox ("et la")
Selection.FormatConditions(1).StopIfTrue = True
MsgBox ("enfin ici")

End Sub

résultat lorsque je lance la macro:
une règle est bien définie.. MAIS, aucune mise en forme d'appliquée
j'ai placé quelques msgbox qui m'indiquent que la macro ne va finalement pas jusqu'au bout: elle s'arrête juste avant "là"

pourtant, j'ai généré cette partie de code avec le mode record Macro......
et ca fonctionne bien..
donc la question:
qu'est ce qui cloche???

Merci d'avance et bonne journée !
Vincent
 

Pièces jointes

  • Classeur2.xls
    55 KB · Affichages: 77
  • Classeur2.xls
    55 KB · Affichages: 83
  • Classeur2.xls
    55 KB · Affichages: 76
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Macro MFC avec formule personalisée

Bonjour,
je reviens vers vous car mon pb n'est toujours pas solutionné...
LA question; pourquoi la ligne de code suivante fait quitter la macro sans exécuter le reste ?
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=champactif(" & AdresseDebut & ")"
 

Efgé

XLDnaute Barbatruc
Re : Macro MFC avec formule personalisée

Bonjour vgendron
Tu semble bien seul sur ce fil.
Voici ma vision du problème: Une mise en forme conditionnelle s'applique si la formule utilisée renvoie comme valeur finale "Vrai". En utilisant un formule personnalisée qui ne renvoi ni vrai ni faux, tu ne pourras rien faire de bon.
Cordialement
 

vgendron

XLDnaute Barbatruc
Re : Macro MFC avec formule personalisée

Salut Efgé.
effectivement. je me sens isolé... bouhh.. j'ai pas d'amis..;-)
plus sérieusement: la fonction ChampActif renvoie justement Vrai ou Faux (pour s'en convaincre; suffit de la taper dans une des cellules Excel)
je pense en fait que la MFC n'aime pas qu'on lui force la main avec une fonction personalisée...ce qui est étrange puisque la règle est quand meme bien créée.. mais sans mise en forme particulière..
ensuite. hors macro. lorsque je vais modifier la règle.. j'applique juste un fond rouge. et la Hop. ca fonctionne..

je suis allé quémander de l'aide à l'auteur de la fonction ChampActif...direct à la source.. on sait jamais..;-)
je vous tiendrai au courant..
 

vgendron

XLDnaute Barbatruc
Re : Macro MFC avec formule personalisée: j'y suis presque

Bonjour à tous,
n'ayant pas de réponse, en attendant, j'ai fait autrement....
bon.. à mon avis. c'est l'usine à gaz. (10 lignes pour faire ce qui peut surement se faire en 2..) mais ca a l'avantage de donner ce que je veux. à peu près..
me reste plus qu'à faire en sorte de pas avoir besoin de copier cette macro dans le thisworkbook de tous mes classeurs.. (suis sur que je vais trouver)
et de pouvoir m'affranchir du clic final... (c'est déjà moins sur..)
en attendant. je partage. on sait jamais:



quelque soit la question con qu'on se pose.. on est jamais le seul à la poser..;-)
 

Pièces jointes

  • Classeur1.xlsm
    18.4 KB · Affichages: 90
  • Classeur1.xlsm
    18.4 KB · Affichages: 70
  • Classeur1.xlsm
    18.4 KB · Affichages: 60
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Macro MFC avec formule personalisée:YES I CAN !!

Hip hip hip..
Je vous livre ma solution

dans mon classeur de macro perso (macrotèque.xlam), j'ai créé un module de classe "ClasseMFC" dont voici le code (c'est un xlam. je ne vous fait pas l'affront de vous le poster..
****************************************************
Option Explicit
Public WithEvents App As Application

Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Call ColorationFiltre
End Sub
****************************************************

dans le Thisworkbook de mon macrotèque.xlam
****************************************************
Dim MonExcel As New ClasseMFC

Sub Workbook_open()
Set MonExcel.App = Application
'plus tout un tas d'autres choses. notamment pour modifier le ruban 2007
end sub
****************************************************

et enfin dans un module de mon macrotèque.xlam

****************************************************
Sub ColorationFiltre()
Dim f As Filter
Dim w As Worksheet
Set w = ActiveSheet

'on récupère la range contenant le filtre automatique
If w.AutoFilterMode Then

rAddress = ActiveSheet.AutoFilter.Range.Address

i = 0
For Each f In w.AutoFilter.Filters
i = i + 1
Cellule = Range(rAddress).Cells.Item(i).Address
If f.On Then
' MsgBox ("filtre actif en ") & cellule
Range(Cellule).Interior.Color = 255
Else
Range(Cellule).Interior.Pattern = xlNone
End If

Next
End If
End Sub
****************************************************
 

vgendron

XLDnaute Barbatruc
Re : Hip hip hip Macro MFC avec formule personalisée

re re re
dernier post sur ce fil juste pour vous apporter la modif de la macro pour que ca fonctionne aussi avec des cellules fusionnées

Sub ColorationFiltre()
Dim f As Filter
Dim w As Worksheet
Set w = ActiveSheet

'on récupère la range contenant le filtre automatique
If w.AutoFilterMode Then 's'il n'y a pas de filtre auto dans la feuille. pas la peine de perdre son temps

rAddress = ActiveSheet.AutoFilter.Range.Address

i = 0
For Each f In w.AutoFilter.Filters
i = i + 1
Cellule = Range(rAddress).Cells.Item(i).Address
If f.On Then
Range(Cellule).MergeArea.Interior.Color = 255
Else
Range(Cellule).MergeArea.Interior.Pattern = xlNone
End If

Next
End If
End Sub
 

Discussions similaires

Réponses
8
Affichages
665
Réponses
13
Affichages
1 K

Statistiques des forums

Discussions
312 249
Messages
2 086 602
Membres
103 258
dernier inscrit
kalis03