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 :

VBA - AdvancedFilter : Question sur CriteriaRange [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juillet 2023
    Messages : 8
    Par défaut VBA - AdvancedFilter : Question sur CriteriaRange
    Bonjour à tous,

    Pour un projet VBA et l'utilisation d'un userform, j'utilise la fonction "AdvancedFilter" dans une classe Module, voici un extrait du programme :

    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
     
    Sub filtreAvance1()
     
        'Déclaration des variables
        Dim rgDonnees As Range
        Dim rgCritere As Range
        Dim rgDestination As Range
     
        'Affectation des variables
        Set rgDonnees = Feuil4.Range("A1").CurrentRegion 'Feuil4 est un tableau correspondant à ma "base de données"
        Set rgCritere = Feuil3.Range("I1").CurrentRegion 'Feuil3 est ma feuille "Liste" où sont définis entre autre les tableaux de critère et listes pour combobox de l'userform
        Set rgDestination = Feuil2.Range("A1") 
     
        'Suppression l'ancien filtre
        Feuil2.Cells.ClearContents
     
        'Exécute l'outil FiltreAvancee
        rgDonnees.AdvancedFilter xlFilterCopy, rgCritere, rgDestination
     
    End Sub
    Avec ce programme, je souhaite filtrer ma base de données (Feuil4) avec un numéro de série particulier en guise de critère et copier le résultat du filtre dans la "Feuil2".
    rgCritère est donc un tableau dont l'en-tête est "Numéro de série" et dont l'unique ligne correspond au numéro de série cherché (type String).
    Dans l'utilisation de mon userform, voici l'extrait du code qui appelle cette fonction de filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Feuil3.Range("I2").Value = txtSN.Value 'On copie le SN à la cellule I2 de la feuille "Liste"
    Call filtreAvance1
    Cela fonctionne correctement mais pour simplifier mon fichier excel, j'aimerai supprimer la feuille "Liste" et je cherche un moyen de me passer de la première ligne du 2ème code (Feuil3.Range("I2").Value = txtSN.Value).
    Est-ce possible de définir "rgCritere" sans sélectionner une plage de cellules ? Dans l'idéal je souhaiterai avoir :
    rgCritere = {"Numéro de série"; numSerie} où numSerie serait une variable publique dont j'affecterai la valeur de "txtSN.Value". Cela m'éviterai de "copier" la valeur dans la feuille Liste puis de lire cette valeur dans la fonction de filtre.

    Je débute sur VBA, merci pour vos retours,

    En espérant que vous ayiez compris ma demande

    Bonne journée

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 161
    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 : 13 161
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne suis pas certain d'avoir compris.
    La zone de critère d'un filtre avancé doit contenir au minimum un titre et un critère et ce dans dans deux cellules distinctes situées l'une en dessous de l'autre. Cette plage peut être nommée à l'aide du gestionnaire des noms et peut se situer dans n'importe quelle feuille du classeur.
    Vous pouvez bien entendu associer le critère à une liste déroulante et intercepter l'événement pour lancer l'exportation.

    Pour en savoir plus, je vous invite à lire mon tutoriel sur le sujet Les filtres avancés ou élaborés dans 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

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juillet 2023
    Messages : 8
    Par défaut
    Bonjour,

    Merci pour votre retour.

    Mon problème concerne la définition de la zone de critère, je voulais savoir s'il était possible d'écrire quelques chose comme rgCritere = tab('titre du critère' ; 'numéro de série critère').
    J'aimerai que la plage ne soit pas stockée sur une des feuilles comme c'est le cas actuellement (feuille 'Liste') mais définis uniquement dans le programme VBA. Je cherche donc à savoir si je peux me passer de la feuille 'Liste'. Je sais qu'en argument, CriteriaRange doit être de type "Range", un 'Range' ne peut être défini qu'à partir de cellules d'une feuille de calcul ? Ne peut-on pas définir un range sans faire référence à des cellules ? Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim tableau(1)
    tableau(0) = "Numéro de série" 'titre du critère
    tableau(1) = txtSN.Value 'critère que l'utilisateur a entré dans l'userform
    J'ai lu votre tutoriel, merci mais je ne trouve pas la réponse à ma question.

  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
    13 161
    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 : 13 161
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Non, ce n'est pas possible. Il faut stocker le critère dans une plage de cellules mais rien ne vous empêche de cacher la feuille.
    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. {VBA Excel}Questions sur la creation graphique
    Par ferronimus dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/08/2007, 10h37
  2. [VBA-E] Question sur les Array de plages
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/06/2007, 15h14
  3. [VBA-E] Question sur image dans userform ?
    Par damsmut dans le forum Excel
    Réponses: 3
    Dernier message: 04/04/2007, 05h32
  4. [VBA-Excel] Question sur les Treeview
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/12/2006, 16h21
  5. [VBA-E] Question sur la méthode "SaveAs"
    Par Flateric dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/04/2005, 14h18

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