Affichage des cellules macro

Bonjour,

Je viens vers vous car j’aimerais ajuster la macro qui permet l'affichage des ligne en fonction de certaine valeur, le problème c'est qu'il se perd et décale l'affichage des cellules.


Private Sub Worksheet_Change(ByVal T As Range)
'Cette partie permet l'affichage du tableau des arrêts en fonction de la liste déroulante
Application.ScreenUpdating = False
If T.Address = "$B$37" Then
Select Case T.Value
Case Is = "AB"
Rows("39:71").Hidden = False
Rows("72:138").Hidden = True
Case Is = "CD"
Rows("39:71").Hidden = True
Rows("72:104").Hidden = False
Rows("105:138").Hidden = True
Case Is = "EF"
Rows("39:104").Hidden = True
Rows("105:138").Hidden = False
End Select
End If
'Cette partie permet l'affichage des lignes si cellule supérieur à 0 AB
Rows("41:44").Hidden = [E25].Value <= 0
Rows("63:70").Hidden = [E25].Value <= 0
Rows("45:50").Hidden = [E26].Value <= 0
Rows("27").Hidden = [E26].Value <= 0
Rows("51:56").Hidden = [E27].Value <= 0
Rows("28").Hidden = [E27].Value <= 0
Rows("57:62").Hidden = [E28].Value <= 0
'Cette partie permet l'affichage des lignes si cellule supérieur à 0 CD
Rows("74:77").Hidden = [E29].Value <= 0
Rows("96:103").Hidden = [E29].Value <= 0
Rows("78:83").Hidden = [E30].Value <= 0
Rows("31").Hidden = [E30].Value <= 0
Rows("84:89").Hidden = [E31].Value <= 0
Rows("32").Hidden = [E31].Value <= 0
Rows("90:95").Hidden = [E32].Value <= 0
End Sub


Merci d'avance

Bien cordialement

