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 :

Recherche avec filtre qui marche une fois sur deux


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut Recherche avec filtre qui marche une fois sur deux
    j'ai un code pour filtrer en fonction de la valeur de la cellule active .mais il n'y a rien a faire ca ne marche pas
    je ne comprends pas pourquoi .je n'en peux plus là avec ce code
    merci pour votre aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub rech_filtre()
    col_num = ActiveCell.Column: col_s = Split(ActiveCell.Address, "$")(1)
    val_rech = ActiveCell.Value
    dern = Range(col_s & "65536").End(xlUp).Row
    Set plage = Range(col_s & "2", col_s & dern
    Range("w" & "2", col_s & dern).AutoFilter Field:=col_num, Criteria1:="=" & UCase(val_rech)
    End Sub

  2. #2
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    Connais-tu la syntaxe Cells ? Cela t'évitera de devoir avoir 2 variables pour la colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    '--- syntaxe de Cells : ---
    Cells(num_ligne, num_colonne)
    '--- tu peux donc l'utiliser ainsi : ---
    col_num = ActiveCell.Column
    dern = Cells(Rows.Count, col_num).End(xlUp).Row
    Du coup, pour sélectionner une plage de cellules, tu peux faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Range(Cells(2, col_num), Cells(dern, col_num))
    Le UCase n'est pas vraiment nécessaire.
    Pourquoi "w" & "2" et pas "w2" ?
    Ta plage ne commence-t-elle pas en colonne A ? Pourquoi tu commences en colonne W ? Après Field, il faut mettre le n° de champ que tu veux filtrer. Si ta plage va de la colonne C à F, et que tu veux filtrer sur la colonne C, alors le n° de champ est 1 et pas 3.
    Ta colonne est bien après la colonne W, du coup ?
    Tu peux essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(2, 23), Cells(dern, col_num)).AutoFilter Field:=col_num - 23 + 1, Criteria1:=val_rech, Operator:=xlAnd

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    merci .j'ai suivi votre méthode avec ce code
    et je voudrais filtrer v173 qui correspond a ma cellule active avec comme colonne field 1
    mais ca m'affiche pas les 4 lignes avec v173 (ligne 79,82 a 84)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub rech_filtre()
    col_num = ActiveCell.Column
    dern = Cells(Rows.Count, col_num).End(xlUp).Row
    Set plage = Range(Cells(2, col_num), Cells(dern, col_num))
    Range(Cells(dern, col_num), Cells(2, 5)).Select
    Range(Cells(dern, col_num), Cells(2, 5)).AutoFilter Field:=1, Criteria1:=val_rech, Operator:=xlAnd
    End Sub
    Nom : 0img89.jpg
Affichages : 191
Taille : 104,0 Ko

  4. #4
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Attention, dans le code que tu donnes, il y a plusieurs problèmes :
    1. Tu écris Criteria1:=val_rech, mais tu ne dis pas auparavant ce que vaut val_rech
    2. Tu mets le filtre sur la plage suivante : Range(Cells(dern, col_num), Cells(2, 5)). Mais ton filtre doit se faire sut TOUT le tableau. Par contre, le critère s'effectue sur un seul champ/une seule colonne.
    3. Ces deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set plage = Range(Cells(2, col_num), Cells(dern, col_num))
    Range(Cells(dern, col_num), Cells(2, 5)).Select
    ne servent à rien. Tu définis une plage plage, mais tu ne l'utilises pas ensuite. Et ça ne sert à rien de sélectionner la plage avant d'effectuer le filtre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub rech_filtre()
        val_rech = ActiveCell.Value
        dern = Cells(Rows.Count, 1).End(xlUp).Row
        Range(Cells(1, 1), Cells(dern, 10)).AutoFilter Field:=1, Criteria1:=val_rech, Operator:=xlAnd
    End Sub
    Ici, j'ai supposé que ton tableau s'étend de la colonne A (n°1) à la colonne J (n°10)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    merci pour ta réponse très pertinente.oui ca marche maintenant par contre
    1-ca ferais quoi si le filtre n'est pas sut TOUT le tableau.
    2-c'est quoi la différence avec le critère s'effectue sur un seul champ/une seule colonne?

  6. #6
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    En fait, par défaut, ça le fait sur tout le tableau.
    Champ et colonne sont la même chose ici. C'est juste que dans la syntaxe de filtre, il y a "Field" ce qui veut dire champ, mais au final on filtre sur une colonne ...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    c'est super important ce message , c'est pour celà que souvent ca ne marche pas mon code
    Si ta plage va de la colonne C à F, et que tu veux filtrer sur la colonne C, alors le n° de champ est 1 et pas 3
    si comme tu dis par défaut, ça le fait sur tout le tableau.alors dans ce cas comment écrire ce code le plus simplement sans utiliser la variable dern par example
    range("a").AutoFilter suffirait?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ange(Cells(1, 1), Cells(dern, 10)).AutoFilter

  8. #8
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Je me suis un peu ma exprimée. En fait, quand tu appliques un filtre, ça va masquer les colonnes qui ne répondent pas à la condition du filtre. Du coup, si tu as un autre tableau à côté, ça va aussi réduire le tableau d'à côté.
    Nom : filtre.png
