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

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 !

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

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
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
 
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:
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+
 
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
 
- 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

Discussions similaires

Réponses
0
Affichages
538
Réponses
2
Affichages
493
Retour