Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de données

Vinz

XLDnaute Junior
Bonjour,
J'aimerais comptabiliser des cellules pleines (ayant des nombres écrits d'une certaine couleur) et dont la valeur est différente de 0.

Je connais seulement la fonction NBVAL permettant de comptabiliser les cellules pleines sur une plage de données. Reste le problème des deux conditions à respecter: couleur des caractères numériques et valeur différente de 0.

Merci pour votre aide,
Cdlt
 

Pièces jointes

  • Nouveau classement.xlsm
    28.9 KB · Affichages: 59
  • Nouveau classement.xlsm
    28.9 KB · Affichages: 70
  • Nouveau classement.xlsm
    28.9 KB · Affichages: 67

WUTED

XLDnaute Occasionnel
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

Bonjour Vinz,

Je pourrai te proposer une solution par macro mais y'a juste un point que j'aimerai éclaircir, au lieu d'intégrer 2 conditions, le fait qu'il y ait un rang dans la colonne classement ne suffirait-il pas à dire que le joueur a participé à un tournoi?
 

R@chid

XLDnaute Barbatruc
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

Bonjour,

Si j'ai bien compris en C3 :

Code:
=SOMMEPROD((Feuil1!A$6:A$31=B3)*(Feuil1!B$5:G$5="Place");N(Feuil1!B$6:G$31<>""))

@ tirer vers le bas

Amicalement

Edit : Salut WUTED
 

Vinz

XLDnaute Junior
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

Merci pour vos réponses.
Si Wuted cela suffirait mais je ne veux pas savoir si le joueur a participé mais combien de fois il a participé.
R@chid j'ai testé ta solution mais le résultat pour chaque joueur est toujours 3 alors que certain n'ont pas fait de tournois.

Cdlt
 

WUTED

XLDnaute Occasionnel
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

Re, Salut Rachid

Voici une proposition en VBA :

VB:
Sub Compteur()
    Dim compteur As Integer
    For i = 3 To Feuil2.Range("B65536").End(xlUp).Row
        compteur = 0
        For j = 6 To Feuil1.Range("A65536").End(xlUp).Row
            If Feuil1.Range("A" & j).Value = Feuil2.Range("B" & i).Value Then
                For k = 1 To Feuil1.Range("IV" & j).End(xlToLeft).Column - 1
                    If Feuil1.Range("A" & j).Offset(0, k) <> "" And Feuil1.Range("A" & j).Offset(0, k).Font.ColorIndex = 14 Then
                        compteur = compteur + 1
                    End If
                Next k
            End If
        Next j
        Feuil2.Range("C" & i).Value = compteur
    Next i
End Sub
 

Vinz

XLDnaute Junior
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

C'est super! Merci beaucoup, je vais essayer de comprendre ton code.
Si jamais l'emplacement des cellules de points changent ou la couleur, ou encore si d'autres tournois se rajoutent, que dois-je changer?

Merci pour votre précieuse aide.
 

WUTED

XLDnaute Occasionnel
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

Pas de quoi, si demain tu changes la couleur de tes points, faudra modifier cette partie de ton if :
Code:
Feuil1.Range("A" & j).Offset(0, k).Font.ColorIndex = 14

En mettant le nouveau ColorIndex à la place de 14. Pour le reste tu peux mettre autant de tournois / joueurs que tu veux.
Bonne journée.
 

R@chid

XLDnaute Barbatruc
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

Bonjour @ tous,
R@chid j'ai testé ta solution mais le résultat pour chaque joueur est toujours 3 alors que certain n'ont pas fait de tournois.
Non c'est parce qu'ils ont tous fait 3 tournois...
voir PJ
Amicalement
 

Pièces jointes

  • Vinz.xlsm
    27.1 KB · Affichages: 49

Vinz

XLDnaute Junior
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

Ok R@chid, désolé.

En ce qui concerne la solution de WUTED, j'ai un petit problème. Lorsque je supprime un tournoi (c'est à dire les colonnes D et E par exemple), eh bien la macro ne fonctionne plus et m'indique "erreur d'exécution 13" et lorsque je vais dans le débogage, il m'indique cette ligne en jaune:
If Feuil1.Range("A" & j).Offset(0, k) <> "" And Feuil1.Range("A" & j).Offset(0, k).Font.ColorIndex = 14 Then

Je ne comprend pas, d'autant plus que le code m'a l'air correct et que quand je rajoute un tournois (donc deux colonnes en plus), il n'y a aucune erreur.

Le fichier est le même que j'ai posté dans mon premier message.

Cdlt
 

WUTED

XLDnaute Occasionnel
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

Re,

J'ai regardé en vitesse, mais je crois que c'est juste parce que t'as des formules qui deviennent invalides quand tu supprimes tes colonnes, ça te donne des cellules avec des valeurs d'erreur et ça fait bug les comparaisons, reste à voir si tu comptes corriger à chaque fois ces cellules ou si tu préfères dire au programme de les ignorer.

Bonne nuit.
 

Vinz

XLDnaute Junior
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

Ah d'accord, effectivement c'est cela.
Non je pense corriger ces cellules. Mais par curiosité, comment demander au programme de les ignorer?
Merci de votre disponibilité.