Affichages : 193
Taille : 4,0 Ko
    Ici, j'ai mis des filtres que sur les colonnes A et B et pourtant les colonnes D et E sont réduites aussi.
    Après, je ne sais pas vraiment pourquoi il faut quand même spécifier toute la plage (toutes les lignes) en VBA.

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    avec autofilter le field1 est la colonne 1 de la plage
    bien évidement une plage filtrée ne va pas masquer que les colonnes concernées par les fields c'est logique sinon ca voudrait dire que autofilter aurait la capacité de décaler les ligne d'une plage et a ce titre aucune cellule ne correspondrait a la précédente au niveau du columns (index)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    je ne comprends rien.le code marche bien mais depuis ca na marche plus
    j'ai simplement le code pour montrer sur le forum .meme ce code ne marche plus
    23 c'est colonne w et le mot rechercher est exemple 74877 .
    la colonne w est bien convertis en texte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Sub rech_filtre()
        Range(Cells(1, 1), Cells(2000, 40)).AutoFilter Field:=23, Criteria1:="74877", Operator:=xlAnd
    End Sub
    Nom : 0img91.jpg
Affichages : 189
Taille : 232,7 Ko
    en fait c'est pas évident quand il y a un bug avec filtre de voir d'ou vient l'erreur sur quelle ligne précisément
    je pensais écrire avec with un peu comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    With Sheet1
    .AutoFilterMode = False
    .Range("A1:D1").AutoFilter
    .Range("A1:D1").AutoFilter Field:=2, Criteria1:=35
    End With

  11. #11
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Hmmm ... je ne vois pas bien pourquoi ça ne marcherait pas.
    Essaie donc de placer des filtres sur toutes tes colonnes avant de lancer le code (je vois que tes filtres ne commencent qu'à partir de la colonne AH.
    Sinon, je ne sais pas ...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    oui ca reste instable la méthode filtre .peu etre il reste des parametres à ajouter

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    en ajoutant .AutoFilterMode = False ca semble mieux marche .moins de plantage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        With ActiveSheet
        .AutoFilterMode = False
        .Range(Cells(1, 1), Cells(dern, Range("IV1").End(xlToLeft).Column)).AutoFilter Field:=num_col, Criteria1:=val_rech
        End With

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/10/2011, 10h14
  2. Pb de requête qui marche une fois sur deux
    Par emulamateur dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 26/04/2011, 16h45
  3. NamedQuery qui marche une fois sur deux
    Par Damascus06 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/12/2010, 15h41
  4. Erreur ASP : le test qui marche une fois sur 2 !
    Par Ryo_san dans le forum ASP
    Réponses: 2
    Dernier message: 04/07/2006, 09h47
  5. Pb : malloc qui marche une fois sur deux .... ?
    Par guillaume_pfr dans le forum C
    Réponses: 14
    Dernier message: 21/07/2003, 09h52

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