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 par une variable [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 0
    Points
    0
    Par défaut FILTRE par une variable
    bonjour à tous,

    j'essaye depuis un certain temps de réaliser un filtre par une variable qui contient plusieurs variables...

    criteria1:=array(variable), avec variable qui est une composition de plusieurs variables.

    Je vous ai joins un fichier excel avec ma problématique.
    Le but serait d'afficher seulement les termes bonjour, voiture et méditerranée dans une variable (que l'on va appeler variable) et que j'appelle lorsque je fais mon filtre.

    Merci de votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Tb
     
    Tb = Array("bonjour", "méditerranée", "voiture")
    Feuil1.Range("B1:B20").AutoFilter Field:=1, Criteria1:=Tb, Operator:=xlFilterValues
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Je précise que mon but est de mettre une variable dans Array.
    Merci tout de même.

  4. #4
    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 907
    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 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Citation Envoyé par fidoust Voir le message
    Bonjour,
    Je précise que mon but est de mettre une variable dans Array.
    Merci tout de même.
    La proposition faites par Mercatog utilise un Array
    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

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    sa réponse remplaçait le array.

    Je souhaite mettre une variable entre les parenthèse de array, plus précisement : Array(variable) avec variable qui comprend par exemple boujour, méditerranée ou d'autres valeurs.

    Ma question repose sur la composition de variable pour que lorsque je lance le array(variable) Excel comprenne les différents mots que je souhaites filtrer.

    cordialement,

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Qu'est ce que tu as dans variable? et quel est sont type?

    Tu dis
    avec variable qui est une composition de plusieurs variables
    Ensuite
    avec variable qui comprend par exemple boujour, méditerranée ou d'autres valeurs.
    Il t'est difficile d'être plus clair dans ta formulation de la demande?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    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 907
    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 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par fidoust Voir le message
    Bonsoir,
    sa réponse remplaçait le array.
    Je souhaite mettre une variable entre les parenthèse de array, plus précisement : Array(variable) avec variable qui comprend par exemple boujour, méditerranée ou d'autres valeurs.
    cordialement,
    Un exemple ci-dessous mais qui n'ajoute rien à la réponse de Mercatog.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Dim myTable, Elem As Integer
     Dim Var1 As String, Var2 As String
     Var1 = "Bonjour": Var2 = "Hello"
     myTable = Array(Var1, Var2)
     For Elem = 0 To UBound(myTable)
      MsgBox myTable(Elem)
     Next
    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

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Bonjour à tous,

    je vais tenter de reprendre ma problématique car elle n'est pas claire.

    Dans un programme que j'essaye de monter, en sélectionnant une cellule, il va calculer certaines choses et va en sortir plusieurs variables string.

    Il peut y en avoir une, deux... ou quinze. A partir de ce (ou ces) variable(s) sortie(s), j'aimerai les mettre dans un filtre. Mais ne sachant pas combien il y en aura, je ne peux composer un array (var1, var2) car cela me limite à deux variables.

    Mon but est de "construire" une variable ("variable") unique qui sera alimentée par les variables sorties de ma sélection : "var1", "var2", etc.

    je souhaiterai avoir : Array(Variable), avec Variable = "var1", "var2", etc.

    Seulement, je ne parviens pas à trouver la bonne notation dans Variable pour que le filtre comprenne ma demande. Dois-je mettre des guillemets, des virgules, des points-virgules entre les var ?

    Dans l'exemple que j'ai donné lors de mon premier poste, je souhaitais construire Variable avec des mots comme bonjour, méditerranée.

    j'aimerai savoir comment écrire Variable = "bonjour", "méditerranée", "alarme" pour ensuite dans mon code lui dire : Filtre .... Array(Variable).

    Voilà, j'espère avoir été plus clair.

    Merci.

  9. #9
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Autant dès le départ travailler avec une variable tableau au lieu de var1, var2..... ça m'étonne ta démarche. Tu ne sais pas au préalable combien tu as de variables! et si tu aurait besoin de 1000 variables, comment serait le code?

    Sinon, continuer dans une voie tordue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Dim Mot As String
    Dim Tb
     
    Mot = "bonjour,méditerranée,voiture"
    Tb = Split(Mot, ",")
    Feuil1.Range("B1:B20").AutoFilter Field:=1, Criteria1:=Tb, Operator:=xlFilterValues
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 0
    Points
    0
    Par défaut un cas concret
    Voici un cas concret.

    Je sélectionne dans une base de donnée un type de plaquette de frein. Ce dernier peut se monter sur 15 véhicules différents.
    Je sélectionne un deuxième type de plaquette. Celle-ci ne se monte que sur un seul véhicule.

    Je suis capable de sortir le ou les noms des véhicules sur lesquels les plaquettes peuvent être montées. Toutefois, je ne veux pas faire du cas par cas. Imaginez que j'ai 25 types de plaquettes de frein dans ma BDN.

    c'est pour cela que je souhaitais construire une variable qui se construit des noms des véhicules "sorties" de ma sélection. et de faire un filtre à partir de cette variable.

    Merci bien.

  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 907
    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 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il y a tellement de possibilités pour arriver à un résultat que pour pouvoir donner une aide pertinente, il est important de savoir comment sont construites tes listes de données.
    Où et comment le programme peut "construire" la variable tableau qui va ensuite servir au filtrage ?
    Est-ce le résultat du filtre (par exemple une référence de plaquette) qui construit une variable tableau contenant les marques de voitures ?
    Voici deux exemples de filtres basés sur le filtre simple d'excel avec une approche différente pour gérer un Array. Il y en a encore d'autres
    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
    Option Explicit
    Dim oList As ListObject
    Sub Main()
     Set oList = ThisWorkbook.Worksheets("db").ListObjects("Liste1")
     Exemple1
     Exemple2
    End Sub
    Sub Exemple1()
     With oList.Range
     .AutoFilter Field:=10, Criteria1:=Array("BMW", "VW", "Mercedes"), Operator:=xlFilterValues
     End With
    End Sub
    Sub Exemple2()
     Dim myList() As String, rng As Range, count As Integer
     For Each rng In Range("tblFilter")
      ReDim Preserve myList(count): myList(count) = rng: count = count + 1
     Next
     With oList.Range
      .AutoFilter Field:=10, Criteria1:=myList, Operator:=xlFilterValues
     End With
    End Sub
    Range("tblFilter") est une plage nommée
    ListObjects("Liste1") Liste1 est le nom du tableau présent dans la feuille [db]

    Quelques liens à lire sur le sujet
    Utiliser les variables tableaux en VBA Excel
    Conceptualisation des variables tableau en VBA et Application à l'optimisation du code sous Excel
    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
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Pour mes données, elles sont stockées dans une cellule.
    Lorsque je clique sur l'élément, il va chercher dans une cellule les véhicules.
    Ils sont annotés comme suit :
    BMW, Volkswagen, Peugeot etc.

  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 907
    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 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par fidoust Voir le message
    Pour mes données, elles sont stockées dans une cellule.
    Lorsque je clique sur l'élément, il va chercher dans une cellule les véhicules.
    Ils sont annotés comme suit :
    BMW, Volkswagen, Peugeot etc.
    Ce n'est pas de la mauvaise volonté mais ce n'est toujours pas clair pour moi.
    J'ai d'abord compris que dans une cellule se trouvaient les noms séparés par une virgule comme par exemple : BMW, Volkswagen, Peugeot et servaient de paramètres au filtre mais à la relecture je pense que non.
    Pour mes données, elles sont stockées dans une cellule
    Toutes tes données se trouvent dans une cellule ?
    Ensuite tu écris "Lorsque je clique sur l'élément, il va chercher dans une cellule les véhicules." Quel élément ?
    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

  14. #14
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour Philippe
    Je vais emprunter ta signature
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    A force de demander des éclaircissements, en reçoit des télégrammes incomplets. En fin de compte c'est son problème.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Ce n'est pas de la mauvaise volonté mais ce n'est toujours pas clair pour moi.
    J'ai d'abord compris que dans une cellule se trouvaient les noms séparés par une virgule comme par exemple : BMW, Volkswagen, Peugeot et servaient de paramètres au filtre mais à la relecture je pense que non.
    C'est tout à fait ça.

    Lorsque je clique sur le type de plaquette que je souhaite, le code va chercher dans une autre feuille une cellule bien précise qui comprend les véhicules.
    Dans cette cellule, les noms des véhicules sont écrits : BMW, Volkswagen, Peugeot.

  16. #16
    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 907
    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 907
    Points : 28 882
    Points
    28 882
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Et bien il suffit d'utiliser la fonction Split (voir explication sur cette fonction)
    Exemple 3 (A ajouter dans le code montrer plus haut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Exemple3()
     With oList.Range
      .AutoFilter Field:=10, Criteria1:=Split(Range("pFilter"), ","), Operator:=xlFilterValues
     End With
    End Sub
    Dans l'exemple pFilter est une cellule nommée ayant comme valeur par exemple Skoda, Mazda
    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

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Et bien, c'est exactement ça !!! Merci Beaucoup !

    je t'enverrai une bonne boutanche !

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

Discussions similaires

  1. problème macro et filtre automatique par une variable texte
    Par Drozo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/08/2007, 09h05
  2. [XSLT] probleme de resultat retourné par une variable
    Par coucouA dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 16/08/2006, 11h05
  3. valeur d'un champ text modifié par une variable en parametre
    Par klimero dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 21/04/2006, 10h39
  4. [XML] specifier la DTD par une variable d'environnement
    Par xxiemeciel dans le forum Valider
    Réponses: 2
    Dernier message: 20/03/2006, 16h28
  5. Réponses: 3
    Dernier message: 11/12/2005, 11h15

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