Affichage des cellules macro

momo -  
 momo -
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. Gyrus Messages postés 3360 Statut Membre 526
     
    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
  2. momo
     
    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
  3. Gyrus Messages postés 3360 Statut Membre 526
     
    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
  4. momo
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Gyrus Messages postés 3360 Statut Membre 526
     
    Si tu veux que j'aille plus loin, il faut joindre un fichier.
    Pour cela, tu peux utiliser
    https://www.cjoint.com/

    A+
    0
  7. momo
     
    Bonsoir,

    Je vous joint un fichier demain matin.

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

    Cordialement
    0
  8. momo
     
    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
  9. Gyrus Messages postés 3360 Statut Membre 526
     
    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
  10. momo
     
    Bonjour,

    Merci pour votre retour,

    Je vais tester est je reviens vers vous.

    1000 merci

    Bien cordialement
    0
  11. momo
     
    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
  12. Gyrus Messages postés 3360 Statut Membre 526
     
    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
  13. momo
     
    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