[Excel VBA] Filtre sur couleur de cellules...

Résolu
PBGunner -  
PBGunner Messages postés 64 Statut Membre -
Bonjour,

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

9 réponses

  1. PBGunner Messages postés 64 Statut Membre 64
     
    Voici le code finale, pas dans l'état le plus avancé, je n'ai pas eu le temps de le fignoler.
    Ce code fait un filtre sur les couleurs, sur n'importe quelle colonne, en laisant la première ligne apparante et en prenant comme couleur de référence, la couleur de la premiere cellule de la colonne selectionnée...

    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+
    4
  2. Argile92 Messages postés 10 Statut Membre
     
    
    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
    0
  3. PBGunner Messages postés 64 Statut Membre 64
     
    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...
    J'avais déja fait ce type de macro avec l'utilisation d'une colonne supplémentaire, en écrivant simplement le code couleur, du coup on peut filtrer sur le type de couleur.

    Avec ce type de manip on peut s'en sortir mais j'aimerai savoir si on peut se passer de créer une colonne supplémentaire?

    Je pensais par exemple utiliser la fonction "autofilter" avec comme critière une propriété de la cellule... Un truc du genre:

    Selection.AutoFilter Field:=2, Criteria1:= cell.Interior.ColorIndex = 6

    Mais ca ne marche pas... Peut etre que la syntaxe est fausse... ou que le type d'argument attendu n'est pas valide...

    D'autres idées?
    0
  4. PBGunner Messages postés 64 Statut Membre 64
     
    Alors personne n'a d'autres idées pour faire un filtre avec un critère de couleur?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    A ma connaissance autofilter ne te permet pas ça.
    Puisque dans ton code tu as le n° de ligne remplace
    Cells(i, 2) = Cells(i, 1) par Rows(i).EntireRow.Hidden = True pour masquer la ligne, l'effet sera le même

    eric
    0
  7. PBGunner Messages postés 64 Statut Membre 64
     
    Salut Eriiiic
    Merci pour l'astuce, c'est mieux que de créer une colonne!
    Ca répondra a mon besoin pour le moment.
    Je vais quand même approfondir en essayant de trouver si on peut filtrer sur une variable...
    a+
    0
  8. PBGunner Messages postés 64 Statut Membre 64
     
    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...
    Pour filtrer sur la couleur il faut utiliser le code suivant:

    Sub Filtre_by_color()

    'On gèle l'écran
    Application.ScreenUpdating = False

    'Déclaration des variables
    Dim i As Integer

    '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, 1).Interior.ColorIndex = 6 Then
    Rows(i).EntireRow.Hidden = True
    End If
    i = i + 1
    Wend

    End Sub

    J'ai mis en gras les corrections que j'ai apporté.
    Merci encore!
    0
  9. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Merci de la part de ceux qui liront plus tard pour le complément.
    Bonne continuation
    eric
    0
  10. PBGunner Messages postés 64 Statut Membre 64
     
    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!
    a+
    0