Masquer des colonnes ne correspondant pas à un critère variable

amadeus23

XLDnaute Nouveau
Bonjour,

Un petit pb m'obsède dps qques jours :

J'aimerais, sur le fichier joint, pouvoir masquer les colonnes correspondantes à une valeur que l'utilisateur taperait dans une cellule définie.
Par exemple, si l'utilisateur tape : 3, alors les colonnes correspondantes à 1- 2-3 seraient affichées.

A terme, j'aimerais également pouvoir faire cela sur les lignes.
En gros, que l'utilisateur puisse personnaliser son tableau en rentrant le nombre de colonnes et de lignes qu'il souhaite.

Est-ce la bonne façon de faire ? Quelle macro pourrait faire ce travail ?

Merci pour votre aide
 

Pièces jointes

  • perso critères.xls
    14 KB · Affichages: 81
  • perso critères.xls
    14 KB · Affichages: 86
  • perso critères.xls
    14 KB · Affichages: 84

job75

XLDnaute Barbatruc
Re : Masquer des colonnes ne correspondant pas à un critère variable

Bonjour amadeus23, bienvenue sur XLD,

Pas compliqué ce problème, il faut bien sûr une macro VBA.

Il y a de nombreux exemples d'affichage/masquage de lignes/colonnes sur le forum.

Je regarde ça.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Masquer des colonnes ne correspondant pas à un critère variable

Re,

Fichier ci-joint. Pour que les cellules pilotes soient toujours visibles, je les ai mises en C3 et C4.

La macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [C3:C4]) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next
Cells.EntireColumn.Hidden = False
If [C3] >= 1 Then Range(Columns([C3] + 3), Columns(Columns.Count)).Hidden = True
Cells.EntireRow.Hidden = False
If [C4] >= 1 Then Range(Rows([C4] + 10), Rows(Rows.Count)).Hidden = True
End Sub
A+
 

Pièces jointes

  • perso critères.xls
    24.5 KB · Affichages: 132
  • perso critères.xls
    24.5 KB · Affichages: 138
  • perso critères.xls
    24.5 KB · Affichages: 137
Dernière édition:

amadeus23

XLDnaute Nouveau
Re : Masquer des colonnes ne correspondant pas à un critère variable

Super!
C'est exactement ce système auquel je pensais!

Juste une petite précision car mes connaissance en VBA sont quasi nulles: que dois-je modifier dans le code pour que cela concerne plus de colonnes ? plus de lignes ?

Encore merci :)
 

job75

XLDnaute Barbatruc
Re : Masquer des colonnes ne correspondant pas à un critère variable

Re,

Attention, à 17h23 j'ai modifié la macro (les 2ème et 3ème tests If) et le fichier.

que dois-je modifier dans le code pour que cela concerne plus de colonnes ? plus de lignes ?

Je ne comprens pas... Toutes les lignes/colonnes de la feuille sont concernées, vous mettez ce que vous voulez en C3 et C4.

Quand on efface C3 ou C4, toutes les lignes/colonnes s'affichent.

A+
 

amadeus23

XLDnaute Nouveau
Re : Masquer des colonnes ne correspondant pas à un critère variable

oui pardon...

Dernière chose : est-il possible grâce à ce code, de masquer seulement qques lignes ? En gros, que l'on selectionne le nombre de lignes à afficher, mais que, imaginons, la dernière ligne du tableau (un total par exemple) reste visible même en ayant masquer les lignes au dessus ?

Voir fichier joint pour de meilleures explications
 

Pièces jointes

  • perso critères.xls
    24 KB · Affichages: 83
  • perso critères.xls
    24 KB · Affichages: 77
  • perso critères.xls
    24 KB · Affichages: 73

job75

XLDnaute Barbatruc
Re : Masquer des colonnes ne correspondant pas à un critère variable

Re,

Dernière chose comme vous dites... Vous avez des demandes à rallonge, et là c'est nettement plus compliqué :rolleyes:

Je regarde ça, mais vous aurez le résultat tard ce soir car j'ai d'autres choses à faire :)

A+
 

job75

XLDnaute Barbatruc
Re : Masquer des colonnes ne correspondant pas à un critère variable

Re,

