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 les lignes non recherchées


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Masquer les lignes non recherchées
    Bonjour à tous,

    J'ai créé un fichier avec de menus déroulants en cascade me permettant de formuler ma recherche. J'ai fait ensuite un CONCATENER des différents menus en H1.

    J'ai ensuite créé une macro afin de masquer toutes les lignes ne correspondants pas à ma demande (voir ci-dessous):

    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 rechercher()
     
    Rows("11:5479").Select
           Selection.EntireRow.Hidden = False
     
    Application.ScreenUpdating = False
     
    Dim i     As Long
    Dim Plage As Range
    Set Plage = Range("A11:A" & Range("A5500").End(xlUp).Row)
     
    For i = Plage.Cells.Count To 1 Step -1
    Plage.Cells(i).EntireRow.Hidden = True
        If InStr(Plage.Cells(i).Text, Range("H1").Text) Then
        Plage.Cells(i).EntireRow.Hidden = False
        End If
     
        Next
    Application.ScreenUpdating = True
     
    End Sub
    Comme vous le voyez j'ai environ 5500 lignes et cela va augmenter; comme le processus est lent je recherche une solution pour accéler.

    Ma première idée serait de déterminer différentes plages de recherche en fonction de la marque recherché en A1 mais je ne sais pas comment faire.
    Du style:
    Si A1=1 alors rechercher dans la plage A11:A800
    Si A2=2 alors rechercher dans la plage A801:A1400

    Ma seconde idée est toute différente. Ma base se situe dans un onglet caché et j'affiche dans ma page principale uniquement ma recherche.
    Par contre je ne sais pas comment poursuivre une recherchev à partir du dernier point connu.
    C'est à dire par exemple, ma premiere occurence est en ligne 100 dans la plage de recherche et je voudrais que dans la ligne suivante la recherchev continue la recherche en commencant après la ligne 100. Il doit bien y avoir quelque chose à faire avec INDEX EQUIV DECALER mais je dois avouer que je maitrise mal ces fonctions.

    Si quelqu'un pouvez me venir en aide je lui en serai redevable.

    Cordialement

  2. #2
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Une idée de passage, pourquoi ne pas utiliser un filtre automatique?

    Exemple simple (Avec en ligne 10, le titre des colonnes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Rechercher()
    Dim LastLig As Long
    Dim Crit As String
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1") 'A adapter
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        If LastLig > 10 Then
            Crit = .Range("H1").Value
            .Range("A10:A" & LastLig).AutoFilter Field:=1, Criteria1:="<>" & Crit
        End If
    End With
    End Sub

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci pour la réponse je vais regarder ce que cela donne.

    En ce qui concerne le filtre automatique, il existe, le reste est une demande de mon patron.
    Il y a au total environ dix critères de recherche que je "concatene" et plus de 5000 produits différents. Le choix des menus en cascade réduit les corrélations, certaines marques ayant des produits plus ou moins similaires.

    Une idée concernant une recherchev modifiée?

    Cher Mercatog,

    Je viens d'essayer votre macro. Elle crée un filtre automatique en A10 sur toules lignes mais ne selectionne pas ma recherche en H1. Tout reste affiché.

    J'ai trouvé l'erreur sur la ligne ci-dessous le temps de bien comprendre le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           .Range("A10:A" & LastLig).AutoFilter Field:=1, Criteria1:="=" & Crit
    "=" au lieu de "<>"

    Je galère en VB, je commence seulement. Merci

    Je pense à autre chose. Je vais proposer un autre code, je ne pense pas que ça marchera mais si vous pouvez m'orienter

    Mon code ci-dessous ne fonctionne pas, je dois mal m'y prendre.

    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 Rechercher()
    Dim LastLig As Long
    Dim Crit As String
    Dim Crit2 As String
    Dim Crit3 As String
     
    Application.ScreenUpdating = False
    With Worksheets("ESSAI")
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        If LastLig > 10 Then
    	Crit = .Range("A1").Value
            .Range("A10:A" & LastLig).AutoFilter Field:=1, Criteria:="=" & Crit
            Crit2 = .Range("D1").Value
            .Range("D10:D" & LastLig).AutoFilter Field:=1, Criteria2:="=" & Crit2
    	Crit3 = .Range("F1").Value
            .Range("F10:F" & LastLig).AutoFilter Field:=1, Criteria3:="=" & Crit3
     
        End If
    End With
    End Sub
    Je voudrais aussi pouvoir appliquer ou non les critères 1,2 et 3 en fonction d'un choix.

    Autre question, comment coder "selectionner tout"?

    merci

  4. #4
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Sub Rechercher()
    Dim LastLig As Long
    Dim Crit As String, Crit2 As String, Crit3 As String
     
    Application.ScreenUpdating = False
    With Worksheets("ESSAI")
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        If LastLig > 10 Then
            Crit = .Range("A1").Value
            Crit2 = .Range("D1").Value
            Crit3 = .Range("F1").Value
            With .Range("A10:F" & LastLig)
                .AutoFilter Field:=1, Criteria:=Crit
                .AutoFilter Field:=4, Criteria:=Crit2
                .AutoFilter Field:=6, Criteria:=Crit3
            End With
        End If
    End With
    End Sub
    Crit, Crit2, Crit3 étant des string (mots)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        .AutoFilterMode = False
    Permet d'enlever le filtre automatique

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup, cela m'aide à comprendre et à affiner mon fichier.

    Une dernière question déjà posée au dessus: que dois je faire apparaître dans mon menu déroulant pour pouvoir selectionner l'ensemble des données de la colonne D par exemple? "TOUS"?

    Si je pouvais je vous paierai une bière!! ^^

    J'habite à côté de cannes, si jamais vous êtes dans le coin ce sera un plaisir.

  6. #6
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    pour pouvoir sélectionner l'ensemble des données de la colonne D
    Mettre en D1 *

    Si je pouvais je vous paierai une bière!! ^^

    J'habite à côté de cannes, si jamais vous êtes dans le coin ce sera un plaisir.
    Merci pour l'invitation, mais je ne bois pas et j'habite en Afrique.

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci mille fois. J'ai terminé mon fichier. A terme j'aurais 20 000 articles sur 30 marques et plus de 10 critères de recherche avec étude de positionnement et calcul de marges et marges arrières donc c'était super important.

    Et grâce à vous je progresse dans ma compréhension du VB

    pour tout afficher j'ai fait comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub reinit()
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With Worksheets("ESSAI")
        .AutoFilterMode = False
     
    End With
    End Sub
    Et cela fonctionne

    Encore merci

  8. #8
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Ta sub initialisation pourra être simplement écrite comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Reinit()
     
    Application.ScreenUpdating = False
    Worksheets("ESSAI").AutoFilterMode = False
    End Sub

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

Discussions similaires

  1. [LibreOffice][Tableur] Masquer les lignes non remplies pour impression
    Par cneau dans le forum OpenOffice & LibreOffice
    Réponses: 3
    Dernier message: 19/03/2014, 09h20
  2. CRM V4 : masquer les attributs non utilisés dans les recherches avancée
    Par Marie40200 dans le forum Microsoft Dynamics CRM
    Réponses: 0
    Dernier message: 27/02/2014, 10h02
  3. Supprimer/Masquer les lignes vides
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/05/2007, 12h13
  4. masquer les lignes dans une zone si une cellule de la ligne est vide
    Par keguira dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/11/2006, 18h21
  5. Réponses: 2
    Dernier message: 07/11/2006, 11h08

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