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 :

Filtrer sur un critère mais dans trois colonnes [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2018
    Messages : 2
    Par défaut Filtrer sur un critère mais dans trois colonnes
    Bonsoir à toutes et à tous,

    Je consulte votre forum, les tutoriels et les cours très régulièrement en revanche c'est la première fois que je suis amenée à poster, je m'excuse donc par avance si je ne suis pas claire. N'hésitez pas à me le faire savoir, je reformulerai afin d'éclaircir mes propos

    Voici le contexte :

    Un tableau renseigne pour chaque commercial, et par produits, les sites de ventes à fournir (il y en a 4 en tout, renseignés sur trois colonnes sachant que leur ordre est important, un produit est d'abord envoyé sur le site1, puis le site2, puis le 3. A noter également, un site n'apparaît qu'une fois sur une ligne). Ce tableau fait maintenant plus de 1000 lignes, je voudrai donc pouvoir filtrer sur les sites. L'utilisation des filtres automatiques ne m'arrange pas parce que ça filtre sur une seule colonne à la fois. Or, je voudrai voir apparaître la totalité des lignes où figure le site que je sélectionne.

    J'ai d'abord créé dans une cellule un menu déroulant dans lequel apparaît le nom de chaque site, ainsi que "TOUS", parce que je voudrai pouvoir faire apparaître le tableau en totalité si aucun site n'est sélectionné.

    Après des essais infructueux par l'utilisation de AutoFilter, j'ai fouillé ici et ai trouvé le tuto sur les filtres avancés (2012 de Philippe Tulliez). J'ai donc créé un critère sous forme de formule où C1 est la cellule du menu déroulant et C3;D3;E3 les premières lignes renseignées du tableau de données (la formule étant : =OU(C3=$C$1;D3=$C$1;E3=$C$1)).

    Pour ensuite écrire le code suivant qui marche mais qui m'affiche, au fur et à mesure que je l'utilise, de moins en moins de lignes. Pour finir par un message d'erreur 1004 d'abord sur l'événement ShowAllData et ensuite sur la nécessité d'avoir au moins deux lignes dans le fichier source pour pouvoir exécuter la macro. Et c'est là où je bute et que je sollicite votre aide, parce que je n'arrive pas à trouver dans ce que j'ai écris, ce qui peut créer perte (ou ce que je n'écris pas, comme une condition pour arrêter la macro mais à quel moment ?)

    Bref, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim menu As String
        If Not Intersect(Target, Range("C1")) Is Nothing Then
        Application.ScreenUpdating = False
        menu = Range("C1").Value
            If menu = "TOUS" Then
            ActiveSheet.ShowAllData
            Else
            Range("A2:E" & [A65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("G2:G3"), Unique:=False
            End If
     
        Application.ScreenUpdating = True
        End If
        End Sub
    Je suis désolée d'avoir été un peu longue, j'ai essayé de circonstancier la situation. Dans tous les cas, je remercie par avance ceux qui reprendront le temps de lire, et parmi eux, ceux qui prendront le temps de répondre.

    Merci

    Didi

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Exemples en PJ

    Sans fichier, difficile de comprendre la question.

    boisgontier
    Fichiers attachés Fichiers attachés

  3. #3
    Nouveau candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2018
    Messages : 2
    Par défaut Merci !
    Bonsoir,

    Tout d'abord je voudrai vous remercier d'avoir pris le temps de me répondre.

    Ensuite je suis navrée pour mon temps de réaction mais je ne suis pas passée au travers de cette satanée grippe. Bref.

    J'ai profité du repos imposé pour consulter vos exemples, bien plus élaborés que les miens, qui m'ont permis de trouver ce qui n'allait pas dans mon code.

    Le ShowAllData ne pouvant fonctionner que s'il y a un filtre, il suffisait de tester la condition.

    Grand merci à vous pour la logique et à un collègue qui maîtrise le "jargon".

    Si toutefois ça peut intéresser quelqu'un je mets ici-bas le code et le fichier joint en exemple.

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim menu As String
            If Not Intersect(Target, Range("C1")) Is Nothing Then
                Application.ScreenUpdating = False
     
                If ActiveSheet.FilterMode Then
                    ActiveSheet.ShowAllData
                End If
     
                menu = Range("C1").Value
                If menu <> "TOUS" Then
                    Range("A2:E" & [A65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("G2:G3"), Unique:=False
                End If
     
                Application.ScreenUpdating = True
            End If
        End Sub
    Merci encore et je vous souhaite une belle soirée.

    Didi
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [XL-2010] Copier colonne d'un onglet sur l'autre mais dans un ordre différent
    Par Bleue dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/03/2014, 19h14
  2. [XL-2003] Condition sur des critères basés dans une autre feuille
    Par logiclogic dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/08/2010, 04h51
  3. [6.5] Filtrer sur 2 critères
    Par lenka33 dans le forum Débuter
    Réponses: 5
    Dernier message: 28/07/2009, 07h37
  4. Filtrer sur les données vides dans un formulaire
    Par jevany dans le forum Access
    Réponses: 7
    Dernier message: 29/05/2006, 08h50
  5. Trier sur n critères (ou dimensions, ou colonnes?)
    Par sbeu dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 10/10/2004, 10h43

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