Généralisation d'une macro pour afficher/masquer des colonne

Bonjour à tous,

J'ai réussi un crée une macro toute simple (qui ma pris presque 1 journée entière quand même ..) qui me permet d'afficher/masquer une colonne en fonction du texte inscrit dans une cellule.

Je vous donne un exemple :

Si ma cellule TR5 est égale à OUI alors j'affiche la colonne TT, si ma cellule TR5 n'est pas égal à OUI (NON ou vierge dans mon cas) la colonne TT est masquée.

J'aimerais maintenant que cette macro s'applique "AUTOMATIQUEMENT" aux colonnes de droite et aux lignes en dessous (jusqu'à ligne 10 dans mon fichier).

Exemple de la colonne de droite d'a coté :

Si ma cellule TT5 est égale à OUI alors j'affiche la colonne TU, si ma cellule TT5 n'est pas égal à OUI la colonne TU est masquée.

Je vous remercie par avance de votre aide

84test.xlsm (160.51 Ko)

Bonjour Thibault

Un fichier à tester avec un double-clic qui cache ou affiche les colonnes

Amicalement

Pierrot

resolu 4
99test-2-cp01.xlsm (160.24 Ko)

Bonjour Thibault,

Bonjour Pierre,

Une autre proposition

105test.xlsm (175.09 Ko)

A+

Bonjour,

tout d'abord je vous remercie de m'avoir aidé.

Le fichier qui correspond à mes attentes et celui de frangy.

Frangy, serait-il possible que tu m'expliques ton code, en venant sur ce forum je voulais pas seulement la réponse à mon problème mais comprendre comment faire pour le réaliser tout seul.

Je vais potasser de mon coter pour essayer de comprendre ce que tu as fait mais des explications seraient bien venus

Encore merci à vous 2

Bonjour,

Avec quelques commentaires le code va te sembler limpide

J'ai utilisé la procédure évènementielle Worksheet.Change afin de détecter la modification des cellules des colonnes qui nous intéressent, à savoir les colonnes paires, à partir de la colonne H.

Ensuite, il suffit d'effectuer le masquage / affichage de la colonne associée selon la valeur de la cellule modifiée (OUI / NON ou vide). Pour effectuer ce masquage, il faut toutefois prendre en compte l'ensemble des cellules de la plage comprise entre la ligne 5 et la ligne 10. Si une cellule de cette plage a pour valeur "OUI", la colonne associée doit être (ou rester) affichée.

Pour cela, on fait le compte des cellules qui contiennent "NON". Si ce nombre est égal au nombre de cellules renseignées la colonne peut être masquée.

Voici le code commenté

Private Sub Worksheet_Change(ByVal Target As Range)
Dim TestHidden As Byte
    'Si plusieurs cellules ont été modifiées on sort de la procédure.
    If Target.Count > 1 Then Exit Sub
    'On désactive l'actualisation de l'écran
    Application.ScreenUpdating = False
    'Si le numéro de colonne de la cellule modifiée est pair et supérieur ou égal à 8
    If Target.Column Mod 2 = 0 And Target.Column >= 8 Then
        'Si la valeur de la cellule modifiée est "OUI"
        If Target.Value = "OUI" Then
            'La colonnne associée est affichée
            Target.Offset(0, 1).EntireColumn.Hidden = False
        Else
            'Sinon, on compte le nombre de cellules non vides entre les lignes 5 et 10
            TestHidden = Application.CountA(Range(Cells(5, Target.Column), Cells(10, Target.Column)))
            ' Si le nombre de cellules non vides est égal au nombre de cellules qui contiennent "NON"
            If TestHidden = Application.CountIf(Range(Cells(5, Target.Column), Cells(10, Target.Column)), "NON") Then
                'La colonnne associée est masquée
                Target.Offset(0, 1).EntireColumn.Hidden = True
            End If
        End If
    End If
End Sub

A+

Merci frangy, c'est tout de suite plus clair même si je dois pousser encore mes recherches sur certaines des fonctions utilisées

J'ai trouvé 2 points d'améliorations à mon projet mais je ne sais pas si je dois les demander ici ou regréer une demande avec un nom plus explicite, merci de me tenir informé.

Les points d'améliorations seraient :

_Que dans mes cellules de la colonne E sont inscrits la date ou à été mis le "OUI" le plus à droite du fichier.

Actuellement il faut rentrer la date manuellement après avoir mis "OUI" dans la bonne cellule , je veux automatiser cette fonction pour éviter les oublies éventuelles.

J'espère que j'ai était clair dans mon explication ..

_Dans mon projet, la couleur orange signifie que les cellules n'ont pas était encore saisie.

J'aimerai donc que si à la ligne 5 la cellule TR5 contienne "OUI" et la cellule TS5 contienne"Jack" que sur ligne 6 si on indique "NON" dans la cellule TR6, la cellule TS6 soit de couleur rouge.

J’espère avoir été clair.

Je te/vous remercie par avance de ton/votre aide

55test-v2.xlsm (187.99 Ko)
Rechercher des sujets similaires à "generalisation macro afficher masquer colonne"