Excel - VBA - Surbrillance d'une colonne filtrée
Bonjour à tous,
J'espère que vous allez tous bien !!
Je suis sur la fin de ma macro et je n'arrive pas à aboutir à mes fins.
J'ai en colonne B de mon fichier, certaines lignes (pas toutes) en alphanumérique dont les 6 premiers caractères vont de 101000, jusqu'à 999 999.
Je souhaite qu'en colonne F, la cellule de la ligne concernée soit en surbrillance verte si le chiffre en B est compris entre 100 000 et 599 999.
Pour cela, j'ai créer en colonne G ("test"), une formule qui reprend les 6 caractères de la colonne B. Pour que je puisse ensuite faire un filtre en G et enlever les vides pour n'obtenir que les lignes souhaitées.
Ensuite, je sélectionne les lignes souhaitées en F et je surbrille.
Mais à la fin de ma macro, les cellules ne sont pas vertes mais blanches.. J'ai l'impression que la macro fonctionne mais qu'il y a peut être un problème avec le filtre...
Voici mon code. Est-ce que quelqu'un aurait une idée pour m'aider s'il vous plaît :)
Range("G1").Select
ActiveCell.FormulaR1C1 = "Test"
Range("G2").Select
ActiveCell.FormulaR1C1 = "=IFERROR(IF(AND(VALUE(LEFT(RC[-5],FIND("""",RC[-5],6)))>100000,VALUE(LEFT(RC[-5],FIND("""",RC[-5],6)))<600000),LEFT(RC[-5],FIND("""",RC[-5],6)),""""),"""")"
Range("G2").Select
LastRw = Sheets("Balance").Cells(Rows.Count, 4).End(xlUp).Row
Range("G2:G" & LastRw).FillDown
Range("A1:G1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$G$100000").AutoFilter Field:=7, Criteria1:="<>"
Range("F2:F" & LastRw).Select
With Range("F2:F" & LastRw).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Je précise que j'ai essayé de faire une MFC mais que je n'arrive pas à mes fins non plus de ce côté...
Merci pour votre aide !!
Belle journée à tous,
Rylaugone
Bonjour,
Joins un petit fichier pour une aide adaptée du forum.
Cdlt.
Bonjour,
Hésitez pas à envoyer un fichier pour plus d'informations, en regardant votre code il semble qu'il y a quelques problèmes. Je pense que le problème pourrait provenir de la partie où vous tentez de filtrer les données en colonne G et de mettre en surbrillance les cellules en colonne F.
Une chose à noter est que les filtres ne sont pas pris en compte dans les macros pour colorer des cellules. C'est-à-dire que lorsqu'un filtre est appliqué, la macro colorera toujours les cellules comme si aucune sélection n'avait été faite.
Un moyen de contourner cela est d'itérer sur chaque cellule et de vérifier si elle est visible (c'est-à-dire non filtrée), puis d'appliquer la mise en évidence. Voici un exemple de comment vous pourriez ajuster votre macro pour le faire
Range("G1").Select
ActiveCell.FormulaR1C1 = "Test"
Range("G2").Select
ActiveCell.FormulaR1C1 = "=IFERROR(IF(AND(VALUE(LEFT(RC[-5],6))>=100000,VALUE(LEFT(RC[-5],6))<600000),LEFT(RC[-5],6),""""),"""")"
LastRw = Sheets("Balance").Cells(Rows.Count, 2).End(xlUp).Row
Range("G2:G" & LastRw).FillDown
Range("$A$1:$G$" & LastRw).AutoFilter Field:=7, Criteria1:="<>"
Range("F1:F" & LastRw).Interior.Color = RGB(255, 255, 255) ' reset color
Dim rng As Range
For Each rng In Range("F2:F" & LastRw)
If rng.EntireRow.Hidden = False And rng.Offset(0, 1).Value <> "" Then
rng.Interior.Color = RGB(0, 255, 0) ' green color
End If
Next rngJ'ai aussi corrigé la formule pour extraire les 6 premiers caractères en VALUE(LEFT(RC[-5],6)), au lieu de VALUE(LEFT(RC[-5],FIND("""",RC[-5],6))).
J'espère que cela vous aidera !
Bonjour à tous les 2,
Jean-Eric, je suis conscient que joindre un fichier était plus efficient, mais celui-ci n'étant pas anonymisable, j'attendais le dernier recours pour le transmettre.
Merci Abderrahmane BENALI !!! Votre exemple m'a totalement aidé :) J'ai juste changé la couleur du RGB pour l'adapter à mon cas.
Merci encore !!
Belle journée à tous,
Rylaugone