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 à partir d'un choix multiple à travers une liste ds Usf [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut Filtre à partir d'un choix multiple à travers une liste ds Usf
    Bonjour,
    J'ai quelques pb avec mon code ; j'ai repris celui de Delfphine : [URL="http://www.developpez.net/forums/d967997/logiciels/microsoft-office/excel/macros-vba-excel/filtre-plusieurs-criteres/#post5431951"]http://www.developpez.net/forums/ano...a4ad7da073f879[/URL]
    1 - J'ai voulu ajouter une ligne pour supprimer les filtres existants, cela ne fonctionne pas à chaque fois et bugue si le filtre est vide (sélectionner tout est décoché et toutes les données sont également décochées - la table ne contient donc que les titres)
    Pourtant j'ai déjà utilisé ce code et il fonctionnait ; faut-il s'y prendre autrement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Supprime les filtres existants
    If Sheets("BdD").FilterMode = True Then Sheets("BdD").ShowAllData
    j'ai également essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.ShowAllData
    Message d'erreur : "La méthode ShowAllData a échoué"

    2- Si dans ma zone de critère, j'ai un chiffre et qu'il est sélectionné, il n'est pas pris dans le filtre ; je ne comprends pas pourquoi, car en mode pas à pas, il est bien intégré dans la variable tableau(j)
    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
    Private Sub CbtOk_Click()
    Dim Nb As Byte, i As Byte, j As Byte
    Dim tableau(1 To 100) As Variant
    'Supprime les filtres existants
    If Sheets("BdD").FilterMode = True Then Sheets("BdD").ShowAllData
    'Calcul du Nb de ligne de la liste
    Nb = UserForm1.ListBox1.ListCount
    j = 1   'index des sélections
    For i = 0 To Nb - 1 'Pour chaque ligne de la liste
    'si elle est sélectionnée
    If UserForm1.ListBox1.Selected(i) Then  'Boolean
        'on cré un tableau virtuel des sélections
       tableau(j) = UserForm1.ListBox1.List(i)
       j = j + 1
    End If
    Next i
    'si aucune sélection n'est faite, on considère qu'elles le sont toutes
    If j = 1 Then MsgBox "faites un choix ou annuler": Exit Sub
    'Debug.Print tableau.Value
    Worksheets(1).Range("BdD").AutoFilter Field:=3, Criteria1:=tableau, Operator:=xlFilterValues
    End Sub
    Merci pour votre aide

  2. #2
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Salut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 - J'ai voulu ajouter une ligne pour supprimer les filtres existants, cela ne fonctionne pas à chaque fois et bugue si le filtre est vide (sélectionner tout est décoché et toutes les données sont également décochées - la table ne contient donc que les titres)
    Qu'est ce qui bug. Le test dans la condition if, ou l'instruction ?

    Envisage une solution avec AutoFilter .

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour mouftie,

    je ne sais pas si c'était le propos exact de NVCfrm quand il parlait de Autofilter, mais pour effacer (s'ils existent) d'éventuels filtres automatiques, j'ai toujours pris l'habitude (mauvaise selon certains) de précéder l'application de nouveaux filtres par un bête Autofilter "vide"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With MaFeuille.Range("A1")
        .Autofilter
        .Autofilter 1, "toto"
    End With
    S'il y avait des filtres en place : ça les enlève
    S'il n'y en avait pas : ça "affiche" les flèches du filtre automatique, mais sans aucun critère de filtrage

    Je n'ai jamais réussi à "aimer" l'utilisation du FilterMode et ShowAllData, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With MaFeuille
        If .FilterMode Then .ShowAllData
        .Range("A1").AutoFilter 1, "toto"
    End With

    Pour le second point, quand tu dis que le chiffre n'est pas pris dans le filtre, est-il à minima présent dans ton tableau "tableau" ?
    Est un nombre (une variable numérique) ou une chaine de caractère contenant des chiffres ?
    Il me semble que si tu mélanges des chiffres et des lettres, tu dois passer tes chiffres en String, sinon ton Autofilter ne va pas utiliser les deux "types" en raison de l'incompatibilité entre les filtres textuels et les filtres numériques

    EDIT : pour illustrer mon propos, je viens de réaliser ceci

    Ma colonne A contient des chiffres et des lettres

    Si j'utilise ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub rir()
    Dim Tabl()
    Tabl = Array("1", "2", "titi")
    With ActiveSheet
        .Range("A1").AutoFilter 1, Tabl, xlFilterValues
    End With
    End Sub
    Mes "chiffres" sont bien filtrés

    Mais si je lui passe des "vrais" chiffres, je n'ai que titi qui reste après le filtrage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub rir()
    Dim Tabl()
    Tabl = Array(1, 2, "titi")
    With ActiveSheet
        .Range("A1").AutoFilter 1, Tabl, xlFilterValues
    End With
    End Sub

  4. #4
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut
    Bonjour Ousmane et Joe et merci de vos réponses.
    Pour le point 1, les explications et la proposition de Joe me convienne parfaitement, après plusieurs essais, cela fonctionne à tous les coups ; la méthode "ShowAllData" est vraiment aléatoire...

    Pour le point 2, Joe, tu as encore raison, il s'agit bien d'un chiffre numérique parmi des chaînes textes. j'ai ajouté à ma liste un '6 (donc 6 en texte), celui la est bien filtré par ma procédure.
    Alors comment faire pour filtre des chiffres et des chaînes ? surtout que c'est possible manuellement.
    Merci

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Si ta colonne contient des chiffres et des lettres, alors traite tes chiffres comme des chaines lors du filtrage

    Qu'est-ce qui s'opposerait à ce traitement dans ton projet ? Puisque c'est uniquement côté VBA que tu les traites en tant que String

    Ca ne t'empêchera pas ensuite de pouvoir manipuler tes chiffres comme des vrais nombres

  6. #6
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut
    Merci Joe,
    Si ça peut servir, j'ai utilisé le convertisseur en texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       tableau(j) = CStr(UserForm1.ListBox1.List(i))
    Merci beaucoup Joe, Bonne fin de journée

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/05/2014, 20h21
  2. choix multiples dans une liste déroulante
    Par luffy2mars dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/01/2009, 16h34
  3. Utilisation des choix d'une zdl à choix multiples pour une requête
    Par Nanouche dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 10/10/2007, 02h57
  4. Choix multiple sur une listbox
    Par david71 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 10/07/2007, 16h35
  5. Réponses: 1
    Dernier message: 24/04/2006, 01h55

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