IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Procédure evenementielle pour afficher/masquer des lignes [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Par défaut Procédure evenementielle pour afficher/masquer des lignes
    Bonjour à tous,


    Dans le fichier ci-joint, je mets des croix dans les cases et des titres apparaissent dans le tableau de synthèse en dessous.

    Ce que j'aimerai : lorsque une cellule bleue du tableau de synthèse est égale à 0 alors la ligne et celle juste en dessous soit masquée. Sinon, elles s'affichent.

    En cherchant sur le net, j'ai trouvé le fichier "TestOK" qui répond tout à fait à mon besoin.
    J'ai donc essayé de l'appliquer à mon fichier "TEST" mais ça ne marche pas...
    Pouvez-vous me le debugguer svp ?
    Merci !
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    essayes comme ça dans l'evenement "Change" de ta feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("F42:F" & Range("F" & Rows.Count).End(xlUp).Row)) = 0 Then
      Range(Target.Address, Target(2, 1).Address).EntireRow.Hidden = True
    End If
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Par défaut
    Bonjour,

    Merci pour la réponse mais j'ai une erreur d'execution '91' qui s'affiche :
    Variable objet ou variable de bloc Width non definie

    quelle est l'erreur ?

    Dans le Module1, on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Lignes_masquer_si_NON()
    Dim c As Range
    Application.ScreenUpdating = False
    Cells.EntireRow.Hidden = False
    For Each c In Range("E24:e81")
        If c.Offset(, 1) = "0" Then
        c.EntireRow.Hidden = True
        c.Offset(1, 1).EntireRow.Hidden = True
    Next
    Application.ScreenUpdating = True
    End Sub
    Et dans la Worksheet_Change :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("F42:F" & Range("F" & Rows.Count).End(xlUp).Row)) = 0 Then
      Range(Target.Address, Target(2, 1).Address).EntireRow.Hidden = True
    End If
    End Sub

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    je te renvoie ton fichier, version excel 2007, car ça fonctionne chez moi
    je ne m'occupe pas de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Lignes_masquer_si_NON()
    Dim c As Range
    Application.ScreenUpdating = False
    Cells.EntireRow.Hidden = False
    For Each c In Range("E24:e81")
        If c.Offset(, 1) = "0" Then
        c.EntireRow.Hidden = True
        c.Offset(1, 1).EntireRow.Hidden = True
    Next
    Application.ScreenUpdating = True
    End Sub
    il ne sert à rien dans mon cas
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Par défaut
    Bonjour,

    En testant le fichier xlsm j'obtiens directement une erreur en mettant ou en enlevant un croix :
    "erreur '91' : variable objet ou variable de bloc With non définie"
    Bizarre...

    De plus, est-ce qu'il est possible de rester en .xlsx ou .xls et non pas .xlsm ?

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    j'avais mal compris, il faut agir sur les croix, essayes comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Dl As Long, x As Long
    Dl = Range("F" & Rows.Count).End(xlUp).Row
    If (Target.Column = 6 Or Target.Column = 58) And Target.Row <= 38 Then
      For x = 42 To Dl Step 2
        If Range("F" & x) = 0 Then
          Range("F" & x, "F" & x + 1).EntireRow.Hidden = True
        Else
          Range("F" & x, "F" & x + 1).EntireRow.Hidden = False
        End If
      Next x
    End If
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour

    Ci-joint code dans le même sens que celui de Dominique, que je salue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim x As Byte
     
    Application.ScreenUpdating = False
    If Target.Row <= 38 Then
        Select Case Target.Column
            Case 16, 30, 44, 58
                For x = 42 To 80 Step 2
                    Rows(x).Resize(2).Hidden = Range("F" & x) = 0
                Next x
        End Select
    End If
    End Sub

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    426
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 426
    Par défaut
    Bonjour,
    Le code de Mercatog fonctionne parfaitement.
    Merci à tous pour votre aide !

    Dernière question, peut-on laisser le document en .xls sans désactiver les macro ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher/masquer des lignes dans un tableau hiérarchique
    Par linou dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/06/2009, 11h58
  2. Quel composant utiliser pour afficher rapidement des lignes de texte?
    Par Rodrigue dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 13/02/2008, 14h45
  3. Afficher/Masquer des lignes de tableaux
    Par mLk92 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/10/2007, 18h28
  4. Afficher/Masquer des lignes de tableaux
    Par MortyDeath dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/08/2007, 10h22
  5. Liste déroulante : afficher/masquer des lignes
    Par arxpression dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/08/2006, 16h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo