comptage cellules MFC

rafi93

XLDnaute Occasionnel
bonjour à tous

dans le post

Lien supprimé

on compte le nbre de cellules avec MFC.
mais on doit préciser une couleur

je cherche une solution qui donne le nbre de cellules avec MFC, mais sans préciser la couleur

y aurait - il une solution (sauf à boucler sur le code couleur...)?

c'est pour une assez grosse feuille (5000 lignes/30 colonnes, et bcp d'autres controles)


merci !
 

PMO2

XLDnaute Accro
Re : comptage cellules MFC

Bonjour,

Essayez le code suivant
Code:
Sub aa()
Dim R As Range
'---
On Error Resume Next
Set R = ActiveSheet.Cells.SpecialCells(xlCellTypeAllFormatConditions)
If Not R Is Nothing Then
  MsgBox R.Cells.Count
Else
  MsgBox "0"
End If
End Sub
 

rafi93

XLDnaute Occasionnel
Re : comptage cellules MFC

merci
j'ai essayé sur le fichier ci joint, mais il me donne apparemment le nombre de cellules non vides...
 

Pièces jointes

  • test nb mfc.xlsx
    9.5 KB · Affichages: 16
  • test nb mfc.xlsx
    9.5 KB · Affichages: 16
  • test nb mfc.xlsx
    9.5 KB · Affichages: 17

herve62

XLDnaute Barbatruc
Supporter XLD
Re : comptage cellules MFC

Bonjour ( Slt Jean CLaude)
bon si je comprends qq soit la couleur de fond avec MFC tu dois faire + 1 ?
Donc selon une partie d'une de mes vieilles appli , c'était avec 2003 mais bon .. !
A toi de cuisiner !! , en gros dans cette FONCTION tu vas récupérer une valeur
Code:
Public Function CouleurMFC(RG As Range, Optional Mode As Byte = 0) As Variant
' Calcule la couleur des cellules qui sont en MFC UNIQUEMENT
'Cette fonction a BESOIN des fonctions "ActiveCondition" et autres à la suite ci-dessous
Dim e As Long, i As Byte, LoTest As Boolean
Dim LoMFC As FormatCondition
    Application.Volatile
    'boucle sur le nombre de condition(s)
    'Si pas de MFC .FormatConditions.Count renvoi 0
    For i = 1 To RG.FormatConditions.Count
        Set LoMFC = RG.FormatConditions(i)
        If LoMFC.Type = xlCellValue Then
        'tester le type de la formule entrée
            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
                'Peu ajouter d'autre format si nécessaire,
                'comme la bordure, la police etc..
                Select Case Mode
                Case 0
                    CouleurMFC = LoMFC.Interior.ColorIndex
                Case 1
                    CouleurMFC = LoMFC.Interior.Color
                End Select
                Exit Function
            End If
        End If
    Next i
    CouleurMFC = 0
End Function
Tu la mets dans une variable en faisant IF .... compris entre 1 et 56 ( code des couleurs) THEN ... +1
tu boucles sur ta plage en appelant la fonction et tu incrémentes ta variable

Code:
colo = CouleurMFC(Ad)
Sinon met un morceau de ton fichier je t'expliquerai
 

rafi93

XLDnaute Occasionnel
Re : comptage cellules MFC

merci pour ces éléments

avant de me plonger dedans (je bidouille en VB, sans plus...) voici mon "pb":

- je travaille sur un assez grand tableau d'environ 5000 lignes x 30 colonnes, pour gérer une compta. je récupère regulierement mes comptes en banque et je les introduis dans le tableau en y catégorisant automatiquement (chaque fois que possible) les opérations
- il est associé à une feuille qui contient des listes de validation de données, des controles de cohérences entre colonnes avec des formules du genre nb.si.ens. Les formules de calcul elles meme ne sont pas tres complexes (sommes ou multiplication entre colonnes)
- j'ai créé des macros VB pour quelques traitements (ventilation d'une ligne sur plusieurs opérations comptables, etc)

