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 :

Problème avec filtrage de données


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    technicien
    Inscrit en
    Juillet 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2016
    Messages : 51
    Points : 42
    Points
    42
    Par défaut Problème avec filtrage de données
    Bonjour a tous,
    je travail sur un fichier excel permettant de tenir a jour les membres d'une association sportive
    Pour facilité son utilisation a une personne ne maitrisant pas du tout l'informatique je souhaiterais venir filtrer certaines colonnes de mon tableau excel via une UserForm.
    Cette UserForm regroupe plusieurs possibilités de filtres.
    Ma problématique est que lorsque que je choisis un filtre via mon userform et que je souhaite en appliquer un autre concernant une autre colonne il garde le précédant en mémoire
    je cherche donc le moyen réinitialiser le filtre a chaque choix.
    J'ai essayer plusieurs solution de code en m'inspirant des enregistrements de macro mais sans sucés.
    Voici pour l'instant le code que j'ai fait :
    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
    'bouton filtre enfant'
    Private Sub CommandButton1_Click()
    Range("$A8:$A500").Select 'choisit colonne A (catégorie)'
    Selection.AutoFilter Field:=1, Criteria1:="Enfant" 'applique le filtre enfant'
    Unload Me 'ferme la boite de dialogue'
    End Sub
    'bouton filtre Adulte'
    Private Sub CommandButton2_Click()
    Range("$A8:$A500").Select 'choisit colonne A (catégorie)'
    Selection.AutoFilter Field:=1, Criteria1:="Adulte" 'applique le filtre Adulte'
    Unload Me 'ferme la boite de dialogue'
    End Sub
    'bouton filtre tous les membres'
    Private Sub CommandButton3_Click()
    Cells.Select
    Selection.AutoFilter
    Unload Me
    End Sub
    'bouton filtre particulier'
    Private Sub CommandButton4_Click()
    Range("$H8:$H500").Select 'choisit colonne H (Regime)'
    Selection.AutoFilter Field:=1, Criteria1:="Particulier" 'applique le filtre Particulier'
    Unload Me
    End Sub
    'bouton filtre Normal'
    Private Sub CommandButton5_Click()
    Range("$H8:$H500").Select 'choisit colonne H (Regime)'
    Selection.AutoFilter Field:=1, Criteria1:="Normal" 'applique le filtre Normal'
    Unload Me
    End Sub
    Merci pour aide

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 083
    Points : 9 870
    Points
    9 870
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    la méthode Autofilter, si elle n'est pas accompagnée des paramètres de la colonne et des valeurs à filtrer ... revient à effacer le filtre en place

    ainsi, cette ligne

    1) si les filtres automatiques sont activés avec un filtrage déjà en place : va effacer les critères déjà en place
    2) si les filtres automatiques sont activés SANS filtrage déjà en place : va supprimer le mode filtrage (les petites flèches sur tes en-têtes vont disparaître)
    3) si les filtres automatiques ne sont pas activés : va mettre en place le filtre automatique (apparition des petites flèches sur tes en-têtes)


    Attention cependant à éviter d'utiliser Selection, il est préférable de faire référence à la première cellule de ton tableau
    Si par exemple tes titres commencent en A1, on peut très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Worksheets("NomDeFeuille").Range("A1")
        .Autofilter ' on supprime le filtrage en place
        .Autofilter 1, "toto"  ' on filtre en colonne A les lignes contenant "toto"
    End With
    D'autres méthodes possibles en utilisant AutofilterMode et ShowAllData...

  3. #3
    Membre du Club
    Homme Profil pro
    technicien
    Inscrit en
    Juillet 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2016
    Messages : 51
    Points : 42
    Points
    42
    Par défaut
    Merci pour ta réponse
    j'ai oublié de préciser que j'étais plus que débutant dans le langage VB et informatique

    j'ai rajouté une ligne
    avant la sélection de ma colonne a trier et cela fonctionne
    voila mon code modifié
    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
    'bouton filtre enfant'
    Private Sub CommandButton1_Click()
    Range("$A8:$A500").Select 'choisit colonne A (catégorie)'
    Selection.AutoFilter 'suprime les filtre si existant'
    Selection.AutoFilter Field:=1, Criteria1:="Enfant" 'applique le filtre enfant'
    Unload Me 'ferme la boite de dialogue'
    End Sub
    'bouton filtre Adulte'
    Private Sub CommandButton2_Click()
    Range("$A8:$A500").Select 'choisit colonne A (catégorie)'
    Selection.AutoFilter 'suprime les filtre si existant'
    Selection.AutoFilter Field:=1, Criteria1:="Adulte" 'applique le filtre Adulte'
    Unload Me 'ferme la boite de dialogue'
    End Sub
    'bouton filtre tous les membres'
    Private Sub CommandButton3_Click()
    Cells.Select
    Selection.AutoFilter
    Unload Me
    End Sub
    'bouton filtre particulier'
    Private Sub CommandButton4_Click()
    Range("$H8:$H500").Select 'choisit colonne H (Regime)'
    Selection.AutoFilter 'suprime les filtre si existant'
    Selection.AutoFilter Field:=1, Criteria1:="Particulier" 'applique le filtre Particulier'
    Unload Me
    End Sub
    'bouton filtre Normal'
    Private Sub CommandButton5_Click()
    Range("$H8:$H500").Select 'choisit colonne H (Regime)'
    Selection.AutoFilter 'suprime les filtre si existant'
    Selection.AutoFilter Field:=1, Criteria1:="Normal" 'applique le filtre Normal'
    Unload Me
    End Sub
    Par contre je n'ai pas très bien compris la deuxième partie de ton code pour la sélection de la colonne a filtrer

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 083
    Points : 9 870
    Points
    9 870
    Billets dans le blog
    5
    Par défaut
    Selection représente la plage de données qui est actuellement sélectionnée

    Dans ton code, tu procèdes toujours de la sorte :

    1) sélectionner une plage
    2) travailler sur la plage active

    Cela est inutile et génère :

    1) un temps de traitement rallongé
    2) une mauvaise habitude qui peu jouer des tour, si par exemple la plage sélectionnée n'est pas la bonne

    Ainsi, voici ton fonctionnement de façon schématique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A1").Select ' je sélectionne A1
    Selection.Value = 1  ' dans la cellule sélectionné, j'écris le chiffre 1
    Tu peux simplifier comme ça :



    En reprenant cette explication, voici une partie de ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_Click()
    Range("$A8:$A500").Select 'choisit colonne A (catégorie)'
    Selection.AutoFilter 'suprime les filtre si existant'
    Selection.AutoFilter Field:=1, Criteria1:="Enfant" 'applique le filtre enfant'
    Unload Me 'ferme la boite de dialogue'
    End Sub
    Tu sélectionnes des cellules dans la colonne A, tu utilises la Selection pour faire le filtre

    En simplifiant, on obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Range("A8")  ' With évite d'écrire plusieurs fois Range("A8")
        .Autofilter   ' je raccroche Autofilter à Range("A8") grâce au point placé devant
        .Autofilter 1, "Enfant" ' j'applique sur la première colonne (donc la colonne A) un filtre sur le mot "Enfant"
    End With ' on ferme le bloc With qui permettait de ne pas réécrire Range("A8")
     
    Unload Me ' Femerture du Userform

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Pour facilité son utilisation a une personne ne maitrisant pas du tout l'informatique je souhaiterais venir filtrer certaines colonnes de mon tableau excel via une UserForm.
    ça ne serait pas plus façile pour les utilisateurs si plutôt que de filtrer, le UserForm faisait le travail?

    si ça t'inspires!
    http://www.developpez.net/forums/d14...e/#post7819625

  6. #6
    Membre du Club
    Homme Profil pro
    technicien
    Inscrit en
    Juillet 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2016
    Messages : 51
    Points : 42
    Points
    42
    Par défaut
    Jo je crois avoir compris la démarche je vais méditer tous ça ce week-end.
    rdurupt en effet cela m'inspire beaucoup ma prochaine étape était d'essayer de récupérer, pour pouvoir les modifier, les information lié a un membre dans ma base. Je vais donc essayer m’inspirer de ce que tu as fait.

    Merci a vous pour ces informations et surtout de prendre le temps d'expliquer des choses surement très basique a un néophyte comme moi
    il me reste plus qu'a travailler
    Encore merci

Discussions similaires

  1. Problème de filtrage de données avec listbox
    Par nic79 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/09/2008, 22h48
  2. [MySQL] Problème avec affichage des données d'une base MySQL
    Par leclone dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/12/2006, 12h40
  3. Problème avec type de données
    Par yancimer dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/09/2006, 16h54
  4. [MySQL] Problème avec base de données
    Par ThAOTh dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 10/08/2006, 13h42
  5. Access Problème avec mise à jour données
    Par Yanmeunier dans le forum Access
    Réponses: 2
    Dernier message: 30/03/2006, 16h05

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