VBA Afficher/Masquer cellules selon leur couleur [Résolu/Fermé]

Signaler
Messages postés
15
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
25 avril 2013
-
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
-
Bonjour,

comment on fait ( macro / VBA ), dans une feuille avec plusieurs cellules de différentes couleurs de n'afficher / masquer que les cellules dont la couleur nous intérésse ?

Merci

9 réponses

Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
Bonjour,

Inutile de doublonner, nous allons te répondre ici.

Comment sont obtenues les couleurs dans ta feuille? Mise en forme conditionnelle ou saisies par l'utilisateur?
Qu'elles sont les lignes et colonnes concernées?
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
15
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
25 avril 2013

Re-bonjour

Les couleurs dans la cellules sont obtenus en fonction d'"un mot" figurant dans la cellule à l'aide de :
Private Sub worksheet_selectionchange(ByVal target As Range)
ligne = ActiveCell.Row
colonne = ActiveCell.Column
If InStr(Cells(ligne, colonne), "Entreprise1 ") Then
Cells(ligne, colonne).Interior.ColorIndex = 36
Cells(ligne, colonne + 1).Interior.ColorIndex = 36
End If
end sub

et j'ai plus de 15 couleurs ( 15 entreprises )
lignes concernées sont : 5 à 23
colonnes concernées : C à BF

Merci d'avance
Messages postés
15
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
25 avril 2013

non elle vont des collones "C" à " BF "
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
Dans les cellules contenant Entreprise 1, Entreprise 2 etc, y a t'il autre chose ou juste le nom de l'entreprise???
Messages postés
15
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
25 avril 2013

y a la tâche de l'entreprise , du style " entreprise 1 : pose support porte "
mai j'ai aussi des cellules de même couleur ( effectif / nombre de palette ) que je veux pouvoir afficher en même temps avec ma " comande "
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
je suppose que les noms des entreprises n'ont rien en commun? Ce que tu nous donnes dans l'exemple "entreprise 1" "entreprise 2" etc... ne sont pas réels? C'est plus : renault, peugeot, citroën etc...
Messages postés
15
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
25 avril 2013

ouii
Messages postés
15
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
25 avril 2013

Merci énormélement,
je suis entrain de travailler dessus
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
N'hésite pas à revenir si cela fonctionne ... ou pas!
Messages postés
15
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
25 avril 2013

j'ai essayé , votre programme marche super bien , sauf que moi j'ai besoin de filtrer les cellules de même couleur, pas toute la ligne
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
filtrer les cellules de même couleur, pas toute la ligne
Je ne comprends pas...
Prenons un exemple.
Tu as, dans ton Range("C5:BF23") 5 cellules rouge (colorindex = 3) situées en : C18, G5, AZ23, BA5 et BA6. Tu ne veux avoir affiché à l'écran que ces 5 cellules???
Messages postés
15
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
25 avril 2013

voilà le lien à une partie du tableau ,
le filtre que vous m'avez proposé se fait sur la ligne , ce qui fait , j'ai des cellules sur la même ligne faisant référence à d'autre entreprises qui restent affichées


https://www.cjoint.com/?3DyovIC4xXH
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
En fait, un filtre s'applique soit sur toute la ligne, soit sur toute la colonne...

Si tu veux n'obtenir que tes cellules rouges, il faut les copier/coller sur une autre Feuille par exemple...
Je te fais ça sur mon classeur exemple.
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
premier exemple :
Sub FiltreSurCouleur()
If ActiveCell.Interior.ColorIndex = xlNone Then MsgBox "Merci de sélectionner une cellule colorée pour le filtre.": Exit Sub
Filtrer ActiveCell.Interior.ColorIndex
End Sub

Sub Filtrer(coul As Integer)
Dim lig As Integer, col As Integer, ligF2 As Integer, colF2 As Integer

With Sheets("Feuil2")
    For lig = 5 To 23 'de la ligne 5 à la ligne 23
        For col = 3 To 59 ' de la colonne C à BF
            If Sheets("Feuil1").Cells(lig, col).Interior.ColorIndex = coul Then Sheets("Feuil1").Cells(lig, col).Copy .Cells(lig, col)
        Next col
    Next lig
    .Activate
End With
End Sub
Messages postés
15
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
25 avril 2013

et pour répondre à votre question , c'est oui !
Messages postés
15
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
25 avril 2013

Merci beaucoup , ça m'a beaucoup aidé
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
De rien.
A+
Messages postés
15
Date d'inscription
mardi 23 avril 2013
Statut
Membre
Dernière intervention
25 avril 2013

Bonjour ,

je reviens vers vous pour savoir comment adapter le code que vous m'avez passé hier afi nde pouvoir filtrer des colonnes