Pour résoudre ce nouveau problème, je me suis servi des cellules fusionnées - il faut qu'elles le soient - que j'ai nommées (menu Insertion-Nom-Définir) A et B.

La macro modifiée :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [C3:C5]) Is Nothing Then Exit Sub
[COLOR="Red"]Dim ligA, ligB[/COLOR]
Application.ScreenUpdating = False
On Error Resume Next
Cells.EntireColumn.Hidden = False
If [C3] >= 1 Then Range(Columns([C3] + 3), Columns(Columns.Count)).Hidden = True
Cells.EntireRow.Hidden = False
[COLOR="Red"]ligA = Application.Match([C4], [B:B]) + 1
Intersect(Range(Rows(ligA), Rows(Rows.Count)), [A].MergeArea).EntireRow.Hidden = True
ligB = Application.Match([C5], [B:B]) + 1
Intersect(Range(Rows(ligB), Rows(Rows.Count)), [B].MergeArea).EntireRow.Hidden = True[/COLOR]
End Sub

Fichier joint.

Edit : on peut ajouter des lignes dans chacun des 2 tableaux, pas de problème, mais il faut à chaque fois refaire la numérotation en colonne B, c'est indispensable.

A+
 

Pièces jointes

  • perso critères (1).xls
    27 KB · Affichages: 72
Dernière édition:

job75

XLDnaute Barbatruc
Re : Masquer des colonnes ne correspondant pas à un critère variable

Bonsoir,

La version (1) précédente supposait qu'on entre en C5 le numéro du critère B qu'on voulait afficher (8, 9, 10..).

Avec cette version (2), c'est bien le nombre de critères B (1, 2, 3...) qu'on entre en C5. J'utilise pour cela la variable nB :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [C3:C5]) Is Nothing Then Exit Sub
Dim ligA, ligB, [COLOR="Red"]nB[/COLOR]
Application.ScreenUpdating = False
On Error Resume Next
Cells.EntireColumn.Hidden = False
If [C3] >= 1 Then Range(Columns([C3] + 3), Columns(Columns.Count)).Hidden = True
Cells.EntireRow.Hidden = False
ligA = Application.Match([C4], [B:B]) + 1
Intersect(Range(Rows(ligA), Rows(Rows.Count)), [A].MergeArea).EntireRow.Hidden = True
[COLOR="Red"]nB = [C5] + [A].MergeArea.Count[/COLOR]
ligB = Application.Match([COLOR="Red"]nB[/COLOR], [B:B]) + 1
Intersect(Range(Rows(ligB), Rows(Rows.Count)), [B].MergeArea).EntireRow.Hidden = True
End Sub

A+
 

Pièces jointes

  • perso critères (2).xls
    28.5 KB · Affichages: 78
Dernière édition:

job75

XLDnaute Barbatruc
Re : Masquer des colonnes ne correspondant pas à un critère variable

Rebonsoir,

Voici une version (3) qui permet de se passer complétement des nombres de la colonne B.

De plus, il est très facile d'ajouter de nouveaux critères C, D, E... et de modifier la macro :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [C3:C5]) Is Nothing Then Exit Sub
[COLOR="Blue"]Dim dercol%[/COLOR]
Application.ScreenUpdating = False
On Error Resume Next
Cells.EntireColumn.Hidden = False
[COLOR="Blue"]dercol = [C8].End(xlToRight).Column
If [C3] >= 1 And dercol >= [C3] + 3 And dercol < 256 Then _
Range(Columns([C3] + 3), Columns(dercol)).EntireColumn.Hidden = True[/COLOR]
Cells.EntireRow.Hidden = False
[COLOR="Red"]Call Masque([A], [C4])
Call Masque([B], [C5])[/COLOR]
End Sub

Sub Masque(F As Range, cel As Range)
Dim deb, fin
deb = F.Row + Int(Abs(cel.Text))
fin = F.Row + F.MergeArea.Count - 1
Rows(deb & ":" & IIf(deb <= fin, fin, 0)).Hidden = True
End Sub

Demain je pars pour un long week-end.

Edit : modifié aussi le masquage des colonnes (en bleu)

Bonne nuit.
 

Pièces jointes

  • perso critères (3).xls
    32 KB · Affichages: 82
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 836
Messages
2 092 651
Membres
105 479
dernier inscrit
chaussadas.renaud