Masquer colonne sous condition

Bonjour,

Je souhaiterais masquer des colonnes dans une feuille de mon fichier excel sous condition du contenu d'une autre cellule dans une autre feuille.

Je vous explique par rapport a mon fichier joint:

Dans ma feuille "CHOIX" j'ai 5 cases a remplir avec une liste de choix (il y en a 27) pour chaque case. Je ne suis pas obligé de tout remplir.

Dans ma feuille "LUNDI" j'ai un tableau de 27 colonnes correspondant au 27 choix précédents que j'ai dupliqué 5 fois a la suite.

Ce que je veux c'est que a chaque fois que je sélectionne un produit dans la liste des choix de chaque case, dans ma feuille "LUNDI" il ne s'affiche que les colonnes correspondants au choix fais et les autres se masquent automatiquement.

Exemple: dans la feuille "CHOIX" pour lundi, la case 1 je choisi "pain", case 2 "baguette", case 3 "croissant", case 4 jusqu’à 5 rien, je souhaite que dans la feuille "LUNDI" j'ai un tableau de 5 colonnes avec colonne 1 "pain", colonne 2 "baguette", colonne 3 "croissant" et le reste rien.

J’espère avoir été clair.

Merci d'avance de votre aide.

213ecoles.zip (40.92 Ko)

Bonjour,

Dans le fichier joint, 3 codes.

Le premier, dans l'évènement de feuille

- Lorsque tu actives un onglet (LUNDI.....), tu appelles le deuxième code

Le deuxième, qui masque les colonnes en fonction de tes choix

Le troisième qui te permet d'afficher tout

Pense à rajouter le premier dans chaque évènement de feuilles que tu vas créer (MARDI.....)

Les codes :

Private Sub Worksheet_Activate()
Call Masq(Me.Name)
End Sub

Puis :

Sub Masq(Nom As String)
Dim Cel As Range, C As Range
Application.ScreenUpdating = False
Cells.EntireColumn.Hidden = False
For Each Cel In Sheets("CHOIX").Range("A8:A14")
    If UCase(Format(Cel, "dddd")) = UCase(Nom) Then
        For Each C In Sheets(Nom).Range("B3:EF3")
            If IsEmpty(C) Or IsError(Application.Match(C, Cel.Offset(, 1).Resize(1, 5), 0)) Then
                C.EntireColumn.Hidden = True
            End If
        Next C
        Exit Sub
    End If
Next Cel
End Sub

Et enfin :

Sub affiche()
Cells.EntireColumn.Hidden = False
End Sub

Et ton fichier en exemple :

447ecoles-v1.zip (49.19 Ko)

bonne journée

Bonjour,

Merci cousinhub pour ta réponse. On y est presque je pense.

Dans ma feuille LUNDI, j'ai créer 5 tableau de 27 colonnes chacun, les 27 premières correspondent au choix1 dans la feuille CHOIX, les 27 suivants au choix2...

quand je choisi PAIN dans le choix1, il faudrait afficher seulement la colonne pain des 27 premières colonnes, BAGUETTE dans le choix2 doit afficher seulement la colonne baguettes des 27 colonnes suivantes...

Dans ta réponse j'ai les 5 choix d'afficher pour chaque 27 colonnes.

J’espère que t'as compris mon raisonnement. Logiquement avec les choix que tu as fais dans le fichier que tu m'as envoyé, je devrais avoir un tableau de 5 colonnes avec Baguette, 1/2 Baguettes, Pain au chocolat, Torsades au Chocolat et la 5eme colonne vide.

Encore Merci

Re-,

J'ai modifié le code comme ceci :

Sub Masq(Nom As String)
Dim Cel As Range, C As Range
Dim I As Byte
Application.ScreenUpdating = False
Cells.EntireColumn.Hidden = False
For Each Cel In Sheets("CHOIX").Range("A8:A14")
    If UCase(Format(Cel, "dddd")) = UCase(Nom) Then
        For Each C In Sheets(Nom).Range("B3:EF3")
            I = Application.RoundUp(C.Column / 27, 0)
            If C.Value = 0 Or C.Value <> Cel.Offset(, I) Then C.EntireColumn.Hidden = True
        Next C
        Exit Sub
    End If
Next Cel
End Sub

Le fichier :

293ecoles-v2.zip (49.21 Ko)

Merci cousinhub, c'est vraiment sympa, depuis le temps que je cherchais la solution.

Par contre juste une dernière chose, je souhaite quand même que dans mon tableau final j'ai l'affichage de 5 colonnes, même celle ou j'ai rien mis dans le choix. Exemple, je choisi pain case1, baguette case2, vide case3, 1/2 baguettes case4 et rien case5, il fraudais que ça affiche pain, baguettes, colonne vide, 1/2 baguette et colonne vide.

Merci encore

Re-,

Remplace le code par celui-ci :

Sub Masq(Nom As String)
Dim Cel As Range, C As Range
Dim I As Byte
Application.ScreenUpdating = False
Cells.EntireColumn.Hidden = False
For Each Cel In Sheets("CHOIX").Range("A8:A14")
    If UCase(Format(Cel, "dddd")) = UCase(Nom) Then
        For Each C In Sheets(Nom).Range("B3:EF3")
            I = Application.RoundUp(C.Column / 27, 0)
            If C.Value = 0 Or C.Value <> Cel.Offset(, I) Then C.EntireColumn.Hidden = True
            If C.Column Mod 27 = 0 And IsEmpty(Cel.Offset(, I)) Then C.EntireColumn.Hidden = False
        Next C
        Exit Sub
    End If
Next Cel
End Sub

Bonne soirée

Bonsoir cousinhub

Encore merci pour ton aide, c'est exactement ce que je voulais.

Par contre est-ce normal le ralentissement que j'ai une fois le code changé? quand je passe sur la feuille LUNDI, ça met un petit laps de temps avant de s'afficher.

Merci

Re-,

Par contre est-ce normal le ralentissement que j'ai une fois le code changé? quand je passe sur la feuille LUNDI, ça met un petit laps de temps avant de s'afficher.

Chez moi, je ne le remarque pas....

Stoppe Excel, et redémarre, peut-être?

Bonne soirée

Bonjour,

Merci cousinhub, c'est bon j'ai redémarré mon ordinateur et tout fonctionne parfaitement.

Bonne journée

Rechercher des sujets similaires à "masquer colonne condition"