Calcul du nombre de cellules avec couleur spécifique (forme conditionnelle)

Bonjour à tous.

Je suis devant un défi (pour moi) qui devrait être un jeu pour tous les chevronnés de ce site. Et je ne doute pas que la solution pourra m'être proposée par certains d'entre vous.

Contexte.

J'ai un classeur avec 1 feuille. Cette dernière contient plus de 1800 lignes, chacune ayant un article précis. Pour chaque article en ligne, il y a au moins 50 colonnes comportant différents critères (labels) et toutes les cellules contiennent divers nombres. Chaque colonne possède uniquement 2 mises en formes conditionnelles qui ne retournent que des cellules colorées en vert ou en rouge, selon les critères spécifiques à chaque colonne.

Objectif.

Mon but est de pouvoir, PAR LIGNE, compter le nombre de cellules en vert ET le nombre de cellules en rouge. Et ce, pour les 1800 +/- lignes individuelles du classeur afin d'établir un classement de ces dernières.

J'ai essayé toutes les astuces et trucs proposés sur le net, crée des modules en VBA, créé des formules... Rien ne me permet de pouvoir arriver à compter ces cellules. Je n'ai que des erreurs style #NOM ou d'autres choses aussi fantaisistes. Que les cellules soient en format Standard ou Nombre n'y change rien. Que le classeur soit enregistré en xlsm ou pas non plus.

Ci joint un fichier limité illustrant le contexte.

Merci à tous pour votre aide. Bonne soirée.

Bonjour,

Votre fichier en retour où il vous suffit de cliquer le bouton pour voir le résultat.

Le code VBA ci-dessous

Sub ComptecouleurMFC()'compte le nombre de cellules contenant une MFC
Dim cel As Range
Dim dlg As Integer

dlg = 19
Range("H2:I" & dlg).ClearContents
For Each cel In Range("A2:F" & dlg)
    Select Case cel.DisplayFormat.Interior.Color
    Case Is = 5287936 'vert
        Cells(cel.Row, 8) = Cells(cel.Row, 8) + 1
    Case Is = 192 'brun
        Cells(cel.Row, 9) = Cells(cel.Row, 9) + 1
    End Select
Next cel
End Sub

NB :
- La dernière ligne considérée est la 19 selon votre fichier. Vous écrivez 1500 lignes et 50 colonnes mais est-ce que le nombre de lignes ou de colonnes peut varier en plus ou en moins ?
- on peut aussi calculer cette dernière ligne ou dernière colonne via le code si on connait mieux la structure de votre vrai fichier et du tableau.

Dans votre bon fichier
- Allez dans l'éditeur VBA et créez un module
- Placez le code ci-dessus dans ce module
- Associez-le code à un bouton à dessiner sur votre feuille

Cordialement

Bonjour Dan.

Merci beaucoup pour cette réponse si rapide et correcte.

Une fois ouvert, votre fichier renvoyé compte exactement les cellules tel que souhaité (voir Couleur cellules modifié).

J'ai examiné le code et j'ai remarqué qu'il concernait 19 lignes et 8/9 colonnes , à l'identique de la structure du fichier initialement soumis.

Cependant, je me suis retrouvé devant quelques inattendus.

1, Concernant mon fichier original, il comporte pour l'instant 1686 lignes et les colonnes concernées par la coloration sont au nombre de 66 (S2 à CF2) Voir Row & Column Range. J'ai donc adapté comme indiqué par votre code le nombre de ligne (dlg) et Row pour inclure les colonnes Vert & Rouge tel que vous l'avez fait, donc 68 pour vert et 69 pour brun, en ne modifiant que les valeurs qui me semblaient appropriées (voir VBA Modifié)

Les lignes et colonnes devraient dans un futur soit être réduites ou augmentées en fonction de nouvelles entrées potentielles.

2, J'ai tenté d'insérer en CH2 la formule Comptecouleur. Elle n'est pas apparue dans la liste des formules recensées, et qui plus est, le résultat est bien sûr incorrect. (voir Formule introuvable)

