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 avec filtre multicritères en fonction de la cellule active [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut VBA avec filtre multicritères en fonction de la cellule active
    Bonjour,

    Après pas mal de recherches et tentatives infructueuses, je me décide à faire appel à vos connaissances.
    En effet, sur un tableau excel avec une colonne A sur laquelle figurent des sommes, je souhaite écrire une macro avec un filtre à 3 critères :
    Le 1er et le 2ème utilisent le critère "Entre", calculé à partir de la valeur de la cellule active (de A3 à A100) avec une tolérance indiquée dans la cellule A1 (exemple : coeff 1.2)
    Le 3ème critère doit permettre d'afficher aussi les cellules vides.
    Exemple, je veux afficher les valeurs entre 833€ (1000/1.2) et 1200€ (1000*1.2) et les cellules vides de la colonne A.
    Ci dessous le code que je pensais utiliser mais il ne fonctionne pas car fait appel à 3 critère au lieu de 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       ThisWorkbook.Sheets("Feuille1").Range("A2").AutoFilter Field:=1, Criteria1:=">=" & Range("A" & ActiveCell.Row).Value / Range("A1").Value, Operator:=xlAnd, Criteria2:="<=" & Range("A" & ActiveCell.Row).Value * Range("A1").Value, Operator:=xlor, Criteria3:=""
    Merci de me proposer des solutions pour régler mon problème

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    Bonjour
    une tentative de réponse
    Hypothèse :
    En A1 = coefficient (Exemple 1.2)
    En A2 = la valeur de recherche initiale
    En B1 je calcule la limite inférieure qui est égal à A2/A1 en remplaçant le virgule par un point avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSTITUE(A2/A1;",";".")
    En B2 je calcule la limite supérieure qui est égal à A2*A1 toujours en remplaçant le virgule par un point :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSTITUE(A2*A1;",";".")
    puis je filtre avec le code suivant :
    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 filtrerDonnées()
    Application.ScreenUpdating = False
      Dim DerligF1 As Long
      Dim F1 As Worksheet
      Dim LimInf As String
      Dim LimSup As String
      Set F1 = Sheets("Feuil1")
      With F1
      If Not .AutoFilter Is Nothing Then
          If .FilterMode Then .ShowAllData
          .AutoFilter.Range.AutoFilter
        End If
      DerligF1 = .Cells(Rows.Count, 1).End(xlUp).Row
      LimInf = .Range("B1").Value
      LimSup = .Range("B2").Value
    F1.Range("A3 : A" & DerligF1).AutoFilter Field:=1, Criteria1:=">" & LimInf, Operator:=xlAnd, Criteria2:="<" & LimSup
    End With
    Application.ScreenUpdating = True
    End Sub
    j'espère que ça t'aide à avancer sachant que je suis qu'un autodidacte et peut être y a de chemin moins court
    Ci joint un petit exemple
    Bonne continuation
    Fichiers attachés Fichiers attachés
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour Bennasr,
    Merci pour cette réponse rapide et ta proposition.
    En fait, le problème que je n'arrive pas à résoudre est de rajouter une troisième condition à mon filtre, celle qui rajoute les cellules vides.
    J'ai oublié de préciser que j'ai crée un tableau dans ma feuille afin de limiter la plage des données filtrées. Le code que j'ai indiqué fonctionne correctement pour les 2 filtres numériques "entre" mais si je rajoute le troisième, il n'est pas pris en compte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Filter()  
       ThisWorkbook.Sheets("Feuil1").Range("A2").AutoFilter Field:=1, Criteria1:=">=" & Range("a" & ActiveCell.Row).Value / Range("A1").Value, Operator:=xlAnd, Criteria2:="<=" & Range("A" & ActiveCell.Row).Value * Range("A1").Value
    End Sub
    Voir le fichier joint avec les 2 premiers filtres, mais j'aurais souhaité afficher en plus les cellules vides (3ème critère)
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    bonsoir
    je comprends mieux mais à cause de mon niveau de débutant je propose le bricolage suivant
    Envoyé la valeur de la cellule active à B1
    ajouter une formule en colonne B pour vérifier si la valeur est comprise entre les deux intervalles OU la cellule est vide, dans ce cas mettre 1 si non ne mettez rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SI(OU(ET([@Colonne1]>$B$1/$A$1;[@Colonne1]<$B$1*$A$1);[@Colonne1]="");1;0)
    puis filtrer sur cette colonne B avec valeur égale à 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Filter()
    Application.ScreenUpdating = False
       Range("B1").Value = Range("a" & ActiveCell.Row)
       ThisWorkbook.Sheets("Feuil1").Range("A2").AutoFilter Field:=2, Criteria1:="1"
    Application.ScreenUpdating = True
    End Sub
    à tester
    Fichiers attachés Fichiers attachés
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  5. #5
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,

    Je viens de tester (avec un peu de retard) le code de Bennasr et cela fonctionne bien.
    Le résultat correspond bien à ce que je souhaitais. L'ajout d'une nouvelle colonne ne pose pas réellement de problème.
    Je note donc le problème comme "résolu".
    Un grand MERCI à Bennasr pour le temps consacré et le partage de ses compétences.

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

Discussions similaires

  1. [XL-2010] Sélection d'une plage ou lignes en fonction de la cellule active
    Par HERMY dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 29/09/2018, 12h02
  2. [XL-2016] Enregistrement au format PDF avec page variable en fonction d'une cellule
    Par chialouse dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/02/2018, 20h09
  3. Réponses: 9
    Dernier message: 09/03/2017, 23h03
  4. boucle en VBA avec activecell.formula et fonction hyperlink
    Par polo92 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/10/2014, 12h59
  5. [VBA-E]suppression lignes a partir d'une cellule active
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/02/2007, 15h01

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