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).
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
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.
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.
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
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.
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.
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
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
Bonjour à tous,
Je suis dans une impasse. J'ai presque la solution à ce que je cherche ici, mais pas tout à fait.
Je cherchais également à compter les cellules non colorisées (donc -4142) d'une plage de données.
Sur cette plage de données, les couleurs de la case sont données par une mise en forme conditionnelle (si > à une date, alors, si > à une autre date, alors, etc).
J'ai commencé ma fonction par relever la couleur d'une cellule pour faire des tests avant d'utiliser
Mais ce code me donne la valeur -4142 à chaque fois.
VB:
Function Testcouleur(Cellule As Range) As Integer
Application.Volatile
Testcouleur = Cellule.Interior.ColorIndex
End Function
-4142 c'est xlNone qu'on doit pouvoir considérer comme blanc
Tu n'utilises pas Interior.Color ?
Pour tester si une cellule est colorée, j'utilise le Interior.Pattern.
Si xlNone pas colorée
Si 1 (ou plutôt pas xlNone) colorée.
Edit:
Une cellule non colorée: Cellule.Interior.Color = 16777215 & Cellule.Interior.Pattern = xlNone
Une cellule colorée en blanc: Cellule.Interior.Color = 16777215 & Cellule.Interior.Pattern = 1 (ou plutôt pas xlNone car la valeur dépend de la Pattern utilisée).
Pour savoir la couleur d'une cellule potentiellement colorée par MFC if faut s'intéresser non pas à Cellule mais à Cellule.DisplayFormat qui couvre les 2 cas MFC et non-MFC.
VB:
Sub a()
MsgBox ActiveCell.DisplayFormat.Interior.ColorIndex & vbCrLf & _
ActiveCell.DisplayFormat.Interior.Color & vbCrLf & _
ActiveCell.DisplayFormat.Interior.Pattern
End Sub
Bonjour Aurélien, Dudu,
Cellule.Interior.ColorIndex donne la couleur de la cellule mais pas la couleur donnée par la MFC.
Pour détecter une couleur mise par MFC, regardez ceci :
bonjour à tous excel 2016 malgré le tutoriel du forum, je n'arrive pas à mes fins. j'ai un tableau 250 lignes et 17 colonnes selon un critère bien défini des cellules sont coloriées en jaune soit 0 , ou 1 ou 2 cellules par lignes par une mise en forme conditionnelle je cherche à récupérer...
Bon, je suis vraiment une bille en VBA.
Je vous explique mon besoin.
J'ai des noms sur une colonne et des dates de validité d'habilitation dans les colonnes suivantes pour des procédés de fabrication.
Un exemple en PJ (en xlsx sans macro pour éviter de mettre des macros comme ça sur le web).
La MFC est la suivante : si vide, alors fond transparent, texte normal, noir.
Si date à 2 mois : fond orange, texte gras.
Si date dépassée : fond rouge, texte gras, blanc.
Dans le cas réel, j'ai 50 opérateurs et 90 procédés.
D'où mon besoin : je souhaiterais que la colonne de prénom s'affiche en fond rouge si une des MFC est différente de fond transparent.
J'y arrive en prenant les fonctions citées par @sylvanu sur la première colonne.
Avec la fonction suivante, je récupère le code couleur et je le mets dans la colonne précédent les prénoms
Ensuite, petite MFC des familles (si différent de 16777215, alors...)
VB:
Private Function COULEUR(cellule As range)
'Fonction COULEUR : Sébastien Mathier - Excel-Pratique.com
'Source : https://www.excel-pratique.com/fr/astuces_vba/fonction-couleur-mfc
Application.Volatile
COULEUR = Evaluate("couleurCellule('" & cellule.Worksheet.Name & "'!" & cellule.Address & ")")
End Function
Private Function couleurCellule(cellule As range)
couleurCellule = cellule.DisplayFormat.Interior.color
End Function
Mais je suis paumé quand il s'agit ensuite d'itérer le test sur l'ensemble des colonnes.
Bonjour Aurélien,
Je pense qu'on peut résoudre votre souci sans VBA, juste avec une MFC en colonne D :
=OU(MIN($E5:$G5)<=$F$1;MIN($E5:$G5<=$F$2))
car si une des cellule de la ligne considérée est inférieure à F1 OU inférieure à F2 alors elle est rouge.
Merci beaucoup.
J'ai dû adapter car, dans le cas réel, les cellules vides ne l'étaient pas vraiment (un mélange de ESTNA et de INDIRECT), mais oui, c'est cool, ça marche et SANS MACRO !