Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Masquer des colonnes avec cellules vides

  • Initiateur de la discussion Initiateur de la discussion KLR80
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

K

KLR80

Guest
Bonjour,

Je travaille actuellement sur une grille des compétences et je rencontre 2 gros problèmes :

1) Quand je fais un tri par service je n'ai que la première ligne de compétences hors je souhaiterais les avoirs toutes (je pense que c'est parce que les cellules "service" sont fusionnées) mais alors comment faire ?

2) Une fois que j'aurais fais le tri par service, je souhaite voir apparaitre que les personnes ayant des compétences attribué à ce service, donc masquer toutes les colonnes avec les personnes n'ayant pas de compétences dans ce service.

Je ne sais pas si je suis très claire, n'hesitez pas à me demander plus d'explications.
J'espère que vous trouverez une solution à mon problème.
Je vous joint un "modèle" de mon fichier.

++
 

Pièces jointes

Re : Masquer des colonnes avec cellules vides

Bonjour et biienvenue

en effet les cellules fusionnées sont souvent incompatibles avec les manipulations sur tableau

tu peux défusionner
écrire le service sur toutes les lignes
n'en garder qu'un de visible en mettant les autres en blanc sur fonc blanc.

cela pourrait se faire automatiquement avec une mise en forme conditionnelle