ce qu'il y a c'est que quand je lance ma macro de mise à jour des lignes avec le nouveau relevé de compte, ça prend bien 5min de traitement (j'ai pourtant un PC assez confortable avec disque SSD); c'est pas dramatique (1 fois de temps en temps) mais quand même.
je cherche donc aussi à optimiser les temps de traitement.

pour mes controles de cohérence, après avoir pas mal tatonné, j'ai identifié 2 solutions:
1/ je mets des MFC sur certaines colonnes (pour reperer les quelques cellules parmi 5000 lignes), et j'affiche le nombre "d'erreurs" en haut de la colonne (d'où mon besoin de comptage de MFC), pour savoir si il y a effectivement des erreurs à aller chercher.

ou 2/ je crée des "colonnes de controle" à gauche du tableau, 1 par controle de cohérence à effectuer (une dizaine au total), avec une formule recopiée vers le bas : p.ex
=SI(ET([Compta_Affectation]="perso";[montant Compta]<>0);"erreur";"ok")
je dénombre en tête de colonne le nombre de "erreur", et je pose une MFC pour mettre en évidence les "erreur".

la 2eme solution est assez simple, mais la 1ere est plus élégante et évite de surcharger la feuille (et le temps de calculs??) avec des colonnes superflues.

qu'en pensez vous ?

sinon, pour me montrer comment adapter le code VB que vous m'avez communiqué, ci joint un petit fichier de test

merci beaucoup !!
 

Pièces jointes

  • test nb mfc.xlsx
    11.1 KB · Affichages: 22
  • test nb mfc.xlsx
    11.1 KB · Affichages: 20
  • test nb mfc.xlsx
    11.1 KB · Affichages: 15

herve62

XLDnaute Barbatruc
Supporter XLD
Re : comptage cellules MFC

Bon , quel charabia ? dans l'exemple moi je pige rien !!! souvent il y a la manière "simple"
mais la plupart du temps il faut compliquer !!
Là le tableau n'est pas figé en taille, que faut-il compter , le rouge , le bleu ...etc ???
Et dans ce forum pour aller droit au but on dit : J'AI CA .... et je voudrai CA !! on met des "bulles" des com. , des flèches ..etc ;dans les fichiers que l'on joint , ça va plus vite aussi pour avoir une solution
Sinon si tu peux mettre un bout ( au lieu des 5000 lignes) avec idem ce que tu veux que ça fasse c'est ok


PS : 5 min ??? je sais pas ce que ça fait mais il faut déjà y aller ??????
 

PMO2

XLDnaute Accro
Re : comptage cellules MFC

En réponse à
je cherche une solution qui donne le nbre de cellules avec MFC, mais sans préciser la couleur
et
merci
j'ai essayé sur le fichier ci joint, mais il me donne apparemment le nombre de cellules non vides...

Le code donne le nombre de cellules contenant une MFC (qu'elles soient colorées par une condition avérée OU non).
Voir l'exemple joint qui donne le nombre de cellules avec MFC, indique l'adresse de la plage et les sélectionne.
 

Pièces jointes

  • test nb mfc_pmo.xlsm
    17.2 KB · Affichages: 20

rafi93

XLDnaute Occasionnel
Re : comptage cellules MFC

merci pour ce retour herve62....
je sais bien qu'on est sur un forum excel et que la littérature y a peu de place, mais j'ai quand même tenté d'essayer d'être clair. sans succès donc.

pour aller "droit au but", voir le fichier exemple ci joint, si jamais c'était plus compréhensible

concernant les "5 minutes" c'est vrai que j'ai un peu exagéré, mais 2 bonnes minutes certainement
et quand je fait tourner ma macro pour convertir un enregistrement bancaire en plusieurs enregistrement comptables (donc création de lignes dans le tableau) ça prend bien 15 secondes; une éternité de nos jours.
je reste à ta disposition
 

Pièces jointes

  • test nb mfc.xlsx
    11.7 KB · Affichages: 18
  • test nb mfc.xlsx
    11.7 KB · Affichages: 25
  • test nb mfc.xlsx
    11.7 KB · Affichages: 25

Discussions similaires

Statistiques des forums

Discussions
312 367
Messages
2 087 645
Membres
103 627
dernier inscrit
nabil