Masquer des colonnes à cellules non utilisées

Bonjour,

Cela fait depuis une semaine que je cherche une solution à mon problème. Après avoir lu et relu des sujets traitant à peu près de la même question, je n'ai pas trouvé de solution.

Voici un exemple (simplifié) en 1ère page (capture1) d'un document que je voudrais modifier pour le rentre plus lisible, moins "chargé"

En 2ème page(capture2), l'explication :

A l'aide d'un filtre, je sélectionne la référence qui m'intéresse. Si mes cellules encadrées en rouge sont vides, j'aimerai masquer mes colonnes D4-22 à H4-22 de manière à décaler (centrer mon tableau) et avoir juste les informations où des "x" apparaissent.

Aujourd'hui, j'ai pris connaissance des "Macro" mais je n'en ai jamais fait. Je me demandais si il y avait une Macro miracle pour résoudre mon problème.

Le document joint est un excel simplifié, mes colonnes vont parfois jusqu'en "BO" donc si macro il existe, pourriez-vous m'expliquer la démarche sa rédaction pour que je puisse la transposer sur mon fichier excel d'origine ?

Si ce n'est pas le cas, merci de me dire que ce que je demande est impossible !

Merci infiniment pour votre aide !

capture1 capture2

Bonjour et bienvenu sur le forum

Avec des copies d'écran, on ne peut rien faire.

Mais si tu joins ton fichier, on pourra te proposer quelque chose.

Bye :!

Bonjour,

Merci beaucoup !

Voici le fichier en PJ

Merci d'avance pour votre aide !

11classeur1.zip (8.04 Ko)

Bonjour, voici un fichier test :

32masquage.xlsm (18.75 Ko)

Attention, la prochaine fois merci de fournir un fichier Excel de support. Le principe est simple : une variable interrupteur afin de savoir si la feuille est filtrée ou pas, dans une cellule nommée "Filtré", Cette cellule nommée vous pouvez la déplacer où vous voulez dans le classeur. Ensuite le test de la longueur du tableau se fait au niveau de la ligne d'entête : si cellule vide alors le tableau est fini. Donc dans cette ligne pas "de trous" sinon vous pouvez toujours mettre un "espace" pour les remplir sans que cela se voit. La suite, on récupère par double clic la référence choisie (Target dans le code), cela nous donne le numéro de ligne à laisser visible, et surtout le numéro de ligne où il faut faire le teste de la présence ou pas de valeur avec Target.Row. le teste au niveau des colonnes se fait par une variable "Colonne" qui partira de 3 (sur mon fichier) et qui sera incrémentée de +1 à chaque boucle, Si la cellule à l'intersection de la ligne et de la colonne est vide alors on masque la colonne, sinon on ne fait rien , et on change de colonne. pour laisser la ligne cliqué visible, je masque toutes les lignes références et je montre la ligne Target.Row. A chaque fois en fonction qu'on cache ou montre on modifie la valeur de la cellule Filtré. En re cliquant sur la seule référence visible on affiche tout.

vbMBHB

Bonjour,

Je vous prie de m'excuser, je n'ai pas compris votre démarche.

J'ai repris le document que vous m'avez joint mais je n'arrive pas à appliquer votre procédure...

Merci de votre aide

Sur mon fichier (il faudra adapter au votre) pour masquer les colonnes d'une référence il suffit de double cliquer sur la cellule de la référence, alors soit cela masque les colonnes où il n'y a pas de données sur la ligne de cette référence soit ça montre tout afin de "retomber" sur une feuille "normale" où toutes les références sont visibles. Il faut pour cela que les macros soient activées, autant vous avez un bandeau jaune qui vous pose la question, il vous suffit de cliquer sur le bouton à droite de ce bandeau [Activer].

C'est tout de même dommage au vu du fichier que je me suis embêter à faire

vbMBHB

Merci beaucoup ! C'est exactement ce que je cherchais à faire !

Par contre, auriez-vous la possibilité de me décrire étape par étape votre manipulation pour que je puisse l'appliquer sur mon document original (je suis vraiment désolée, mon niveau sur excel se résume à faire des sommes et des moyennes, je suis complètement perdue )

Les commentaires sur le code ne suffisent pas ?

vbMBHB

Malheureusement non, je suis désolée...

Je ne vois pas à quoi correspond le système de "code" et je ne comprend pas comment reproduire ce que vous avez fait ...

Le "code" c'est aussi ce qu'on appelle la Macro ?

(Je suis vraiment désolée ! )

EDIT : Je pense avoir trouver ce dont vous me parliez ! Je vais voir si j'arrive à l'appliquer toute seule...

Ça y est ! Ça fonctionne parfaitement !!

J'ai cependant 2 dernières petites questions :

  • Admettons que je doive rajouter une référence dans mon tableau, est ce que je devrais modifier à chaque ajout de référence ma macro ?
  • Comment faire si mes références à double cliquer sont de B5 à B32 puis de B39 à B55 ?

Merci pour votre aide et vos réponses !

Bravo à vous, ce n'est jamais facile quand on débute, ceci dit il ne faut pas "s'avouer" vaincu avant d'avoir "vraiment" essayé !

Je suis content pour vous si cela vous convient.

vbMBHB

J'oubliais, la réponses à vos deux questions : en fait c'est deux questions mais qui apportent une seule réponse et celle-ci tient dans cette ligne de code (de la Macro) : If Not Intersect(Target, Range("B5:B11")) Is Nothing Then

En fait on a un test d'intersection de la cellule "double cliquée "Target" et une plage de cellule qu'on "surveille" ici B5:B11. Si la plage à surveiller s'agrandie il faudra modifier B5:B11 en B5:B17 (ici on rajoute 6 références), si la plage à surveillée est "découpée" en plusieurs parties, c'est tout aussi simple il faudra, les unes à la suite des autres, les définir, ce qui donnera Range("B5:B11,B14:B17,B20:B25")

Ici nous avons trois plage surveillées (pour la même chose évidemment) et si vous double cliquez en B13 il n'y aura aucune réaction au niveau du code. Pour l'affichage des lignes il en est (je crois) de même :

' ici on montre toutes les lignes de références
ActiveSheet.Range("5:11").EntireRow.Hidden = Hidden

deviendrait :

' ici on montre toutes les lignes de références
ActiveSheet.Range("5:11, 14:17,20:25").EntireRow.Hidden = Hidden

Tout comme pour le masquage :

' ici on cache toutes les lignes de références
ActiveSheet.Range("5:11, 14:17,20:25").EntireRow.Hidden = True
ActiveSheet.Cells(Target.Row, 2).EntireRow.Hidden = False

Mais là je n'ai pas pris le temps de tester...

vbMBHB

Bonjour,

C'est génial et ça fonctionne !

Merci pour votre aide précieuse et vos explications !

A bientôt !

Merci

vbMBHB

Rechercher des sujets similaires à "masquer colonnes utilisees"