Astuce: Les autres langues sont Google-Traduction. Vous pouvez visiter le English version de ce lien.
Se connecter
x
or
x
x
S'enregistrer
x

or

Comment masquer ou afficher les colonnes en fonction de la sélection de la liste déroulante dans Excel?

Lorsque vous utilisez Excel, vous pouvez masquer ou afficher des colonnes spécifiques en fonction de la sélection d'une liste déroulante. Par exemple, si vous sélectionnez Non dans la liste déroulante, la colonne C à I sera masquée, mais si vous sélectionnez Oui, les colonnes masquées C à I seront non masquées. Voir la capture d'écran ci-dessous.

Dans cet article, nous allons vous montrer une méthode VBA pour masquer ou afficher les colonnes en fonction de la sélection de la liste déroulante dans Excel.

Masquer ou afficher les colonnes en fonction de la sélection de la liste déroulante dans Excel


Un clic pour basculer toutes les colonnes masquées pour qu'elles soient visibles ou invisibles dans Excel

Avec Kutools for Excel's Basculer la visibilité des colonnes masquées Utilitaire, vous pouvez facilement basculer toutes les colonnes masquées pour qu'elles soient visibles ou invisibles dans Excel.

Kutools for Excel comprend plus de 300 outils maniables Excel. Gratuit pour essayer sans limitation dans les jours 60. Téléchargez l'essai gratuit maintenant


Masquer ou afficher les colonnes en fonction de la sélection de la liste déroulante dans Excel


Comme indiqué ci-dessus, pour masquer ou afficher les colonnes C à I en fonction de la sélection de la liste déroulante, procédez comme suit.

1. Tout d'abord, créez votre liste déroulante avec Oui et Non dont vous avez besoin.

2. Puis appuyez autre + F11 ouvrir le Microsoft Visual Basic pour l'application fenêtre.

3. Double-cliquez sur le nom de la feuille ouverte en cours dans le VBAProject section pour ouvrir l'éditeur de code.

4. Ensuite, copiez et collez ci-dessous le code VBA dans l'éditeur de code.

Code VBA: masquer ou afficher les colonnes en fonction de la sélection de la liste déroulante

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20180822
    If Target.Column = 2 And Target.Row = 3 Then
        If Target.Value = "No" Then
            Application.Columns("C:I").Select
            Application.Selection.EntireColumn.Hidden = True
        ElseIf Target.Value = "Yes" Then
            Application.Columns("C:I").Select
            Application.Selection.EntireColumn.Hidden = False
        End If
    End If
End Sub

Note: Dans le code ci-dessus, Column = 2 et Row = 3 est la référence de cellule de la liste déroulante, et la plage C: I est les colonnes que vous voulez masquer ou afficher, .please les changer à votre besoin.

5. presse autre + Q touches simultanément pour quitter le Microsoft Visual Basic pour l'application fenêtre.

Dorénavant, lorsque vous sélectionnez Non dans la liste déroulante, toutes les colonnes spécifiées sont masquées.

Mais si vous sélectionnez Oui dans la liste déroulante, toutes les colonnes masquées sont affichées immédiatement.


Articles Liés:



Outils de productivité recommandés

Office Tab

étoile d'or1 Apportez des onglets pratiques à Excel et à d'autres logiciels Office, tout comme Chrome, Firefox et Internet Explorer.

Kutools for Excel

étoile d'or1 Incroyable! Augmentez votre productivité dans les minutes 5. Ne nécessite pas de compétences particulières, économisez deux heures par jour!

étoile d'or1 300 Nouvelles fonctionnalités pour Excel, rendent Excel facile et puissant:

  • Fusionner des cellules / lignes / colonnes sans perdre de données.
  • Combiner et consolider plusieurs feuilles et classeurs.
  • Comparez les gammes, copiez plusieurs gammes, convertissez le texte en date, l'unité et la conversion de devise.
  • Compter par couleurs, sous-totaux de recherche, tri avancé et super filtre,
  • Plus Sélectionner / Insérer / Supprimer / Texte / Format / Lier / Commenter / Classeurs / Feuilles de calcul Outils ...

Capture d'écran de Kutools pour Excel