12 réponses

  1. Bonjour,

    Ajoute Rows.Hidden = False en début de traitement
    If T.Address = "$B$37" Then
    Rows.Hidden = False
    Select Case T.Value
    ...


    A+
    0
    1. Bonjour,

      Merci pour votre retour,

      Le tableau se perd encore, j'ai rajouter la ligne mais cela ne change rien.


      Private Sub Worksheet_Change(ByVal T As Range)
      'Cette partie permet l'affichage du tableau des arrêts en fonction de la liste déroulante
      Application.ScreenUpdating = False
      If T.Address = "$B$37" Then
      Rows.Hidden = False
      Select Case T.Value
      Case Is = "AB"
      Rows("39:71").Hidden = False
      Rows("72:138").Hidden = True
      Case Is = "CD"
      Rows("39:71").Hidden = True
      Rows("72:104").Hidden = False
      Rows("105:138").Hidden = True
      Case Is = "EF"
      Rows("39:104").Hidden = True
      Rows("105:138").Hidden = False
      End Select
      End If
      'Cette partie permet l'affichage des lignes si cellule supérieur à 0 AB
      Rows("41:44").Hidden = [E25].Value <= 0
      Rows("63:70").Hidden = [E25].Value <= 0
      Rows("45:50").Hidden = [E26].Value <= 0
      Rows("27").Hidden = [E26].Value <= 0
      Rows("51:56").Hidden = [E27].Value <= 0
      Rows("28").Hidden = [E27].Value <= 0
      Rows("57:62").Hidden = [E28].Value <= 0
      'Cette partie permet l'affichage des lignes si cellule supérieur à 0 CD
      Rows("74:77").Hidden = [E29].Value <= 0
      Rows("96:103").Hidden = [E29].Value <= 0
      Rows("78:83").Hidden = [E30].Value <= 0
      Rows("31").Hidden = [E30].Value <= 0
      Rows("84:89").Hidden = [E31].Value <= 0
      Rows("32").Hidden = [E31].Value <= 0
      Rows("90:95").Hidden = [E32].Value <= 0
      End Sub


      Merci d'avance pour votre aide

      Cordialement
      0
      1. La ligne de code que tu as ajoutée permet d'avoir un état initial avec toutes les lignes affichées.

        Voici ce que je comprends.
        Ton programme est séparé en 2 parties, la première qui effectue un masquage/Affichage de lignes lorsque B37 est modifiée
        If T.Address = "$B$37" Then
        ...
        End If

        et la seconde qui effectue un masquage/Affichage de lignes lorsque une cellule quelconque de la feuille est modifiée, le traitement s'effectuant alors en fonction des valeurs de la plage E25:E32
        Rows("41:44").Hidden = [E25].Value <= 0
        ...
        Rows("90:95").Hidden = [E32].Value <= 0


        Tu dois donc chercher les incohérences dans la (ou les) partie(s) concernée(s).
        Ne connaissant pas le résultat attendu, j'aurais du mal à t'en dire d'avantage.

        A+
        0
        1. Bonjour,

          Merci pour votre retour,

          Cela est exacte, l'objectif c'est que en B37 il y a un menu déroulant pour sélectionner le tableau en fonction du besoin AB,CD,EF.

          Le tableau commence à la ligne 39 pour finir en ligne 138 chaque tableau est égale à 1/3

          Ensuite se qui est important c'est que si la cellule D28 est = 0 il doit masqué dans le tableau les lignes 57 à 62 et pareil pour les suivants pour évité d'avoir un tableau trop important alors que les parties que je souhaite caché son inutile.

          Merci d'avance

          Cordialement
          0
          1. Bonsoir,

            Je vous joint un fichier demain matin.

            Merci pour votre aide et j'espère à demain

            Cordialement
            0
            1. Bonjour,

              Je joint un tableau excel j'ai désactiver une partie du macro.

              http://www.cjoint.com/c/FIhfY1AaJoM

              Merci d'avance

              Cordialement
              0
              1. Bonjour,

                Je comprends bien la première partie avec l'affichage des tableaux selon la sélection en B37.
                Cette partie semble fonctionner correctement.
                Par contre, ne connaissant pas la finalité de la seconde partie, j'ai un peu plus de mal à comprendre.

                J'ai modifié le code.
                Essaie de l'adapter en fonction de tes besoins.
                https://www.cjoint.com/c/FIhinP0Wxaz

                A+
                0
                1. Bonjour,

                  Merci pour votre retour,

                  Je vais tester est je reviens vers vous.

                  1000 merci

                  Bien cordialement
                  0
                  1. Bonjour,

                    Cela fonctionne pratiquement comme je le souhaite, y a t’il possibilité encore que si

                    D23 = 0 alors D24 caché
                    D22 = 0 alors D23 caché
                    D21 = 0 alors D22 caché

                    D27 = 0 alors D28 caché
                    D26 = 0 alors D27 caché
                    D25 = 0 alors D26 caché

                    D31 = 0 alors D32 caché
                    D30 = 0 alors D31 caché
                    D29 = 0 alors D30 caché

                    De plus si je change une valeur que cela soit instantanément changer.

                    Exemple si D30 = 50 il affiche de suite la ligne 31 et les lignes 84 à 89

                    Cela serait alors parfait.

                    Merci d'avance
                    0
                    1. Ce que tu indiques n'est pas cohérent.

                      D30 = 0 alors D31 caché

                      Tu ne peux pas masquer une seule cellule.
                      Le masquage/affichage doit être effectué sur une ligne (ou une colonne) entière.

                      De plus si je change une valeur que cela soit instantanément changé. Exemple si D30 = 50 il affiche de suite la ligne 31 et les lignes 84 à 89
                      C'est ce que fait le code avec la plage "E21:E32". Tu peux prendre exemple sur cette partie du programme.
                      Si tu as besoin d'éclaircissements sur le code, n'hésites pas à demander.

                      A+
                      0
                      1. Bonjour,

                        C'est exactement se que je recherche, mais il fraudais aussi que cela soit instantané, pour l'instant il faut re sélectionner dans le menu déroulant B37 pour que la modification soit prie en compte.

                        Merci d'avance

                        Cordialement
                        0