Microsoft 365 Masque plusieurs colonne selon critère dans liste déroulante

pulelian

XLDnaute Nouveau
Bonjour à tous,

Je souhaiterai créer des vues afin de pouvoir mieux saisir des données sur des tableaux qui peuvent ne plus en finir en termes de colonnes. J'aimerai ainsi que certaines colonnes soient masquées en fonction de critère défini dans une autre feuille, DATA.

Et cela pour tout mes onglets de calcul, je souhaiterai pouvoir masquer plus finement.

J'ai un début de code, mais n'arrive pas a trouver comment procéder (voir commentaire) :

VB:
Sub a()

Dim shdat, shNo, shEm As Worksheet
Dim NomColNo, NomColEm As Range

NomColNo = shdat.Range("Q2:Q150")

For Each cell In NomColNo
If cell.Offset(0, 1) = "Finance" Then
'trouve et masque dans l'onglet NO, les colonnes comportant des valeurs différentes de "Finance" dans DATA

End If
Next cell

End Sub

J'ai posté également le fichier si besoin. Si quelqu'un peut me donner une piste, ce serait top ^^

Bon week-end et bonne rentrée,
 

Pièces jointes

  • anonyme.xlsm
    448 KB · Affichages: 9

Dranreb

XLDnaute Barbatruc
Bonjour.
Comme ça si j'ai bien compris :
VB:
Sub a()
   Dim T(), L As Long, LOtNO As ListObject, LOtEM As ListObject, NomCol As String
   T = Feuil2.[Q1].CurrentRegion.Value
   Set LOtNO = Feuil7.ListObjects(1)
   Set LOtEM = Feuil5.ListObjects(1)
   On Error Resume Next
   For L = 2 To UBound(T, 1)
      NomCol = T(L, 1)
      If NomCol <> "" Then
         Err.Clear
         LOtNO.ListColumns(NomCol).Range.EntireColumn.Hidden = T(L, 2) <> "Finance"
         If Err Then MsgBox "Colonne """ & NomCol & """ introuvable dans " & LOtNO.Name, _
            vbExclamation, "a"
         End If
      NomCol = T(L, 3)
      If NomCol <> "" Then
         Err.Clear
         LOtNO.ListColumns(NomCol).Range.EntireColumn.Hidden = T(L, 4) <> "Finance"
         If Err Then MsgBox "Colonne """ & NomCol & """ introuvable dans " & LOtNO.Name, _
            vbExclamation, "a"
         End If
      Next L
   End Sub
 

job75

XLDnaute Barbatruc
Bonjour pulelian, Bernard,

Voyez le fichier joint et cette macro dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim col As Range, c As Range, v As Variant
Set col = Sheets("DATA").[Q1,S1].Find(Sh.Name, , xlValues, xlWhole) 'plage Q1,S1 à adapter
If col Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Sh.Columns.Hidden = False 'affiche tout
For Each c In Sh.[A1].CurrentRegion.Rows(1).Cells
    v = Application.VLookup(c, col.EntireColumn.Resize(, 2), 2, 0) 'RECHERCHEV
    If LCase(CStr(v)) <> "finance" Then c.EntireColumn.Hidden = True 'masque
Next
Application.Goto Sh.[A1], True 'cadrage
End Sub
Elle se déclenche quand on active une feuille.

A+
 

Pièces jointes

  • anonyme(1).xlsm
    448.5 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
298 030
Messages
1 965 289
Membres
200 896
dernier inscrit
vassaf