Sub Filtrer(Coul As Integer)
Dim lig As Integer, col As Integer, Masque As Boolean

For lig = 5 To 34
Masque = True
For col = 3 To 59
If Cells(lig, col).Interior.ColorIndex = Coul Then Masque = False
Next col
If Masque = True Then Rows(lig).Hidden = True
Next lig
End Sub




Merci d'avance

cordialement
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
Bonjour,

Simplement.
Tu détermines tes cellules en fonction de deux critères : la ligne (variable lig) et la colonne (variable col).
Si tu veux masquer la colonne au lieu de la ligne, il convient de remplacer: Rows(machin) par Columns(truc)
Par contre, comme nous avons une double boucle, d'abord sur les lignes puis sur les colonnes, il nous faudra les inverser...
Résultat
Sub Filtrer(Coul As Integer) 
Dim lig As Integer, col As Integer, Masque As Boolean 

For col = 3 To 59
    Masque = True
    For lig = 5 To 34 
        If Cells(lig, col).Interior.ColorIndex = Coul Then Masque = False 
    Next lig
    If Masque = True Then Columns(col).Hidden = True 
Next col
End Sub
Messages postés
12235
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
6 janvier 2021
2 555
Bon, voici ma proposition :

Un classeur exemple.

Dans le module de la feuille concernée :
La macro de coloriage de cellules au clic dans une cellule :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim Texte As String, NomsEntreprises As Variant, i As Integer 

If Target.Count > 1 Then Exit Sub 
NomsEntreprises = RempliEntreprises 
Texte = "" 
For i = LBound(NomsEntreprises) To UBound(NomsEntreprises) 
    If InStr(Target.Value, NomsEntreprises(i)) Then Texte = NomsEntreprises(i): Exit For 
Next i 
If Texte <> "" And Not IsError(Application.Match(Texte, RempliEntreprises, 0)) Then Range(Target, Target.Offset(0, 1)).Interior.ColorIndex = Colorer(Texte) 
End Sub

Pour que cette macro fonctionne, il faut placer ces trois fonctions dans un module standard :
Function RempliCouleurs() As Variant 
RempliCouleurs = Array(36, 10, 3, 37, 24, 40, 7, 46, 43, 27, 22, 39, 8) 
End Function 

'A ADAPTER : 
'les noms des entreprises ci-dessous, 
'dans le même ordre que les couleurs ci-dessus 

Function RempliEntreprises() As Variant 
RempliEntreprises = Array("Renault", "Peugeot", "Citroën", "Fiat", "Ferrari", "Porsche", "Lada", "Seat", "Wolksvagen", "Honda", "BMW", "Mercedes", "Ford") 
End Function 

Function Colorer(Entreprise) 
Colorer = RempliCouleurs(Application.Match(Entreprise, RempliEntreprises, 0) - 1) 
End Function


La macro qui filtre comprends deux procédures, les placer dans un module standard également (le même) :
Sub FiltreSurCouleur() 
If ActiveCell.Interior.ColorIndex = xlNone Then MsgBox "Merci de sélectionner une cellule colorée pour le filtre.": Exit Sub 
Range("C5:BF23").EntireRow.Hidden = False 
Filtrer ActiveCell.Interior.ColorIndex 
End Sub 

Sub Filtrer(Coul As Integer) 
Dim lig As Integer, col As Integer, Masque As Boolean 

For lig = 5 To 23 'de la ligne 5 à la ligne 23 
    Masque = True 
    For col = 3 To 59 ' de la colonne C à BF 
        If Cells(lig, col).Interior.ColorIndex = Coul Then Masque = False 
    Next col 
    If Masque = True Then Rows(lig).Hidden = True 
Next lig 
End Sub

pour filtrer, sélectionner un cellule de la couleur voulue et lancer la macro FiltreSurCouleur...

En bonus, cette procédure colorie toutes les cellules de C5 à BF23 qui contiennent une des entreprises...
Sub ColorieToutLeRangeC5BF23() 
Dim Cel As Range, Cpt As Integer, Texte As String, NomsEntreprises As Variant, i As Integer 

NomsEntreprises = RempliEntreprises 
For Each Cel In Range("C5:BF23") 
    Texte = "" 
    For i = LBound(NomsEntreprises) To UBound(NomsEntreprises) 
        If InStr(Cel.Value, NomsEntreprises(i)) Then Texte = NomsEntreprises(i): Exit For 
    Next i 
    If Texte <> "" And Not IsError(Application.Match(Texte, RempliEntreprises, 0)) Then Range(Cel, Cel.Offset(0, 1)).Interior.ColorIndex = Colorer(Texte) 
Next Cel 
End Sub






Cordialement,
Franck P