Microsoft 365 MACRO VBA Comptabiliser les cellules non colorisées d'une plage définie

chris6999

XLDnaute Impliqué
Bonsoir le FORUM
Une bonne année à tous

Je suis face à un petit problème avec un code qui a pour but de calculer le nombre de cellules non colorisées (Interior.ColorIndex = -4142) d'une plage définie.
Ce nombre s'incrémente colonne C.

Si sur certaines lignes le nb remonté est correct sur d'autre en revanche cela ne correspond pas à la réalité.!!
Pour pouvoir faire des tests j'ai mis la valeur 1 dans les cellules non colorisées mais dans mon fichier réel les cellules sont vides.
Cela me permet de comparer col A le nb correct et de le comparer à ce que le code calcule colonne C.

Peut-être un œil avisé aura une idée du pourquoi des ces différences de valeur?
Si c'est le cas je prendrais vos conseils avec beaucoup d'intérêt.

Mon code ci-après + fichier test en PJ


Dercol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
derlig = Range("A" & Rows.Count).End(xlUp).Row
' i plage de la ligne 2 à 30
For i = 1 To derlig
nb = 0
'j plage de la colonne 4 à 65 (D à BM)
For j = 4 To Dercol
'comptabilise 0,5 pour chaque ligne de la plage si cellule sans couleur

If Cells(i, j).Interior.ColorIndex = -4142 Then nb = nb + 1
Next j
'Si dans la ligne valeur de la ligne 1 est non vide alors met le nombre trouvé dans la colonne 3 soit C
If Cells(i, 1) <> "" Then Cells(i, 3) = nb
Next i


Merci par avance de votre
Très bonne soirée à tous
 

Pièces jointes

  • FICHIER TEST COULEUR DE CELLULE.xlsm
    28.7 KB · Affichages: 7

Dudu2

XLDnaute Barbatruc
Bonjour,
Tu as de cellules en fond blanc, par exemple en AJ7.

Voici la différence de propriétés de format entre fond blanc (à gauche) et pas de fond (à droite).

Différence.jpg


Edit: et pour les repérer...
Remplace:
VB:
        If Cells(i, j).Interior.ColorIndex = -4142 Then nb = nb + 1
Par: (ici pour tracker la ligne 7)
VB:
        If Cells(i, j).Interior.ColorIndex = -4142 Then
            nb = nb + 1
        Else
            If i = 7 Then
                ActiveSheet.Cells(i, j).Select
                MsgBox "Ligne = " & i & ", Colonne = " & j & ", ColorIndex = " & Cells(i, j).Interior.ColorIndex
            End If
        End If
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Chris,
Tout simplement certaines de vos cellules ne sont pas avec "aucun remplissage"
Ci dessous en rouge après avoir patiemment repris tous les fond des cellules blanches avec aucun remplissage, tout devient correct.
1.jpg

C'est ballot ! :)

Je pense qu'il serait judicieux de mettre une légère couleur au lieu de transparent, car transparent et blanc c'est visuellement quasi la même chose.
 

Pièces jointes

  • FICHIER TEST COULEUR DE CELLULE.xlsm
    25.7 KB · Affichages: 5

chris6999

XLDnaute Impliqué
Bonsoir le FORUM
Une bonne année à tous

Je suis face à un petit problème avec un code qui a pour but de calculer le nombre de cellules non colorisées (Interior.ColorIndex = -4142) d'une plage définie.
Ce nombre s'incrémente colonne C.

Si sur certaines lignes le nb remonté est correct sur d'autre en revanche cela ne correspond pas à la réalité.!!
Pour pouvoir faire des tests j'ai mis la valeur 1 dans les cellules non colorisées mais dans mon fichier réel les cellules sont vides.
Cela me permet de comparer col A le nb correct et de le comparer à ce que le code calcule colonne C.

Peut-être un œil avisé aura une idée du pourquoi des ces différences de valeur?
Si c'est le cas je prendrais vos conseils avec beaucoup d'intérêt.

Mon code ci-après + fichier test en PJ


Dercol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
derlig = Range("A" & Rows.Count).End(xlUp).Row
' i plage de la ligne 2 à 30
For i = 1 To derlig
nb = 0
'j plage de la colonne 4 à 65 (D à BM)
For j = 4 To Dercol
'comptabilise 0,5 pour chaque ligne de la plage si cellule sans couleur

If Cells(i, j).Interior.ColorIndex = -4142 Then nb = nb + 1
Next j
'Si dans la ligne valeur de la ligne 1 est non vide alors met le nombre trouvé dans la colonne 3 soit C
If Cells(i, 1) <> "" Then Cells(i, 3) = nb
Next i


Merci par avance de votre
Très bonne soirée à tous
Bonjour,
Tu as de cellules en fond blanc, par exemple en AJ7.

Voici la différence de propriétés de format entre fond blanc (à gauche) et pas de fond (à droite).

Regarde la pièce jointe 1051641

Edit: et pour les repérer...
Remplace:
VB:
        If Cells(i, j).Interior.ColorIndex = -4142 Then nb = nb + 1
Par: (ici pour tracker la ligne 7)
VB:
        If Cells(i, j).Interior.ColorIndex = -4142 Then
            nb = nb + 1
        Else
            If i = 7 Then
                ActiveSheet.Cells(i, j).Select
                MsgBox "Ligne = " & i & ", Colonne = " & j & ", ColorIndex = " & Cells(i, j).Interior.ColorIndex
            End If
        End If



Merci Jacky pour cette analyse très précise et pour le temps passé sur ma question.
C'est vrai que c'est tellement évident que j'aurais pu y penser toute seule..
Avec cette donnée je commence à entrevoir ma solution en transformant les blanc en transparent puis en dénombrant mes transparents ensuite.

Merci encore
Très bonne journée
 

chris6999

XLDnaute Impliqué
Bonsoir Chris,
Tout simplement certaines de vos cellules ne sont pas avec "aucun remplissage"
Ci dessous en rouge après avoir patiemment repris tous les fond des cellules blanches avec aucun remplissage, tout devient correct.
Regarde la pièce jointe 1051643
C'est ballot ! :)

Je pense qu'il serait judicieux de mettre une légère couleur au lieu de transparent, car transparent et blanc c'est visuellement quasi la même chose.


Bonjour

Merci encore Sylvanu je vois où se situe le problème et du coup comment le contourner.
Je n'ai pas la main sur les couleurs du tableau que j'exploite en l'état.
mais la solution est là
Merci encore
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Apparament le blanc n'est pas une couleur utilisée dans votre tableau.
Dans ce cas faites un test "si fond transparent ou blanc".
Un truc dans ce genre :
VB:
'Comptabilise 0,5 pour chaque ligne de la plage si cellule sans couleur   
        If (Cells(i, j).Interior.ColorIndex = -4142) _
        Or (Cells(i, j).Interior.Color = RGB(255, 255, 255)) _
        Then nb = nb + 1
 

Discussions similaires

Réponses
19
Affichages
1 K

Statistiques des forums

Discussions
297 988
Messages
1 964 903
Membres
200 747
dernier inscrit
mtb60