A demain.
 

WUTED

XLDnaute Occasionnel
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

Bonjour Vinz,

Il suffirait d'ajouter une ligne au programme qui vérifie que la type de le la valeur contenue dans la cellule n'est pas vbError avec VarType (VarType) tel que :
VB:
Sub compteur()
    Dim compteur As Integer
    For i = 3 To Feuil2.Range("B65536").End(xlUp).Row
        compteur = 0
        For j = 6 To Feuil1.Range("A65536").End(xlUp).Row
            If Feuil1.Range("A" & j).Value = Feuil2.Range("B" & i).Value Then
                For k = 1 To Feuil1.Range("IV" & j).End(xlToLeft).Column - 1
                    If VarType(Feuil1.Range("A" & j).Offset(0, k)) <> 10 Then
                        If Feuil1.Range("A" & j).Offset(0, k) <> "" And Feuil1.Range("A" & j).Offset(0, k).Font.ColorIndex = 14 Then
                            compteur = compteur + 1
                        End If
                    End If
                Next k
            End If
        Next j
        Feuil2.Range("C" & i).Value = compteur
    Next i
End Sub

Bonne journée.
 

Vinz

XLDnaute Junior
Re : Comptabiliser des cellules (d'une certaine couleur) pleines sur une plage de do

Salut,
bon, premièrement j'ai modifié légèrement le code du compteur afin que les cellules possédant des caractères noirs ET bleus soient comptabilisées. Cela donne ceci (et ça fonctionne):

Code:
Sub compteur()
    Dim compteur As Integer
    For i = 3 To Feuil2.Range("B65536").End(xlUp).Row
        compteur = 0
        For j = 6 To Feuil1.Range("A65536").End(xlUp).Row
            If Feuil1.Range("A" & j).Value = Feuil2.Range("B" & i).Value Then
                For k = 1 To Feuil1.Range("IV" & j).End(xlToLeft).Column - 1
                    If Feuil1.Range("A" & j).Offset(0, k) <> "" And Feuil1.Range("A" & j).Offset(0, k).Font.ColorIndex           = 14 Or Feuil1.Range("A" & j).Offset(0, k).Font.ColorIndex = 5 Then
                        compteur = compteur + 1
                    End If
                Next k
            End If
        Next j
        Feuil2.Range("E" & i).Value = compteur
    Next i
End Sub

A partir de là il faut le fichier sous les yeux pour comprendre ce que je veux faire.


Je prendrais pour référence la feuille 1 du fichier joint.

-Vous remarquez qu'il y a deux couleurs (bleu, index 5 et vert index 14) pour noter la place de chaque candidat.

-Vous remarquez également qu'il y a pour une date unique, deux cellules "Nb joueurs" (une en bleu et l'autre en vert). En effet, à la même date il y a deux tournois: tournoi 1 et tournoi 2 respectivement.
Les joueurs peuvent très bien faire soit le tournoi 1, soit le tournoi 2 (mais jamais les deux le même jour évidemment!).

-Lors de la rentrée des résultats, on met la place qu'a fait le joueur sur le tournoi: s'il a fait le tournoi 1 sa place sera notée en bleu, s'il a fait le tournoi 2 elle sera notée en vert (s'il n'en a pas fait, la cellule correspondante reste vide!).

-Une fois la place rentrée, les points se calcule automatiquement. Or voilà, la formule a besoin d'une variable: le nombre de joueur sur le tournoi que le joueur a fait (1 ou 2). (voir formule dans le tableau). Et c'est pour cela qu'il faut absolument le "Nb joueurs" pour le tournoi 1 et le "Nb joueurs" sur le tournoi 2.

-Je ne veux pas m'amuser à changer la formule sans arrêt, donc je voudrais savoir si c'était possible de créer une macro qui exécutes ceci:

Si la couleur du chiffre de la place est bleu: alors il s'agit du tournoi 1. Le "Nb joueurs" correspondant est donc en E3 (pour le tournoi du 01.12.2011 sinon ça serait G3 pour celui du 01.01.2012, etc...). Application de la formule:

100*RACINE(E$3/(PUISSANCE(D6;EXP(10/E$3))))*PUISSANCE(2,2;LOG10(0+0,01))

Sinon si la couleur du chiffre de la place est vert: alors il s'agit du tournoi 2. Le "Nb joueurs" correspondant est donc en E4 (pour le tournoi du 01.12.2011 sinon ça serait G4 pour celui du 01.01.2012, etc...). Application de la formule:

100*RACINE(E$4/(PUISSANCE(D6;EXP(10/E$4))))*PUISSANCE(2,2;LOG10(0+0,01))

Sinon = 0

Voilà, j'espère avoir été explicite. Pour info le bleu utilisé est index_color 5 et le vert index_color 14.

Si vous pouviez m'aider, ça me permettrait de concrétiser mon projet.

Merci d'avance!

Cdlt
 

Pièces jointes

  • Nouveau classement.xlsm
    53 KB · Affichages: 65
  • Nouveau classement.xlsm
    53 KB · Affichages: 75
  • Nouveau classement.xlsm
    53 KB · Affichages: 78
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 445
Messages
2 088 488
Membres
103 869
dernier inscrit
benji_270