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 :

Masquer nombre ligne défini après valeur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Par défaut Masquer nombre ligne défini après valeur
    Bonjour à tous,

    Je souhaite créer un bouton sur excel qui me permettrait de masquer un nombre de ligne défini en dessous d'une valeur à trouver.


    Je m'explique, sur une même feuille j'ai toutes les semaines de l'année. Chaque semaine comporte 22 lignes (la première étant l'en-tête). Donc 22 x 52 = 1144 lignes.

    Pour chaque semaine lorsque la valeur de la colonne Q = "AP" je souhaiterai masquer la ligne d'en tête ainsi que les 21 lignes suivantes.


    Merci d'avance pour votre retour

    Bonnes fêtes de fin d'année !

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Bonjour,

    Quelque chose de ce genre devrait convenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
     
    Sub MasquerLignes()
        Dim kR As Long
        For kR = 1 To 1144
            If Range("Q" & kR).Value = "AP" Then
                Rows(kR).EntireRow.Hidden = True
            End If
        Next kR
    End Sub
     
    Sub VoirTout()
        Cells.EntireRow.Hidden = False
    End Sub
    Cordialement.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Par défaut
    Bonjour Eric et merci pour ton aide.

    Ton code résout une partie de mon problème. Il me masque bien la ligne contenant "AP" en colonne Q. En revanche, je souhaiterais également masquer les 21 lignes se trouvant en dessous de la ligne contenant "AP".

    C'est sur ce point la que je bloque

    Merci encore

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                Rows(kR).Resize(22).Hidden = True
    à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rows(kR).EntireRow.Hidden = True

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Par défaut
    Impeccable!

    Exactement ce dont j'avais besoin !

    Merci à vous 2

    Bonnes fêtes de fin d'année !

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Par défaut
    Encore une question, étant donné le nombre conséquent de lignes et vu que j'applique cette macro à 5 feuilles, cela prend un temps considérable.

    N'y a t-il pas un moyen d'accélérer cela?

    voici mon code actuel.

    le code du module que tu m'as fourni

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub masquerAP()
     
     
        Dim kR As Long
        For kR = 1 To 1144
            If Range("R" & kR).Value = "AP" Then
                Rows(kR).Resize(22).Hidden = True
            End If
        Next kR
     
    End Sub
    Et le code appliqué à la fermeture du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
     
     
    Dim ws As Worksheet
     
    If ThisWorkbook.ReadOnly Then
            Application.Quit
            ActiveWorkbook.Close Savechanges:=False
    End If
     
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "ListeDéroulante" And ws.Name <> "Donnee" And ws.Name <> "L300" Then
            ws.Activate
            Call Module1.masquerAP
        End If
     
    Next ws
     
     
    End Sub

    Cela met énormément de temps à se lancer et je n'arrive pas à appliquer le code à plusieurs feuilles


    Merci d'avance

  7. #7
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonsoir,

    Pour augmenter la vitesse quelques points me viennent en tête :

    1) Ne pas utiliser les .Activate mais passer en argument le nom de la feuille.
    2) Passer les options de calculs en manuels ainsi que le screenupdating (attention à bien les remettre à l'origine à la fin)

    Ces deux petites choses devraient déjà vous permettre d'économiser qq secondes, minutes en fonction du nombre de feuille à traiter.

    Je pense que votre fichier pourraient être optimisé en travail avec une Db global, et Power query pour spitter celle-ci en vos différents Onglets.

    Joyeuses fêtes,

  8. #8
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Bonsoir,

    Dans la mesure où il est certain que les lignes de titres "semaines" commencent à 1 et sont par groupe de 22, il y a aussi déjà pas mal à gagner en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        For kR = 1 To 1144 Step 22
    Cordialement.

Discussions similaires

  1. [XL-2010] Optimiser le classique "Masquer les lignes dont la valeur = o"
    Par JohnSn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/07/2016, 18h02
  2. Calculs dans un nombre de lignes définies
    Par Rococoko dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/04/2010, 16h55
  3. Réponses: 14
    Dernier message: 14/11/2008, 10h16
  4. Réponses: 1
    Dernier message: 27/03/2008, 11h57
  5. Nombre de lignes obtenues après une requete sql
    Par maxlegrand dans le forum JDBC
    Réponses: 8
    Dernier message: 06/06/2007, 10h38

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