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 :

Filtre élaboré avec une sélection copié en vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Points : 42
    Points
    42
    Par défaut Filtre élaboré avec une sélection copié en vba
    Bonjour à tous, je commence de plus en plus à prendre goût à ce forum...j'adore.

    Aujourd'hui j'ai un problème de création de filtre élaboré programmé en vba.

    Je veux être en mesure de générer un filtre élaboré grâce à une sélection copiée au préalable.

    Dans le fond c'est simple je veux être capable(en vba) de copié une cellule et de m'en servir dans un filtre élaboré. Pour le moment j'ai ce bout de code qui ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Range("C4:D5").Select
        Selection.Copy
        Selection.AutoFilter Field:=7, Criteria1:="=1234", Operator:=xlAnd
    End Sub
    À la ligne "Criteria1" je voudrais que ce soit ma cellule "Range("C4: D5") qui s'utilise.

    Comment faire????

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le mieux, c'est d'utiliser l'enregistreur de macros en faisant un filtre élaboré manuellement et ainsi tu verras le code qu'il va générer.
    Ensuite tu peux commencer à changer les paramètres pour les adapter à ce que tu souhaites obtenir.

  3. #3
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Salut,
    Il y a un pb entre l'énoncé de ta demande et ton code

    ton code c'est pour les filtres automatiques
    c4:d5 sont dans 2 colonnes différentes d'une part donc tu peux afficher le filtre automatique sur chaque colonnes mais tes critères de filtre ne peuvent être c4:d5

    criteria1 représente la valeur du filtre de la colonne "Field "

    les filtres avancés dont tu as besoin c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        selection.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
            "C4:D5"), CopyToRange:=Range("F28"), Unique:=False
    si tu copie vers une autre feuille il faut débuter l'enregistrement de cette autre feuille, sinon tu auras une erreur.
    suis les conseils de corona

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Points : 42
    Points
    42
    Par défaut
    @Corona: C'est ce que j'ai fait mais je ne sais pas comment modifier mon code pour obtenir ce que je veux.

    @Oliv-: c4:d5 représente 4 cellules fusionner ensemble. Et il s'agit vraiment de filtre élaboré que je veux. Donc, je vais essayer ce que tu me dis et je te reviens là-dessus.

    @Oliv-: Tu as raison il s'agit bien d'un filtre personnalisé...mon erreur

    @Oliv-: Le code que tu m'as fourni ne fonctionne pas...désolé.

    Cependant maintenant je connais mieux mon problème. J'ai besoin de coder une macro qui sélectionne ma cellule fusionnée c4:d5 et qui ce sert de cette sélection pour créer un filtre automatique personnalisé pour filtrer une colonne avec exactement la valeur de c4:d5.

    Je crois que ça peut vous aider à m'aider

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suis désolé mais le code que t'a proposé Oliv, même si cela ne réponds pas exactement à ce que tu souhaites, fonctionne parfaitement dans le cadre d'un filtre élaboré.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selection.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("C4:D5"), CopyToRange:=Range("F28"), Unique:=False
    Le filtre élaboré s'effectue au départ d'une DataBase, (1er élément - Selection) avec une zone de critères (2ème élément - Range("C4:$D5") et s'exporte éventuellement vers une autre cellule (3ème élément - Range("F28"))
    Voici un autre code qui fonctionne parfaitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub filtre()
     Dim cel As Range
     Set cel = ThisWorkbook.Worksheets("db").Range("A1").CurrentRegion
     cel.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("M1:N2"), CopyToRange:=Range("M8"), Unique:=False
    End Sub

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Points : 42
    Points
    42
    Par défaut
    C'est très bien mais la question demeure.

    Je veux coder un filtre automatique personnalisé capable d'utiliser ma cellule fusionner c4:d5 comme critère.

    Ce que vos codes font pour le moment ne répond pas à mes besoins. Désolé.

    Je pense que mon problème est dans la commande Criteria1 mais je n'en sais rien.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avant d'aller plus loin, obtiens-tu satisfaction lorsque tu effectues ce filtre élaboré manuellement ?
    Quelles valeurs as-tu mis dans les cellules c4:d5 ?
    Parle-t-on de la même chose, parce-que dans ta première intervention tu semblais parti vers un filtre simple.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Points : 42
    Points
    42
    Par défaut
    À la base ce que je fais c'est plutot simple.

    J'écris dans ma cellule fusionnée c4:d5 le numéro de facture que je veux trouver et ensuite j'effectue un filtre automatique personnalisée sur ma colonne "numéro de facture". Le critère de ce filtre est à l'intérieur de ma cellule fusionnée.

    Ça ressemble à ça en gros.

    Je voudrais juste corrigé quelque chose. Il ne s'agit pas de filtre élaboré c'est un filtre automatique. C'est mon erreur j'ai écris élaboré dans mes premiers posts mais c'est vraiment automatique.

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je voudrais juste corrigé quelque chose. Il ne s'agit pas de filtre élaboré c'est un filtre automatique. C'est mon erreur j'ai écris élaboré dans mes premiers posts mais c'est vraiment automatique.
    C'est ce qu'il me semblait aussi. Filtre automatique et élaboré ce n'est pas tout à fait la même chose.
    Quand les choses sont dites clairement on gagne beaucoup de temps.
    Voici un exemple de code qui fonctionne sur un filtre auutomatique.
    La colonne 7 de la feuille active contient des lettres C, M, D, V. En N1 la valeur est C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("$A$1:$J$106").AutoFilter Field:=7, Criteria1:=Range("N1")
    Cependant tu parles de cellules fusionnées. Si tu utilises une cellule fusionnée. Par exemple N1:O2 et que tu fais référence à celles-ci cela ne fonctionne pas. Il faut référencer la cellule N1 dans ce cas

  10. #10
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    et comment est déclenchée ta macro ? un bouton, un évenement ?

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Points : 42
    Points
    42
    Par défaut
    Ça fonctionne au poil ...maintenant comment je fais pour réinitialiser le filtre pour retrouver toutes mes données?

    @Oliv-: Je déclenche le filtre avec un bouton.

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par Sherman750 Voir le message
    Ça fonctionne au poil ...maintenant comment je fais pour réinitialiser le filtre pour retrouver toutes mes données?
    Tu cliques sur le bouton Effacer pour réinitilaiser tous les filtres.

    Bonjour,
    Citation Envoyé par Sherman750 Voir le message
    @Oliv-: Je déclenche le filtre avec un bouton.
    Tu ne précises pas quel type de bouton, tu utilises. Un contrôle formulaire ou un contrôle ActiveX ?
    Dans les contrôles ActiveX, tu as un ToggleButton qui dans ton cas me semble le plus approprié.
    Voici un exemple de code que tu peux placer dans le module de l'objet feuille qui contient le bouton.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Private Sub ToggleButton1_Click()
     Dim rng As Range: Set rng = Me.Range("$A$1:$E$16")
     If Me.ToggleButton1.Value Then
       rng.AutoFilter Field:=4, Criteria1:=Range("H1") ' Active le filtre
      Else
       rng.AutoFilter ' Désactive le filtre
     End If
    End Sub

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Points : 42
    Points
    42
    Par défaut
    Désolé je ne suis pas habitué mais il s'agit bien d'un Togglebutton.

    Merci pour les réponses

    Est-ce que je pourrais rajouter une ligne de code ici pour faire un reset de mon filtre. Bien sur le reset dois ce faire une fois que j'ai terminer toutes mes opérations.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Range("C4:D5").Select
        Selection.Copy
        Selection.AutoFilter Field:=7, Criteria1:=Range("C4"), Operator:=xlAnd
     
     
    End Sub
    Merci

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par Sherman750 Voir le message
    Est-ce que je pourrais rajouter une ligne de code ici pour faire un reset de mon filtre. Bien sur le reset dois ce faire une fois que j'ai terminer toutes mes opérations.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Range("C4:D5").Select
        Selection.Copy
        Selection.AutoFilter Field:=7, Criteria1:=Range("C4"), Operator:=xlAnd
    End Sub
    Merci
    Mais il me semble que dans le code que j'ai déposé le reset s'y trouve non ?
    C'est la commande après le Else. As-tu fais un test avec ce code ?
    [EDIT]
    A la lecture de ton code, il me semble y voir une petite erreur.
    Pourquoi la copie avant le filtre. N'est-ce pas après qu'il faut faire une copie ?
    De plus si tu souhaites copier la liste filtrée vers un autre emplacement, l'utilisation du filtre élaboré (qui soit dit en passant est le sujet de ton post) est le plus approprié.

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Points : 42
    Points
    42
    Par défaut
    Ça ne fonctionne pas.

    Je sais pas si ça va t'aider mais j'ai ajouté un bouton nommé "Reset". Je pourrais lui ajouter un code pour ce bouton seulement, ainsi je contrôle le moment où je fais le reset de mon filtre.

    Je viens de trouver un problème avec mon reset par contre. Lorsqu'il n'y a plus de valeur dans mes colonnes le filtre reste actif et ne se reset pas.


  16. #16
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Si tu places un bouton ToggleButton il ne faut qu'un seul bouton. Cela fonctionne comme un interrupteur dont la valeur est TRUE ou FALSE
    Je t'ai demandé si tu avais testé le code que j'ai proposé ?
    Si ton classeur ne contient pas de données confidentielle, dépose le.

  17. #17
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Points : 42
    Points
    42
    Par défaut
    Ça ne fonctionne pas.
    J'ai essayer ton code et je n'arrive pas à reseter mon filtre.

    Je suis capable d'écrire une macro qui remet mon filtre à l'état initial pour le moment grâce à ce nouveau bouton que j'ai ajouté. Bonne nouvelle!

    J'ai maintenant un nouveau problème. Voici les étapes que je suis pour que le problème apparaisse.
    1. Je filtre ma colonne et les seules informations qui viennent sont les dernières de mon classeur
    2. Je coupe et colle ces valeurs que j'obtient suite à mon filtrage, sur un autre classeur
    3. Je reviens à mon classeur initial et retire le filtre*

    C'est la le problème maintenant. Puisqu'il n'y a plus de valeur dans mon classeur je ne peux pas reseter le filtre que j'ai utilisé précédemment.

    J'espère que c'est assez clair pour tout le monde.

  18. #18
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sans avoir ton classeur sous les yeux, je ne plus te répondre car je ne sais pas où et comment tu places ton code etc...
    Tout ce que je peux t'affirmer, c'est que le code que je t'ai proposé fonctionne chez moi.

  19. #19
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Points : 42
    Points
    42
    Par défaut
    Désolé pour le contre temps...cependant je crois avoir trouvé une solution.

    Merci quand même d'avoir essayer.

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

Discussions similaires

  1. utilisation des filtres excel avec une macro access
    Par alexlkds dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/11/2009, 18h35
  2. filtre élaboré avec une plage critere differente
    Par freed07 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/01/2009, 21h20
  3. Problème avec une requète SQL en vba
    Par mephistomauvis dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/12/2008, 19h41
  4. compter avec une requete SQL dans VBA
    Par michael1971 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/01/2008, 09h20
  5. Réponses: 2
    Dernier message: 24/07/2007, 17h53

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