XL 2013 (RESOLU) Masquer et/ou afficher des colonnes selon une valeur

chaelie2015

XLDnaute Accro
Bonjour Forum
Sur la feuille 'Feuille de formulaire', j'ai une cellule U11. Mon objectif est d'afficher ou de masquer certaines colonnes dans la feuille 'Type' en fonction du nombre contenu dans U11. Par exemple, si U11=2, je souhaite afficher les colonnes AO:AP et AQ:AR, masquant les autres. En revanche, si U11 est vide, je veux masquer toutes les colonnes (AO:EJ).
A+
 

Pièces jointes

  • Charlie masqué afficher colonne.xlsm
    30.1 KB · Affichages: 8
Solution
Il est préférable de plafonner U11 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Val([U11]) > 50 Then [U11] = 50
Columns("AO:EJ").Hidden = True
If Int(Val([U11])) > 0 Then Columns("AO").Resize(, 2 * Int(Val([U11]))).Hidden = False
End Sub

sousou

XLDnaute Barbatruc
Bonjour
Tu peux ajouter ca dans ton code change
If Target.Address = "$U$11" Then
Select Case Target
Case Is = 2
With Sheets("type")
.Columns("ao:ej").Hidden = True
.Columns("ao:ap").Hidden = False
.Columns("aq:ar").Hidden = False
End With

Case Is = ""
With Sheets("type")
.Columns("ao:ej").Hidden = True
End With

End Select

End If
 

laurent950

XLDnaute Barbatruc
Bonsoir @chaelie2015

VB:
Sub Worksheet_Change(ByVal Target As Range)
' si U11=2, je souhaite afficher les colonnes AO:AP (41:42) et AQ:AR( 43:44)
' si U11 est vide, je veux masquer toutes les colonnes (AO:EJ) (41:140)
  Application.ScreenUpdating = False
 
  Dim wsType As Worksheet
  Dim colRange As Range
  Dim num As Variant
 
  ' Vérifier si la modification concerne la cellule U11
    If Not Intersect(Target, Me.Range("U11")) Is Nothing Then
    Set wsType = ThisWorkbook.Sheets("Type") ' Feuille où vous souhaitez masquer/afficher les colonnes
    ' Afficher toutes les colonnes
        wsType.Columns.Hidden = False
        ' Récupérer la valeur de la cellule U11
            num = Me.Range("U11").Value
        ' Vérifier si la cellule est vide
            If IsEmpty(num) Then
                ' Masquer toutes les colonnes
                    wsType.Range("AO:EJ").EntireColumn.Hidden = True
            Else
                ' Afficher les colonnes en fonction de la valeur de U11
                    Select Case num
                        Case 2
                        ' Afficher les colonnes AO:AP et AQ:AR, masquer les autres
                            Set colRange = Union(wsType.Range("AO:AP"), wsType.Range("AQ:AR"))
                            wsType.Columns.Hidden = True
                            colRange.EntireColumn.Hidden = False
                        ' Ajoutez d'autres cas au besoin pour d'autres valeurs de U11
                        ' Case 3
                        '     ' Afficher d'autres colonnes...
                        ' Case Else
                        '     ' Gérer d'autres cas si nécessaire...
                    End Select
            End If
        End If
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir à tous,
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Columns("AO:EJ").Hidden = True
If Int(Val([U11])) > 0 Then Columns("AO").Resize(, 2 * Int(Val([U11]))).Hidden = False
End Sub
A+
 

job75

XLDnaute Barbatruc
Il est préférable de plafonner U11 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Val([U11]) > 50 Then [U11] = 50
Columns("AO:EJ").Hidden = True
If Int(Val([U11])) > 0 Then Columns("AO").Resize(, 2 * Int(Val([U11]))).Hidden = False
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 136
Membres
112 667
dernier inscrit
foyoman