|
|
|
|
[Excel VBA] Filtre sur couleur de cellules...
Dernière réponse le 1 nov 2007 à 23:54:42 PBGunner, le 17 oct 2007 à 15:05:11Bonjour,
Je cherche a faire une macro VBA qui filtre les données d'une colonne sous Excel 2003 avec comme critère la couleur des cellules...
Par exemple, dans une colonne de 200 données, j'ai 50 cellules jaunes, et je ne veux voir que ces 50 cellules dans mon filtre...
Des idées?
Merci pour votre aide!
Configuration: Windows 2000 Internet Explorer 5.5
Sub Filtre()
'On gèle l'écran
Application.ScreenUpdating = False
'Déclaration des variables
Dim i As Integer
'Code
i = 1
While Not IsEmpty(Cells(i, 1))
If Cells(i, 1).Interior.ColorIndex = 6 Then
Cells(i, 2) = Cells(i, 1)
End If
i = i + 1
Wend
End Sub
Tu peux également faire une boucle FOR si la taille de ta liste est toujours la même Tu peux également changer la valeur de "ColorIndex" si tu souhaites filter d'autre couleur (ici, c'est pour le jaune) Cordialement |
Ce code recopie les valeurs qui sont en jaune dans une autre colonne. ensuite je pense qu'il faut ajouter un filtre auto sur ce champ supplémentaire avec un critère non vide...
|
Juste un petit ajustement: Ce code filtre sur la couleur mais exclue les enregistrement... en fait partout ou j'ai du jaune, les lignes sont cachées...
|
Je travaille sur l'ajout des fonctionnalités: le code de mon précédent message ne fonctionnant que pour la première colonne, et plutot que de rentrer dans la macro le ColorIndex, on peut définir dans la première cellule de n'importe quelle colonne la couleur du filtre pour la colonne. Dès que j'ai fini le code, je le met en ligne!
|
Voici le code finale, pas dans l'état le plus avancé, je n'ai pas eu le temps de le fignoler.
Sub Filtre_by_color()
'On gèle l'écran
Application.ScreenUpdating = False
'Déclaration des variables
Dim i, ColAct As Integer
ColAct = ActiveCell.Column 'Detecte le numéro de la colonne active sur lequel sera effectué le filtre
'Code
i = 2 'En partant de la 2ème ligne, on peut conserver une ligne d'entête
While Not IsEmpty(Cells(i, 1))
If Not Cells(i, ColAct).Interior.ColorIndex = Cells(1, ColAct).Interior.ColorIndex Then
Rows(i).EntireRow.Hidden = True
End If
i = i + 1
Wend
End Sub
J'espère que ca servira! A+ |

