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 :

Filtrage d'une base par VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Par défaut Filtrage d'une base par VBA
    Bonjour à tous,

    Je voudrais filtrer une base de données se trouvant dans un onglet d'un classeur Excel.
    J'ai utilisé le générateur de macros d'Excel pour voir ce qu'il proposait.
    Ci-après la commande que je voudrais adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveSheet.Range("$A$1:$AL$32283").AutoFilter Field:=1, _
        Criteria1:=Array("CNEDEG", "CNEDSL", "CNETEL"), Operator:=xlFilterValues
    .

    Mon soucis est de remplacer ce qui est dans la parenthèse du "Array" par une variable contenant les différentes valeurs de filtrage.

    Toutes mes tentatives se sont soldées par un échec. Le code ne génère pas d'erreur mais le filtrage ne restitue aucune ligne car les valeurs en question ne sont pas cochées.

    Quelqu'un a-t-il une idée de la façon d'opérer ?

    Merci d'avance.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Par défaut
    Quel est l'idée du filtrage? masquer des lignes qui ne te concerne pas.

    Donc plutot que d'utiliser le filtre automatique, pour quoi ne pas faire une boucle qui va masquer les lignes qui ne contiennent pas tes criteres?

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 100
    Par défaut
    Bonjour Coconut2,

    Ben justement, c'est ce que j'avais fait au départ ou quelque chose d'approchant.

    Le problème c'est que les valeurs que je mets dans les parenthèses sont à choisir parmi une liste de 300 environ. La base représente environ 20.000 lignes. Autant dire que ça rame. A cela il faut ajouter 4 autres clés de filtrage dont deux sont du même tonneau que la première. Quand je lance mon filtrage, j'ai le temps de boire un café (à force, le taux de caféïne dans le sang monte et mon micro est en danger ).

    C'est pour cela que je cherche à utiliser le filtrage d'Excel.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Par défaut
    Mantenant il faut savoir comment tu récupères les valeurs de filtrage (Listbox dans un userform?)

    Tu stockes ces valeurs dans des variables (mavar1, mavar2...)

    puis enfin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Criterial:=Array(mavar1, mavar2, mavar3)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 21
    Par défaut Filtre sous vba
    Bonjour,

    Tu peux charger la variable qui permet de filtre, avant de la stocker dans ton 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
    Sub CommandButton_Click()
     
    'Dans un onglet que j'appelle test, je stocke ma variable (tu peux la filtrer et trier avant au cas où tu as des doublons):
     
        Dim myvar(1 To 65000) As Variant
         lastRow = Sheets("test").Range("A65536").End(xlUp).Row
            j = 1
            For i = 2 To lastRow
                myvar(j) = Sheets("test").Cells(i, 1).Value '(1 correspond à ta colonne A)
                j = j + 1
            Next i
     
    'Dans le fichier global, j'applique mon filtre:
    Sheets("fichier_global").Select
    Selection.AutoFilter
     
        Sheets("fichier_global").Range("$A$1:$L$65536").AutoFilter Field:=1, Criteria1:=myvar, Operator:=xlFilterValues
     
    End sub

Discussions similaires

  1. Modifier propriété <source base> d'une requête par VBA ou SQL?
    Par 1010titi dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 26/11/2008, 21h16
  2. [MySQL] Modification des données d'une base par les membres
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 22/03/2006, 17h25
  3. autorisation et acces a une base par utilisateur
    Par azde7015 dans le forum Access
    Réponses: 1
    Dernier message: 09/02/2006, 16h08
  4. copie d'une base par snapshot
    Par sljv dans le forum Oracle
    Réponses: 1
    Dernier message: 24/10/2005, 06h32
  5. Réponses: 2
    Dernier message: 11/10/2005, 09h15

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