Afficher/masquer colonnes selon le filtre appliqué

Superemi

XLDnaute Junior
Bonjour à tous,

Voici mon problème.

Je souhaite afficher/masquer des colonnes suivant la(les) colonne(s) dans laquelle(lesquelles) j'applique un filtre.

En PJ un fichier où j'explique plus clairement et avec des exemples.
Je pense que cela nécessite une macro mais je ne vois pas laquelle (j'ai essayé avec If mais rien de concluant).

Merci par avance de vos réponses.

Cdt,
Superemi.
 

Pièces jointes

  • Classeur1.xlsx
    10.7 KB · Affichages: 71
  • Classeur1.xlsx
    10.7 KB · Affichages: 82
  • Classeur1.xlsx
    10.7 KB · Affichages: 78

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Afficher/masquer colonnes selon le filtre appliqué

Bonjour Superemi,

Un essai dans le fichier joint.

Attention:
  1. Le titre de la colonne A a été modifié et remplacé par la formule (pour activer l'évènement Calculate quand on modifie le filtre):
    Code:
    ="Type" & TEXTE(SOUS.TOTAL(3;Feuil1!$A2:$A99999);"")
  2. le filtre doit commencer en colonne B (sinon il faut modifier les bornes et le contenu de la boucle For i= 1 to 4)


Le code se trouve dans le module de code de la feuille "Feuil1":
VB:
Private Sub Worksheet_Calculate()
Dim i&

  If ActiveSheet.AutoFilterMode Then
    For i = 1 To 4
      Cells(1, (6 + 2 * (i - 1))).Resize(, 2).EntireColumn.Hidden = Not ActiveSheet.AutoFilter.Filters(i).On
    Next i
  Else
    Columns("F:M").Hidden = False
  End If
  
End Sub
 

Pièces jointes

  • Afficher-masquer colonnes selon le filtre v1.xlsm
    20.7 KB · Affichages: 83
Dernière édition:

Superemi

XLDnaute Junior
Re : Afficher/masquer colonnes selon le filtre appliqué

Bonjour mapomme,

Merci pour ta réponse.

C'est bien ce je souhaite mais le problème c'est que la macro n'est pas adaptable au fichier sur lequel je veux appliquer la macro du fait de la boucle.
Aussi je te joins le fameux fichier dans lequel j'ai conservé les lignes et les colonnes, la mise en forme aussi pour que tu puisses bien te rendre compte et mieux me répondre.

Ma demande est la même que celle ci-avant, à savoir par exemple : Je filtre sur la colonne Choix 1 => les colonnes Résultat Choix 1 s'affichent et les autres colonnes sont masquées ; etc.

Merci de ton retour.

Cordialement,
Superemi.
 

Pièces jointes

  • Classeur 2.xls
    51 KB · Affichages: 53
  • Classeur 2.xls
    51 KB · Affichages: 58
  • Classeur 2.xls
    51 KB · Affichages: 59

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Afficher/masquer colonnes selon le filtre appliqué

Bonjour Superemi,

(...) le problème c'est que la macro n'est pas adaptable au fichier sur lequel je veux appliquer la macro du fait de la boucle. (...) Ma demande est la même que celle ci-avant, à savoir par exemple : Je filtre sur la colonne Choix 1 => les colonnes Résultat Choix 1 s'affichent et les autres colonnes sont masquées ; etc. (...)

Un essai dans le fichier joint. Le code est:
VB:
Private Sub Worksheet_Calculate()
Dim i&, j&
  Application.ScreenUpdating = False
  If ActiveSheet.AutoFilterMode Then
  For j = 19 To 40
    For i = 1 To 5
        If Cells(5, j).Value Like "*" & Cells(5, 13 + i).Value Then
          Cells(5, j).EntireColumn.Hidden = Not ActiveSheet.AutoFilter.Filters(i).On
        End If
      Next i
    Next j
  Else
    Columns("s:ak").Hidden = False
  End If
  Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • Afficher-masquer Feuilles v3.xls
    64 KB · Affichages: 58

Superemi

XLDnaute Junior
Re : Afficher/masquer colonnes selon le filtre appliqué

Bonjour mapomme,

Merci de ton retour.

Hélas je rencontre à nouveau un problème.
Si j'ai bien compris avec la macro, la condition est que si je filtre Choix 1, les colonnes ayant dans leur titre Choix 1 s'affichent.

Mais je ne peux pas me servir de cette condition dans le fichier que je souhaites.
Je te remets un fichier en PJ avec de nouveaux exemples.

Dsl c'est moi qui ai du mal à définir mes exemples.

Merci de ton retour.

Cordialement,
Superemi.
 

Pièces jointes

  • Afficher-masquer Feuilles v4.xls
    61.5 KB · Affichages: 53
  • Afficher-masquer Feuilles v4.xls
    61.5 KB · Affichages: 52
  • Afficher-masquer Feuilles v4.xls
    61.5 KB · Affichages: 54

Superemi

XLDnaute Junior
Re : Afficher/masquer colonnes selon le filtre appliqué

Bonsoir Superemi,

Je ne comprends plus. Comment savoir quelles colonnes masquer en fonction des filtres activés ou non ? Je ne vois pas comment les repérer. :confused:

Oups c'est moi, j'avais mis une zone texte dans le fichier pour l'explication mais elle a dû sauter.
Je te remets le fichier avec les explications, ça sera plus clair.
 

Pièces jointes

  • Afficher-masquer Feuilles v4.xls
    65.5 KB · Affichages: 57
  • Afficher-masquer Feuilles v4.xls
    65.5 KB · Affichages: 63
  • Afficher-masquer Feuilles v4.xls
    65.5 KB · Affichages: 72

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Afficher/masquer colonnes selon le filtre appliqué

Bonjour Superemi,

Voici un essai dans le fichier joint. Pour repérer les colonnes à masquer ou à afficher suivant les filtres, on utilise une constante qui décrit pour chaque colonne à quelle colonne du filtre elle correspond. Ceci autorise à ce que les colonnes à masquer ou à afficher pour une même colonne du filtre ne soient pas contigües.

Notez que, pour l'exemple, la colonne 7 (correspondant à "Justine") ne sera jamais affichée car elle est reliée à la colonne 0 du filtre qui n'existe pas!

Le code dans le module de la feuille "veille":
VB:
Private Sub Worksheet_Calculate()
'--------------------------------------------------------------
Const DebutColFiltre = "N"
Const NbrColFiltre = 5
Const AffCol = "1,1,1,2,2,2,0,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5"
'--------------------------------------------------------------
Dim i&, j&, tablo
  Application.ScreenUpdating = False
  tablo = Split(AffCol, ",")
  Range("N5").Offset(, NbrColFiltre).Resize(, UBound(tablo) + 1).EntireColumn.Hidden = True
  If ActiveSheet.AutoFilterMode Then
    For i = 0 To UBound(tablo)
      If tablo(i) > 0 And tablo(i) <= NbrColFiltre Then
        Range("N5").Offset(, i + NbrColFiltre).EntireColumn.Hidden = Not ActiveSheet.AutoFilter.Filters(tablo(i)).On
      End If
    Next i
  End If
  Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • Afficher-masquer Feuilles v5.xls
    69 KB · Affichages: 87
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 030
Messages
2 084 778
Membres
102 663
dernier inscrit
Kildod