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 Filtre avancé plages variables [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Supply Chain analyst
    Inscrit en
    Octobre 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Supply Chain analyst

    Informations forums :
    Inscription : Octobre 2021
    Messages : 26
    Par défaut VBA Filtre avancé plages variables
    Bonjour,

    Je travaille sur une macro ayant pour objectif de filtrer une base de données de taille variable avec une plage de critères de taille variable (Il s'agit d'une colonne commençant en B6 et se terminant en Bxxx où xxx est u numéro de ligne variable.

    Ci-dessous le code que j'utilise actuellement mais qui ne fonctionne pas comme je le souhaiterais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Filtre_Avancé()
     
     
        Workbooks("classeur1.xlsx").Sheets("Feuil1").Range("A4:AG2052").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
    Workbooks("Feuil1").Worksheets("Feuil2").Range("B5", ActiveSheet.Range("B5").End(xlDown)), unique:=False
     
    Range("A4").Select
     
     
    End Sub
    1) Je ne parviens pas à ajouter le caractère variable lors de la sélection de la base de donnée dans le classeur 1. Sachant que la BDD commence toujours en A4.(Ligne d'en-tête)
    2) Excel ne reconnait pas la zone de critères variables dans le classeur 2 feuille 2.

    j'obtiens une erreur d'exécution 1004.

    Auriez-vous une piste svp ?

    Je vous en remercie par avance

    Valentin

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Feuil1").Worksheets("Feuil2").Range("B5", ActiveSheet.Range("B5").End(xlDown))
    Vous mélangez deux syntaxes possibles de la méthode Range.
    L'erreur que vous obtenez est probablement liée au fait que, lorsque vous lancez votre macro, la feuille active n'est pas la feuille 2 du classeur Feuil1.
    Au passage, vous avez vraiment un classeur qui s'appelle Feuil1 ou bien est-ce une coquille ?

    Plusieurs corrections sont envisageables. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Rng as Range
    Set Rng = Workbooks("Feuil1").Worksheets("Feuil2").Range("B5")
    Workbooks("classeur1.xlsx").Sheets("Feuil1").Range("A4:AG2052").AdvancedFilter Action:=xlFilterInPlace, _
          CriteriaRange:= Range(Rng, Rng.End(xlDown)), Unique:=False
    Pour le "caractère variable", je ne suis pas certain de comprendre votre besoin. S'agit-il de déterminer programmatiquement le numéro de la dernière ligne de votre tableau ?

    Cdt

  3. #3
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 287
    Par défaut
    Salut
    En L6 Workbooks("Feuil1") versus Workbooks("classeur1.xlsx").
    Pour l'aspect géométrie variable d'une plage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Rng As Range
    Set Rng = Worksheets("Feuil1").Range(Cells(1, 1), Cells(Range("A" & Rows.Count).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column))
    Debug.Print Rng.Address

  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 169
    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 169
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne peux que vous conseiller l'usage des tableaux structurés qui ont par définition une plage dynamique. Cependant il est possible d'utiliser la propriété CurrentRegion pour obtenir la région courante d'une cellule

    Exemple en utilisant le CodeName de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub t()
      Dim rngSource As Range
      Set rngSource = sht_DataBase.Range("B4").CurrentRegion
      MsgBox "Adresse des données " & rngSource.Address(External:=True)
    End Sub

    A lire éventuellement

    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
    Membre averti
    Homme Profil pro
    Supply Chain analyst
    Inscrit en
    Octobre 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Supply Chain analyst

    Informations forums :
    Inscription : Octobre 2021
    Messages : 26
    Par défaut
    Je vous remercie tous les trois pour votre vos réponses.
    Voici le code mis à jour avec les noms de classeurs et feuilles ajustés.



    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 filtre_DV3()
     
    Dim RngBDD As Range
    Dim Rng As Range
     
    Set RngBDD = Worksheets("Feuil1").Range(Cells(4, 1), Cells(Range("A" & Rows.Count).End(xlUp).Row, Cells(4, Columns.Count).End(xlToLeft).Column))
    Debug.Print RngBDD.Address
     
    MsgBox (RngBDD.Address)
    'Jusque là tout est bon, l'adresse de RngBDD est bonne.
     
     
    Set Rng = Workbooks("Classeur2.xlsx").Worksheets("Feuil2").Range("B5")
    Workbooks("Classeur1.xlsx").Sheets("Feuil1").Range("RngBDD").AdvancedFilter Action:=xlFilterInPlace, _
          CriteriaRange:=Range(Rng, Rng.End(xlDown)), Unique:=False
     
    'Remplacer l'addresse brute par RngBDD, cela bloque.
     
    End Sub
    Les corrections de macro envoyées marchent individuellement en revanche comme expliqué brièvement dans le code, une fois que je remplace l'adresse brute par RngBDD alors le code ne fonctionne plus. J'ai essayé avec et sans guillemets sans voir de différence.

    Qu'est ce que j'ai oublié de faire ou d'ajouter svp ?

    Je me renseignerai dans un deuxième temps sur les tableaux. J'aimerai réussir dans un premier temps avec ces macros là

    Merci d'avance

  6. #6
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Les deux syntaxes les plus courantes pour utiliser Range :
    1. Sht.Range(<String>)
    2. Range(<Range>, <Range>)

    Pour la 1-, Sht doit être un identificateur valide d'une feuille de calcul.
    <String> est une chaîne de caractères (je ne traite pas ici du format L1C1...) qui, si l'on souhaite faire référence à une plage plutôt qu'à une cellule unique, contient deux références de cellule séparées par deux points ":".
    Cette chaîne de caractères peut être obtenue par concaténation.

    Pour la syntaxe 2-, chacun des <Range> représente un objet Range (idéalement, ne contenant chacun qu'une seule cellule, cela clarifie la syntaxe).
    Ces deux objets Range doivent faire référence à des cellules situées sur la même feuille du même classeur.

    Notez qu'il existe d'autres variantes pour la syntaxe de Range.

  7. #7
    Membre averti
    Homme Profil pro
    Supply Chain analyst
    Inscrit en
    Octobre 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Supply Chain analyst

    Informations forums :
    Inscription : Octobre 2021
    Messages : 26
    Par défaut
    Bonjour Ben_L,

    Je vous remercie pour votre message

    Cordialement

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/10/2020, 11h50
  2. [XL-2007] Étendre une formule à l'aide de VBA sur une plage variable
    Par cyril7751 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/07/2012, 16h23
  3. VBA - Graphique avec plage variable
    Par virstyle dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2010, 11h48
  4. [XL-2007] Filtre avancé - Multicritères variables
    Par sunstrike69 dans le forum Excel
    Réponses: 1
    Dernier message: 30/12/2009, 17h50
  5. [VBA-E] selection plage + filtre auto
    Par noug dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/05/2006, 15h57

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