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 automatique qui perd l'accès au menu déroulant par VBA [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut Filtre automatique qui perd l'accès au menu déroulant par VBA
    Bonjour,
    je me suis battu avec des heures avec un code VBA identique sur 2 feuilles mais qui se comporte différemment.
    J'ai créé des cellules de recherche en haut d'une liste afin que par un évènement Worksheet_Change(ByVal Target As Range), je récupère le contenu de la cellule où j'ai tapé du texte, puis j'active le filtre automatique sur la colonne concernée.
    J'ai aussi fait en sorte d'annuler le filtre sur une colonne quand la case de recherche est vidée. Et là, j'ai un problème énorme !La suppression du filtre sur une colonne laisse le filtre auto visible (flèches) mais on n'a plus accès au menu déroulant en cliquant sur les flèches ... et la recherche devient inactive.
    Avez-vous une idée du problème ? Que puis-je fournir pour aider ?
    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Avec un petit fichier joint, c'est plus facile. Avoir un oeil sur le code est plus aisé pour vous aider.
    Merci par avance
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut
    Ma feuille concernée a pour codename "ListeBT" que j'utilise dans une fonction personnalisée de protection ou déprotection de la page.
    C'est le dernier ElseIF qui désactive le filtre !

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Dim msg, txt, contenu As String
    'DEBUT
        Application.ScreenUpdating = False
    'si modif d'un autre champ que ceux de recherche
        On Error Resume Next
        If Target.Row <> 7 Or Target.Column > 6 Then
            Exit Sub
    'Sinon si champ de recherche non vide
        ElseIf Target <> "" Then
            Call Deproteger(ListeBT)
            Range("TitreListeBT").Select
            txt = "*" & Target.Value & "*"
            Select Case Target.Name.Name     'recherche dans la liste sur colonnes
                Case "rechbt1": Selection.AutoFilter Field:=1, Criteria1:=txt, Operator:=xlAnd
                Case "rechbt2": Selection.AutoFilter Field:=2, Criteria1:=txt, Operator:=xlAnd
                Case "rechbt3": Selection.AutoFilter Field:=3, Criteria1:=txt, Operator:=xlAnd
                Case "rechbt4": Selection.AutoFilter Field:=4, Criteria1:=txt, Operator:=xlAnd
                Case "rechbt5": Selection.AutoFilter Field:=5, Criteria1:=txt, Operator:=xlAnd
                Case "rechbt6": txt = Mid(Target.Value, 1, 2) & "/" & Mid(Target.Value, 4, 2) & "/" & Mid(Target.Value, 9, 2)
                    Selection.AutoFilter Field:=6, Criteria1:=txt, Operator:=xlAnd  'traitement spécial pour date !!
            End Select
            Target.Select
    'Sinon si champ de recherche vide
        ElseIf Target = "" Then
            Call Deproteger(ListeBT)
            Range("TitreListeBT").Select
            Select Case Target.Name.Name
                Case "rechbt1": Selection.AutoFilter Field:=1
                Case "rechbt2": Selection.AutoFilter Field:=2
                Case "rechbt3": Selection.AutoFilter Field:=3
                Case "rechbt4": Selection.AutoFilter Field:=4
                Case "rechbt5": Selection.AutoFilter Field:=5
                Case "rechbt6": Selection.AutoFilter Field:=6
            End Select
            Target.Select
        End If
    'FIN
        Application.ScreenUpdating = True
        Call Proteger(ListeBT)
    End Sub

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Peut-être que dans Format - Protection - Faut-il cocher la case qui autorise l'utilisation des filtres automatiques.
    Ce n'est juste qu'une idée
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  5. #5
    Membre du Club
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut
    L'option "Utiliser le filtre automatique" est bien activée à la protection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Proteger(sht As Worksheet)
        sht.Protect Password:="aielc", DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=False, AllowFormattingColumns:=False, _
        AllowFormattingRows:=False, AllowSorting:=False, AllowFiltering:=True, UserInterfaceOnly:=True
        ActiveWindow.Zoom = 85
    End Sub
    C'est vraiment la première fois que je rencontre ce problème. Le plus étonnant est qu'un autre fichier Excel utilisant exactement le même code avec une colonnes en moins dans la liste fonctionne parfaitement.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    J'ai cette macro qui fonctionne. Apparament vous avez fait à-peu-près la même chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
       ActiveSheet.Protect DrawingObjects:=False, Contents:=False, Scenarios:=False, AllowFiltering:=True
    End Sub
    à part cette différence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sht.Protect Password:="aielc",
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  7. #7
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour

    Il me semblait que pour retirer un filtre , il fallait juste mettre "selection autofilter"
    Pourriez vous essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ElseIf Target = "" Then
            Call Deproteger(ListeBT)
            Range("TitreListeBT").Select
            Select Case Target.Name.Name
                Case "rechbt1": Selection.AutoFilter 
                Case "rechbt2": Selection.AutoFilter 
                Case "rechbt3": Selection.AutoFilter 
                Case "rechbt4": Selection.AutoFilter 
                Case "rechbt5": Selection.AutoFilter 
                Case "rechbt6": Selection.AutoFilter

  8. #8
    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 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il me semblait que pour retirer un filtre , il fallait juste mettre "selection autofilter"
    C'est exact.
    La méthode AutoFilter de l'objet Range permet d'activer ou désactiver un filtre.
    Cependant il est parfaitement inutile d'utiliser le Select et Selection en plus cela ralenti l'exécution du code. C'est répété à maintes reprises sur ce forum.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shtDb.Range("E1").AutoFilter
    shtDb est le CodeName de la feuille.
    Pour effacer les filtres on peut utiliser la méthode ShowAllData de l'objet WorkSheet. Cependant si aucun filtre n'est activé une erreur est renvoyée. Il est donc préférable de faire précéder ce code par l'instruction On Error
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On Error Resume Next: shtDb.ShowAllData: On Error GoTo 0
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre du Club
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut
    De retour au boulot ce matin, je constate des aides supplémentaires, merci.

    Pour la dernière suggestion, je prend la remarque d'enlever la sélection, l'autre de mes fichiers qui fonctionne n'a pas cette ligne effectivement.

    Par contre pour le Selection.autofilter tout simplement, je ne prends pas car j'ai 6 cases de recherche qui permettent de faire une recherche multi-colonnes. Quand je vide un champ, j'enlève le filtre sur la colonne correspondante, mais je ne peux enlever tout le filtre.

  10. #10
    Membre du Club
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut
    De toute façon, le vrai problème est que dès la suppression du filtre sur la liste, je n'ai plus accès au menu déroulant sur chaque flèche du filtre automatique. Et ça c'est un vrai mystère !

  11. #11
    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 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par lightstring4 Voir le message
    De toute façon, le vrai problème est que dès la suppression du filtre sur la liste, je n'ai plus accès au menu déroulant sur chaque flèche du filtre automatique. Et ça c'est un vrai mystère !
    Cette instruction active/désactive le filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHTdB.Range("A1:J1").AutoFilter
    Celle-ci efface le filtre de la colonne 7 et le filtre reste activé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHTdB.Range("A1:J1").AutoFilter field:=7
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  12. #12
    Membre du Club
    Homme Profil pro
    Chef de projet ERP
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet ERP

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut
    Merci, ça a marché.
    C'est bien la sélection qui posait problème. J'ai essayé avec une structure With ... End With pour optimiser mais ça plante comme avant
    Je ne comprends toujours pas pourquoi sur l'autre fichier ça marchait bien mais bon c'est pas important.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Select Case Target.Name.Name 
                Case "rechbt1": Range("TitreListeBT").AutoFilter Field:=1
                Case "rechbt2": Range("TitreListeBT").AutoFilter Field:=2
                Case "rechbt3": Range("TitreListeBT").AutoFilter Field:=3
                Case "rechbt4": Range("TitreListeBT").AutoFilter Field:=4
                Case "rechbt5": Range("TitreListeBT").AutoFilter Field:=5
                Case "rechbt6": Range("TitreListeBT").AutoFilter Field:=6
            End Select
            Target.Select

  13. #13
    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 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Attention que si tu veux enlever tout les filtres, il y a une autre instruction que j'ai donné lors de ma première intervention sur cette discussion.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On Error Resume Next: shtDb.ShowAllData: On Error GoTo 0
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Filtre automatique qui ne s'active pas
    Par Lyndils dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/07/2015, 23h38
  2. Comment fixer une applet Java qui bouge à cause d'un menu déroulant ?
    Par Beginner. dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 11/02/2013, 15h31
  3. Creer un filtre automatique qui utilise une variable de type string
    Par Esmax666 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/06/2009, 13h53
  4. Comment remplir un menu déroulant avec VBA ??
    Par souheil59 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 17/11/2008, 22h19
  5. Menu déroulant par dessus tableau
    Par M1000 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/12/2005, 15h14

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