3, Parallèlement, dans votre fichier envoyé, en appuyant sur le bouton "compter Nbr MFC", les données disparaissaient !! (Voir Bouton compter nbr MFC

12column-range.pdf (23.50 Ko)
10vba-modifie.pdf (46.68 Ko)

Sans abuser, auriez-vous une idée pour corriger cet imbroglio ?

Merci pour votre participation. Les fichiers jpg et png n'étant pas autorisés, les pdf sont ma seule solution illustrée.

Cordialement.

Sans abuser, auriez-vous une idée pour corriger cet imbroglio ?

imbroglio, ... ???

Bonjour à tous les deux,

Je profite insidieusement de vos échanges, Dan ayant fait le taf.

Approche différente à l'aide d'une formule personnalisée (macro) qui ne tient pas compte du nombre de lignes. En essayant de me rapprocher le plus possible du besoin réel (nb de lignes et de colonnes pour avoir une idée des temps de réponse).

Bonjour,

Il eut été plus simple de placer votre fichier avec données non confidentielles plutôt que la série de pdf
Il n'y a pas d'interdiction de placer une image sur le site. Vous n'avez peut être pas cliqué sur la bonne icône ?

Essayez ce code adapté comme suit:

Sub ComptecouleurMFC()
Dim cel As Range, plage As Range
Dim dlg As Integer

Application.ScreenUpdating = False
With ActiveSheet
    'derniere colonne en ligne 1
    dcol = .Cells(1, Columns.Count).End(xlToLeft).Column
    'dernière ligne remplie dans la feuille
    dlg = .UsedRange.Rows.Count
    'définir plage à controler pour la MFC
    Set plage = .Range(.Cells(2, "S"), .Cells(dlg, dcol - 3))
    'supprimer les totaux dans les colonnes Vert & Rouge
    .Range(.Cells(2, dcol - 1), .Cells(dlg, dcol)).ClearContents
    'boucle de chanque cellule dans la plage
    For Each cel In plage
        Select Case cel.DisplayFormat.Interior.Color 'verifie si couleur MFC
        Case Is = 5287936 'vert
            .Cells(cel.Row, dcol - 1) = .Cells(cel.Row, dcol - 1) + 1 'ajout nombre de cellule en Vert
        Case Is = 192 'brun
            .Cells(cel.Row, dcol) = .Cells(cel.Row, dcol) + 1 'ajout nombre de cellule en Rouge
        End Select
    Next cel
End With
Application.ScreenUpdating = True
End Sub

Règles à suivre :
- votre plage contenant les MFC démarre en colonne S (données en ligne 2 et titre en ligne 1)
- vous devez toujours avoir une seule colonne vide entre la dernière colonne de la plage et les deux colonnes (vert et rouge) consacrées aux résultats
- votre ligne de titre est en ligne 1
- La dernière colonne en ligne 1 est celle où vous avez mentionné "Rouge"


Les lignes et colonnes devraient dans un futur soit être réduites ou augmentées en fonction de nouvelles entrées potentielles.

Ce code tient compte de la variation de lignes et colonnes pour autant que les règles ci-dessus sont respectées.


3, Parallèlement, dans votre fichier envoyé, en appuyant sur le bouton "compter Nbr MFC", les données disparaissaient !! (Voir Bouton compter nbr MFC

Logique puisque vous avez laissé 5 colonnes entre les deux colonnes de résultats et les colonnes contenant les données.

NB : @Crearts : citoyen Belge je vois...

Crdlt

re,

bonjour de retour !

je m'amusais à ajouter quelque options à la macro de @Dan, l'emploi d'un TS pour le résultat et maintenant on compte tous les couleurs

Bonsoir à tous et merci pour votre patience suite à ce long silence.

J'ai testé toutes vos propositions, en suivant aussi rigoureusement que possible (pour ma capacité de compréhension de ce genre d'implémentations) les différents paramétrages et je n'arrive toujours pas au résultat attendu.

Ne souhaitant pas abuser plus longtemps de votre disponibilité, je ne vais donc pas persister à chercher LA méthode adéquate qui semble demander à ce stade plus de temps que je ne peux me permettre d'y consacrer.

Encore merci pour vos retours.

Bonjour,

Merci de votre retour

Au besoin, mettez un fichier qui ressemble plus au vôtre et le résultat que vous attendez car là je ne vois pas ce qui pose souci dans ce que vous avez demandé et la proposition qui vous ai donnée

Pour votre fichier pdf "formule_introuvable" qui mentionne nom# dans la cellule, cette erreur est normale vu ce que je vois mentionné dans la barre de formule.
Si vous voulez que les couleurs soient comptabilisées en fonction d'ajout de données en colonnes S à X, je peux adapter le code car il faut procéder autrement

Crdlt

Rechercher des sujets similaires à "calcul nombre couleur specifique forme conditionnelle"