Masquer des colonnes en fonction d'un critere

Bonjour a tous,

Je commence seulement mon apprentissage VBA et bloque -a chacun son niveau - sur une situation qui me semble surmontable . J'espere donc que vous pourrez m'aider!

J'ai construit un tableau comparatif pour differents navires. Les caractéristiques (catégorie, age, chantier naval, prix, dimensions...) sont listés par ligne dans la premiere colonne et chaque colonne qui suit représente un bateau.

Sachant que je compare une cinquantaine de navires, j’aimerais pourvoir les trier par catégorie (ex. Plaisance, peche ou commercial). Pour cela, j’ai crée un menu deroulant qui me permet de selectioner l'une de ces catégories et j’aimerais que les colonnes des bateaux n’appartenant pas a cette categorie se masquent automatiquement pour n’avoir plus qu’a l’ecran les navires qui m’interessent.

Quelqu’un aurait il une piste pour le code de la macro?

Merci d'avance aux experts

Cheeerio

Bonjour,

Pour permettre aux intervenants de t'aider

A+

Bonsoir.

Une recherche pour voir si le sujet a déjà été traité :

https://forum.excel-pratique.com/excel/masquer-colonne-selon-critere-t75414.html

Bonne soirée

Je recommence, bonjour et bienvenu sur ce forum.

Ne serais t'il pas plus simple de transposer les colonnes en lignes et leurs appliquer un filtre.

Bonne soirée


Une proposition succincte.

@+

45test-liste.zip (19.66 Ko)

Bonjour Bruno et merci pour votre reponse.

Je vais regarder le poste que vous mavez conseille et voir si je peux adapter le code.

Concernant votre idee, sachant que j'ai 47 specificites (sur 47 lignes), il semble complique -dans une optique de mise en page et de lecture effective des donnees- d'inverser lignes et colonnes.

Je vous tiendrai evidement au courant de l'avancee,

Bonne journee!

Bonjour tout le monde ,

un code qui pourrai vous aidez (j'espère)

à adapter pour votre cas (vu qu'on a pas de fichier )

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
  If Not Application.Intersect(Target, Range("A1")) Is Nothing Then 'A1 est la cellule qui contient la liste déroulante
   cells.hidden = false
    For i = 2 To Range("IV1").End(xlToLeft).Column
      If Cells(2, i).Value <> Target.Value Then ' la critère caracteristique se trouve sur la ligne 2
        colums(i).Hidden = True
     end if 
    Next i
  End If
End Sub

Morning Minanse,

Merci pour le code!

je venais de tester une variante juste avant qui semble marcher:

Sub Hide()

For i = 5 To 28 Step 1

If Cells(9, i) <> Cells(3, 7) Then

Columns(i).Hidden = True

End If

Next

End Sub

L'avantage de mon code c'est qu'elle est automatique pas besoin de lancer le code vba à chaque fois

effectivement, nice!

Y aurait il un moyen de masquer les colonne mais seulement a partir de la ligne 10 par exemple (je sais qu'en y reflechissant cela semble improbable). Peut etre en figeant les 10 premieres lignes?

je ne l'ai pas encore tester mais je vous propose ceci :

remplace

columns(i)

par

Dim col As Integer
Dim lastligne As Integer
col = Split(Columns(i).Address(ColumnAbsolute:=False), ":")(1)
lastligne = Range(col & Rows.Count).End(xlUp).Row
Range(Cells(10, i), Cells(lastligne, i)).Hidden = True

edit : je viens de le tester et cela ne fonctionne pas ^^


même avec les volet figé , elle masque quand même la colonne :/


une autre approche peut résoudre ce problème c'est de reporté les colonne filtré (intéressant) sur une autre feuille ?

hehe effectivement ca ne marche pas ni Avec ton code ni en figeant les colonnes (merci anyway!!)

j'ai trouve une solution plus facile, a savoir changer la mise en page de ma feuille (les info sur les 10 premieres lignes sont decalees sur les colonnes ou le filtre ne s'applique pas)

Je suis cependant face a une nouveau probleme de debutant. J'aimerais trier selon plusieurs criteres et pensais utiliser le meme code en rajoutant AND (critere) a ma fonction IF

Sub Hide()

For i = 5 To 28 Step 1

If Cells(18, i) <> Cells(6, 4) AND cell(19,i) <> Cells(7,4) Then

Columns(i).Hidden = True

End If

Next

End Sub

Cependant ce code ne masque que les colonnes qui n'ont ni l'un ni l'autre et non celles qui ne comportent pas les deux a la fois.

Une solution serait de coder avec columns(j)?

Ce qui marche

sauf erreur de ma part mais

ruhlito a écrit :

les colonnes qui n'ont ni l'un ni l'autre et non celles qui ne comportent pas les deux a la fois.

sa veut dire la même chose non ?

hum.. effectivement

ce que je voulais dire c'est que seules les colonnes n'ayant aucun de ces deux criteres (si un sur les 2 alors pas masquees) sont masquees alors que voudraient celles qui n'ont pas les deux a la fois

Anyway, je m'en suis sorti

du coup problème résolu ?

yop, gracias!

Rechercher des sujets similaires à "masquer colonnes fonction critere"