Cacher des lignes sous conditions

Résolu
Bonjour,

Et merci d'avance pour votre aide.

J'aimerais avoir des lignes cacher sous certaines conditions tel que si ma cellule B19 est vide alors elle est masquée mais si c'est rempli alors elle est visible
De même pour mes lignes de 19 à 46 avec toujours mes cellules B"" qui sont la condition.

J'aimerais également que le code se fasse automatiquement a chaque fois que je clique sur l'onglet de ma feuille car les données sont saisies ailleurs.

Merci pour votre aide

3 réponses

Résumé de la discussion

Masquage automatique de lignes dans Excel selon les valeurs de la colonne B, notamment B19 et B19:B46, est discuté via des scripts VBA déclenchés à l'activation de la feuille. Plusieurs réponses proposent des scripts VBA déclenchés lors de l'activation de la feuille, utilisant notamment l'événement Worksheet_Activate et des méthodes comme SpecialCells(xlCellTypeBlanks) pour masquer les lignes concernées. Des variantes existent, incluant une boucle For x=19 To 46 qui teste chaque ligne de la colonne B et ajuste l'affichage, ou des versions ciblant des plages spécifiques comme 8:14 et 16:22. En complément, plusieurs interventions signalent l'importance d adapter le déclencheur à la feuille concernée et d'éviter les doublons de procédures, afin de préserver la lisibilité et la maintenance du code.

