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 :

Cacher des lignes de plages précises.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Intervenant temps réel
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Intervenant temps réel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Par défaut Cacher des lignes de plages précises.
    Bonjour à tous;

    Une aide pour améliorer le code joint.
    Pour cacher des lignes de plages précises,,,, sauf si la cellule de la colonne C dans la ligne supérieure est <> de " ". Voici un code qui marche, mais saccade.
    Est-il possible de faire mieux, ou d'accélérer en évitant le code qui affiche toutes les lignes avant de les cachées.

    Pour être honnête, je ne suis pas l'auteur de ce code.
    Je remercie par avance le ou les personnes qui veulent bien m'aider.

    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
    21
    Sub MasquerLignes()
        Dim lgn, i%, j%, listLn$
        lgn = Split("C33:C41 C45:C48 C52 C58:C61 C66:C69 C75 C80 C85 88:227")
        With Worksheets("Ligne A")
            .Unprotect
            .Rows.Hidden = False
            For i = 0 To UBound(lgn)
                With .Range(lgn(i))
                    For j = 1 To .Rows.Count
                        If .Cells(j - 1, 1) = "" Then listLn = listLn & " " & .Cells(j, 1).Row
                    Next j
                End With
            Next i
            lgn = Split(LTrim(listLn))
            Application.ScreenUpdating = False
            For i = 0 To UBound(lgn)
                .Rows(lgn(i)).Hidden = True
            Next i
            .Protect
        End With
    End Sub

  2. #2
    Membre chevronné
    Homme Profil pro
    retraité enseignement
    Inscrit en
    Mars 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : retraité enseignement
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 213
    Par défaut screenupdating...
    bonsoir,

    Pour éviter les effets d'écran vous pouvez utilisez "Screenupdating" à false au début de macro et à true à la fin(ne pas oublier). Ce sera de toute façon plus rapide.

    voilà ma proposition :
    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
    21
    22
    23
    24
    Sub MasquerLignes()
        Dim lgn, i%, j%, listLn$
     
        Application.ScreenUpdating = False
        lgn = Split("C33:C41 C45:C48 C52 C58:C61 C66:C69 C75 C80 C85 88:227")
        With Worksheets("Ligne A")
            .Unprotect
            .Rows.Hidden = False
            For i = 0 To UBound(lgn)
                With .Range(lgn(i))
                    For j = 1 To .Rows.Count
                        If .Cells(j - 1, 1) = "" Then listLn = listLn & " " & .Cells(j, 1).Row
                    Next j
                End With
            Next i
            lgn = Split(LTrim(listLn))
     
            For i = 0 To UBound(lgn)
                .Rows(lgn(i)).Hidden = True
            Next i
            .Protect
        End With
        Application.ScreenUpdating = True
    End Sub
    cordialement
    geogeo

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Intervenant temps réel
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Intervenant temps réel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Par défaut Probème Résolut
    Bonsoir geogeo70,

    Désolé de te répondre avec autant de retard.
    Tu raison , cela marche très bien.
    Déplacer ' Application.ScreenUpdating = Fals ' est la solution.

    C'est très aimable et je te remercie bcp.
    Cordialement

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Tu gagnerais beaucoup à éviter un mécanisme (celui que montres ton code) qui consiste à :
    - construire une chaîne de caractères listLn (avec des numéros de lignes séparés par des espaces)
    - puis "éclater" par split cette chaîne listLn pour obtenir un array lgn des lignes à cacher
    - puis parcourir en boucle l'array lgn pour en extraire chaque numéro et effacer, tour à tour, chaque ligne concernée
    C'est vraiment tortueux, source de lenteurs, etc ...
    Constitue donc directement la plage des lignes à cacher et cache ensuite d'un seul coup.
    Ouvre ton aide VBA à la rubrique Application.Union, méthode et lis. Cela devrait te donner des idées.

    (il y aurait également à dire sur la démarche générale, qui commence par définir l'array lgn, mais tu es visiblement débutant et je ne vais pas te troubler plus encore).

  5. #5
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    Pour ajouter à ce que dit unparia, en cherchant bien dans le forum, une discussion récente pour cacher les lignes : ici
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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

Discussions similaires

  1. Besoin d'un petit coup de pouce (Merci d'avance)!
    Par romain1 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 30/08/2008, 15h58
  2. -XITI- un petit coup de pouce merci
    Par bojolais dans le forum Outils
    Réponses: 4
    Dernier message: 07/11/2007, 17h38
  3. Petit coup de pouce : gui et bdd
    Par sparko_dutos dans le forum Général Python
    Réponses: 2
    Dernier message: 19/07/2007, 20h51
  4. SDL & GTK besoin d'ub petit coup de pouce :)
    Par hunter99 dans le forum SDL
    Réponses: 1
    Dernier message: 15/04/2007, 23h51
  5. un petit coup de pouce svp ;)
    Par softstar dans le forum C++
    Réponses: 14
    Dernier message: 11/05/2006, 09h20

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