donc le filtre par ligne devrait marcher. Pour le filtre par colonne, à part par macro je ne vois pas (mais je travaille plutôt à la mode XL 2003 donc je ne connais pas tous les "perfectionnements" 2007 voire 2010

connais-tu les MFC (mise en forme conditionnelle) et les macros ?
 
Re : Masquer des colonnes avec cellules vides

Merci pour votre réponse.

Alors pour répondre à votre question, les mises en forme conditionnelle je les utilise régulièrement par contre en ce qui concerne VBA, j'ai eu des bases il y a plus de 2 ans mais je ne saurais l'utilisé sans conseils.


Ok pour le filtre par ligne mais je ne voit pas quelle MFC utilsier pour ne garder qu'une fois le nom des services et metre en blanc/blanc les autres lignes.
 
Re : Masquer des colonnes avec cellules vides

Bonjour KLR80, salut ERIC S,

Voici une macro événementielle pour filtrer correctement les cellules fusionnées en colonne A.

Clic droit sur l'onglet de la feuille et Visualiser le code :

Code:
Private Sub Worksheet_Calculate()
Dim r As Range
Set r = Intersect([A:A].SpecialCells(xlCellTypeVisible), Me.UsedRange)
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error Resume Next
Me.ShowAllData
Me.UsedRange.EntireRow.Hidden = True
For Each r In r
  r.MergeArea.EntireRow.Hidden = False
Next
Application.EnableEvents = True
ActiveWindow.SmallScroll Up:=Rows.Count
End Sub
La macro se déclenche grâce à cette formule en A1, recalculée à chaque filtrage :

Code:
="SERVICE / ILOT"&T(SOUS.TOTAL(3;INDIRECT("B3:B65536")))
Je vais voir pour les autres questions.

A+
 

Pièces jointes

Dernière édition:
Re : Masquer des colonnes avec cellules vides

Merci !

J'ai réussi à refaire les instructions que vous m'avez donné et cela à l'air de marcher ! 😀

Je vous joint le fichier pour vérification.

Est-ce normal qu'il y ai un point d'exclamation comme ceci sur mon fichier :



??
 

Pièces jointes

Re : Masquer des colonnes avec cellules vides

Re,

Voici la macro complétée pour filtrer aussi les colonnes contenant "x" :

Code:
Private Sub Worksheet_Calculate()
Dim r As Range, affiche As Range
Set r = Intersect([A:A].SpecialCells(xlCellTypeVisible), Me.UsedRange)
Application.ScreenUpdating = False
Application.EnableEvents = False
On Error Resume Next
Me.ShowAllData
Set affiche = [A1]
For Each r In r
  Set affiche = Union(affiche, r.MergeArea)
Next
Me.UsedRange.EntireRow.Hidden = True 'masque toutes les lignes
affiche.EntireRow.Hidden = False 'affiche les lignes filtrées
Columns.Hidden = False 'affiche toutes les colonnes
If affiche.Count < Me.UsedRange.Rows.Count Then 'si filtrage effectif
  For Each r In [C:AM].Columns
    If Application.CountA(Intersect(r, affiche.EntireRow)) _
      = IIf(r.Column = 3, 2, 1) Then r.Hidden = True
  Next
End If
Application.EnableEvents = True
ActiveWindow.SmallScroll Up:=Rows.Count
End Sub
Nota : IIf(r.Column = 3, 2, 1) c'est à cause du titre en C1.

Fichier (2).

A+
 

Pièces jointes

Re : Masquer des colonnes avec cellules vides

Bonjour à tous

pour job 75 : je me régale à l'analyse de ta solution, mon vba est beaucoup plus basic.....

2 petits points pour pousser le bouchon :

1/ la macro se déclenche quel que soit le filtre activé, si on joue avec B, il y a des choses bizarres qui se passent (manip : filtre A choix C, puis filtre B choix 14, puis filtre A choix tous

2/ si on veut allonger le tableau, on est bridé par For Each r In [C:AM].Columns
comment utiliser soit mergearea en considérant que C1 est fusionné, et/ou aussi comment écrire avec la notion de dernière colonne écrite (équivalent de "cells(1, columns .count).end(xltoleft).column -1")

Merci d'avance

2/
 
Re : Masquer des colonnes avec cellules vides

Bonjour KLR80, salut Eric 🙂

Pour le 1er point soulevé par Eric j'avais vu le problème mais estimé que seul le filtrage sur la colonne A avait un intérêt.

Mais c'est un problème intéressant de filtrer aussi sur la colonne B (ou les autres).

J'ai donc ajouté ce code :

Code:
With AutoFilter
  If Intersect(.Range, [A:A]) Is Nothing Then _
    Set affiche = Union(r, [A1].MergeArea): GoTo 1
  For i = 2 To .Filters.Count
    If .Filters.Item(i).On Then _
      Set affiche = Union(r, [A1].MergeArea): GoTo 1
  Next
End With
Sur Excel 2003, si l'on a filtré sur les colonnes A puis B, il faut d'abord cliquer sur "Tous" du filtre B puis sur "Tous" du filtre A pour tout afficher.

Pour le 2ème point on peut en effet utiliser [C1].MergeArea.EntireColumn.Columns mais au cas où l'on défusionne C1 je préfère :

Code:
Range("C:C", Cells(2, Columns.Count).End(xlToLeft)).Columns
Fichier (4).

A+
 

Pièces jointes

Re : Masquer des colonnes avec cellules vides

Re

merci Job75, pour le point 2 j'avais quasi les mêmes conclusions en fouillant un peu dans les boyaux de ma tête. En fait, t'es pas si fort 🙄

Je vais me coucher moins bête ce soir!

Juste un point : le cod eest super plus lent sur 2007 que sur 2003 chez moi. As-tu la même chose ou est-ce sur mon PC un mystère n+1 lié à l'installation? (2003 & 2007 famille)
 
Re : Masquer des colonnes avec cellules vides

Re Eric,

En fait, t'es pas si fort 🙄

Eh oui que veux-tu j'ai tout appris par XLD, sur le tas 😛

Juste un point : le cod eest super plus lent sur 2007 que sur 2003 chez moi. As-tu la même chose ou est-ce sur mon PC un mystère n+1 lié à l'installation? (2003 & 2007 famille)

Sur mon portable (Win7/Excel 2010) ce n'est pas lent mais il y a un saut d'écran lors de sa mise à jour.

On sent bien que cette mise à jour est laborieuse.

C'est probablement dû au fait que sur Excel 2010 le filtrage est beaucoup plus complexe que sur Excel 2003.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
22
Affichages
703
Réponses
2
Affichages
618
Réponses
2
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…