Bobot (l’IA à votre service)
  1. Bonjour,

    code a mettre dans la fenetre VBA de la feuille:

    Private Sub Worksheet_Activate()
        Dim x As Byte
        
        For x = 19 To 46
            If Cells(x, 2) = "" Then
                Rows(x).EntireRow.Hidden = True     'masque
            Else
                Rows(x).EntireRow.Hidden = False    'affiche
            End If
        Next x
    End Sub
    
    1
    1. Bonjour, ça ne marche pas, ça ne fait rien du tout, peut être parce que mes cellules B19, B20 etc contiennent des formules ?
      0
    2. @celine31190Re,

      j'ai fait ce code sur des cellules avec formules, montrez une des formules
      0
    3. ='Ma feuille de calcul'!E7
      0
    4. Pour la cellule B19
      0
    5. @celine31190Re

      essayez comme ceci:

      =SI('Ma feuille de calcul'!E7<>"";'Ma feuille de calcul'!E7;"")
      0
  2. Contributeur
    Bonjour

    Macro à copier coller dans le module feuille concernée
    se déclenche lorsqu'on active la feuille

    Option Explicit
    '---------------------------
    Private Sub Worksheet_Activate()
    On Error Resume Next
    Range("B19:B46").EntireRow.Hidden = False
    Range("B19:B46").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
    End Sub

    1
    1. Merci celle là c'est dejà fait :) mais c'est gentil quand même
      0
    2. J'ai besoin de ça maintenant :
      Quand G6 est vide ou =0, les lignes de 8 à 14 sont cachées
      Quand G17 est vide ou =0, les lignes de 16 à 22 sont cachées
      Quand G25 est vide ou =0, les lignes de 24 à 30 sont cachées
      Quand G33 est vide ou =0, les lignes 32 à 38 sont cachées.

      Sachant que le code de ma feuille est ça :

      Private Sub Worksheet_Activate()
      Dim x As Byte
      For x = 43 To 162
      If Cells(x, 2) = "" Or Cells(x, 2) = 0 Then
      Rows(x).EntireRow.Hidden = True 'masque
      Else
      Rows(x).EntireRow.Hidden = False 'affiche
      End If
      Next x
      End Sub


      Merci d'avance
      0
    3. @celine31190Re,

      Private Sub Worksheet_Activate()
          Dim x As Byte
          
          'Quand G6 est vide ou =0, les lignes de 8 à 14 sont cachées
          If Cells(6, 7) = "" Or Cells(6, 7) = 0 Then
              Rows(6).EntireRow.Hidden = True     'masque
          Else
              Rows(6).EntireRow.Hidden = False    'affiche
          End If
          'Quand G17 est vide ou =0, les lignes de 16 à 22 sont cachées
          If Cells(17, 7) = "" Or Cells(17, 7) = 0 Then
              Rows(17).EntireRow.Hidden = True     'masque
          Else
              Rows(17).EntireRow.Hidden = False    'affiche
          End If
          'Quand G25 est vide ou =0, les lignes de 24 à 30 sont cachées
          If Cells(25, 7) = "" Or Cells(25, 7) = 0 Then
              Rows(25).EntireRow.Hidden = True     'masque
          Else
              Rows(25).EntireRow.Hidden = False    'affiche
          End If
          'Quand G33 est vide ou =0, les lignes 32 à 38 sont cachées.
          If Cells(33, 7) = "" Or Cells(33, 7) = 0 Then
              Rows(33).EntireRow.Hidden = True     'masque
          Else
              Rows(33).EntireRow.Hidden = False    'affiche
          End If
          'B43 a B162
          For x = 43 To 162
              If Cells(x, 2) = "" Or Cells(x, 2) = 0 Then
                  Rows(x).EntireRow.Hidden = True     'masque
              Else
                  Rows(x).EntireRow.Hidden = False    'affiche
              End If
          Next x
      End Sub
      0
    4. Bonjour michel_m
      Range("B19:B46").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True


      Marche pas avec des cellules avec formule!!!
      0
    5. Contributeur
      @celine31190Désolé je n'avais pas vu les précédents dialogues
      0
  3. Bonjour,

    Devais etre un dans le gaz hier soir, code corrige:

    Private Sub Worksheet_Activate()
        Dim x As Byte
        
        'Quand G6 est vide ou =0, les lignes de 8 à 14 sont cachées
        If Cells(6, 7) = "" Or Cells(6, 7) = 0 Then
            Rows("8:14").EntireRow.Hidden = True     'masque
        Else
            Rows("8:14").EntireRow.Hidden = False    'affiche
        End If
        'Quand G17 est vide ou =0, les lignes de 16 à 22 sont cachées
        If Cells(17, 7) = "" Or Cells(17, 7) = 0 Then
            Rows("16:22").EntireRow.Hidden = True     'masque
        Else
            Rows("16:22").EntireRow.Hidden = False    'affiche
        End If
        'Quand G25 est vide ou =0, les lignes de 24 à 30 sont cachées
        If Cells(25, 7) = "" Or Cells(25, 7) = 0 Then
            Rows("24:30").EntireRow.Hidden = True     'masque
        Else
            Rows("24:30").EntireRow.Hidden = False    'affiche
        End If
        'Quand G33 est vide ou =0, les lignes 32 à 38 sont cachées.
        If Cells(33, 7) = "" Or Cells(33, 7) = 0 Then
            Rows("32:38").EntireRow.Hidden = True     'masque
        Else
            Rows("32:38").EntireRow.Hidden = False    'affiche
        End If
        'B43 a B162
        For x = 43 To 162
            If Cells(x, 2) = "" Or Cells(x, 2) = 0 Then
                Rows(x).EntireRow.Hidden = True     'masque
            Else
                Rows(x).EntireRow.Hidden = False    'affiche
            End If
        Next x
    End Sub
    
    0
    1. Bonjour, F894009, j'ai essayé le code et ça me marque : Erreur compilation
      Nom ambiguë : Worksheet_Activate
      0
    2. @celine31190Re,

      Vous avez peut-etre deux fois la meme procedure ou ligne
      Private Sub Worksheet_Activate()
      0
    3. Oui c'était bien ça, j'avais oublier de supprimer l'ancienne procédure, du coup ça marche, merci beaucoup pour votre aide
      0
    4. @celine31190Re,

      Ok, ca roule. Bonne continuation
      0