Say something here...
symbols left.
You are guest ( Sign Up? )
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Ed · 3 months ago
    I'm getting an error at xHRow = (14:24")

    I'm attempting to hide or show multiple rows depending on my C4 selection. Can you assist with what i have wrong?

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xRG As Range
    Dim xHRow As Range
    Set xRG = Range("C4")
    xHRow = ("14:24")
    If Not Intersect(Target, xRG) Is Nothing Then
    If Target.Value = "Pulled" Then
    Application.Rows(xHRow).Select
    Application.Selection.EntireRow.Hidden = True
    ElseIf Target.Value = "Replaced" Then
    Application.Rows(xHRow).Select
    Application.Selection.EntireRow.Hidden = False
    End If
    End If
    End Sub
    • To post as a guest, your comment is unpublished.
      Ed · 3 months ago
      The error is: Run-time error '91':
      Object variable or with block variable not set
  • To post as a guest, your comment is unpublished.
    Aldo Molina-Moore · 3 months ago
    Each column is a different student ( 2 in this example A and B). I have two dropdowns ( on A1 and B1). Each has "Passed" "Failed" and "Select One" as an option. Now, I managed to make it work when selecting only one dropdown (either A1 or B1). I want to be able to unhide the fields that were hidden by A1 whenever I select something on B1. The goal is to select an option on A1 and fill the rows that are left. Then select B1 and fill whichever rows are left ( Regardless of A1 selection.

    Thank you!

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Range("A1:B2")) Is Nothing Or Target.Cells.Count > 1 Then
    Exit Sub

    ElseIf Range("A1").Value = "Select One" Then
    Rows("2:15").EntireRow.Hidden = False

    ElseIf Range("A1").Value = "Passed" Then
    Rows("7").EntireRow.Hidden = False
    Rows("8:15").EntireRow.Hidden = True

    ElseIf Range("A1").Value = "Failed" Then
    Rows("7").EntireRow.Hidden = True
    Rows("8:15").EntireRow.Hidden = False

    ElseIf Range("B1").Value = "Select One" Then
    Rows("2:15").EntireRow.Hidden = False

    ElseIf Range("B1").Value = "Passed" Then
    Rows("7").EntireRow.Hidden = False
    Rows("8:15").EntireRow.Hidden = True

    ElseIf Range("B1").Value = "Failed" Then
    Rows("7").EntireRow.Hidden = True
    Rows("8:15").EntireRow.Hidden = False

    End If

    End Sub
    • To post as a guest, your comment is unpublished.
      crystal · 2 months ago
      Good Day,
      Sorry can't help you with that. Thank you for your comment.
  • To post as a guest, your comment is unpublished.
    Grant · 4 months ago
    Thank you. I used the code and it works great, but when I type into a cell below and press enter it will automatically moves the cursor back to the target box. Is there a way to work around this?
    • To post as a guest, your comment is unpublished.
      crystal · 2 months ago
      Hi Grant,
      I tried as you mentioned, but didn't find the same problem. Can you tell me your Excel verson? Thanks for commenting.
  • To post as a guest, your comment is unpublished.
    ExcelUser · 6 months ago
    The code given to hide/ unhide columns based on value selected from the drop-down list of another column works great. Thanks. But it only works for the one row.
    How to apply this for the rest of the selected number of rows in the spreadsheet. I understand we may have to define a variable for the row number and in a loop increment that. But I do not know the syntax for it. Could someone help with that please?
    • To post as a guest, your comment is unpublished.
      crystal · 5 months ago
      Hi,
      Please try the below VBA code. Hope it can help.
      Please change the range as you need.

      Private Sub Worksheet_Change(ByVal Target As Range)
      Dim xRG As Range
      Set xRG = Range("B3:B30")
      If Not Intersect(Target, xRG) Is Nothing Then
      If Target.Value = "No" Then
      Application.Columns("C:I").Select
      Application.Selection.EntireColumn.Hidden = True
      ElseIf Target.Value = "Yes" Then
      Application.Columns("C:I").Select
      Application.Selection.EntireColumn.Hidden = False
      End If
      End If
      End Sub
  • To post as a guest, your comment is unpublished.
    Guinther · 6 months ago
    My dropdown menu is on cell B23. If yes, show and if no, then hide row 29. This is the code I am using:

    Private Sub Worksheet_Change(ByVal Target As Range)
    'Updated by Extendoffice 20180822
    If Target.Column = 2 And Target.Row = 23 Then
    If Target.Value = "no" Then
    Application.Row(29).Select
    Application.Selection.EntireRow.Hidden = True
    ElseIf Target.Value = "yes" Then
    Application.Row(29).Select
    Application.Selection.EntireRow.Hidden = False
    End If
    End If
    End Sub

    But I end up with a run-time error 438 - Object doesn't support this property or method. Why? Is it something wrong in the code above?

    Thanks in advance for the help.
    • To post as a guest, your comment is unpublished.
      crystal · 5 months ago
      Hi Guinther,
      The below VBA code can help you solve the problem. Please have a try. Thank you for your comment.

      Private Sub Worksheet_Change(ByVal Target As Range)
      Dim xRG As Range
      Dim xHRow As Integer
      Set xRG = Range("B23")
      xHRow = 29
      If Not Intersect(Target, xRG) Is Nothing Then
      If Target.Value = "No" Then
      Application.Rows(xHRow).Select
      Application.Selection.EntireRow.Hidden = True
      ElseIf Target.Value = "Yes" Then
      Application.Rows(xHRow).Select
      Application.Selection.EntireRow.Hidden = False
      End If
      End If
      End Sub
      • To post as a guest, your comment is unpublished.
        Gab · 4 months ago
        Hi Crystal,


        I'm hoping you could help me with hiding/showing multiple rows. I would like to show rows 63-73 when YES is selected in cell D51. I'm using the following -


        Private Sub Worksheet_Change(ByVal Target As Range)
        Dim xRG As Range
        Dim xHRow As Integer
        Set xRG = Range("D51")
        xHRow = ("63:73")
        If Not Intersect(Target, xRG) Is Nothing Then
        If Target.Value = "No" Then
        Application.Rows(xHRow).Select
        Application.Selection.EntireRow.Hidden = True
        ElseIf Target.Value = "Yes" Then
        Application.Rows(xHRow).Select
        Application.Selection.EntireRow.Hidden = False
        End If
        End If
        End Sub



        Thank you!
        • To post as a guest, your comment is unpublished.
          crystal · 2 months ago
          Hi Gab,
          Please apply the below VBA code. Thank you for your comment.

          Private Sub Worksheet_Change(ByVal Target As Range)
          Dim xRG As Range
          Dim xHRow As String
          Set xRG = Range("D51")
          xHRow = "63:73"
          If Not Intersect(Target, xRG) Is Nothing Then
          If Target.Value = "No" Then
          Application.Rows(xHRow).Select
          Application.Selection.EntireRow.Hidden = True
          ElseIf Target.Value = "Yes" Then
          Application.Rows(xHRow).Select
          Application.Selection.EntireRow.Hidden = False
          End If
          End If
          End Sub