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 en vba dans deux colonnes a la fois [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut Filtre en vba dans deux colonnes a la fois
    bonjour
    SVP j'ai un tableau ou une plage de A2:D.....
    le filtre est uniquement dans les colonnes C et D
    dans la cellule B1 j’écris la valeur de filtre
    comment en VBA lorsque j’écris en B1 la valeur de filtre le tableau affiche cette valeur dans la colonne C et D et si la cellule B1 est vide j’obtiens mon tableau sans filtre
    merci beaucoup

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Le code suivant filtre uniquement les lignes qui contiennent B1 en colonne C et D. Si tu voulais les ligne contenant B1 en C ou D, dis-le.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test1()
        With ActiveSheet
            If .[B1] = "" Then
                .AutoFiltermode=false
            Else
                .Range(.[A2], .Cells(.Rows.Count, 4).End(xlUp)).AutoFilter 3, .[B1]
                .Range(.[A2], .Cells(.Rows.Count, 4).End(xlUp)).AutoFilter 4, .[B1]
            End If
        End With
    End Sub
    Si tu veux que le filtre change automatiquement quand la valeur de B1 change, mets la macro suivante dans le module de la feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address <> "$B$1" Then Exit Sub
        With ActiveSheet
            If .[B1] = "" Then
                .AutoFilterMode = False
            Else
                .Range(.[A2], .Cells(.Rows.Count, 4).End(xlUp)).AutoFilter 3, .[B1]
                .Range(.[A2], .Cells(.Rows.Count, 4).End(xlUp)).AutoFilter 4, .[B1]
            End If
        End With
    End Sub

  3. #3
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut
    merci beaucoup Mr Daniel
    et SVP pour le C ou D comment .

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Regarde le classeur joint; il y a 3 façons de faire :

    1. feuille "Filtre auto"
    Avec un filtre automatique, en ajoutant un colonne (E) avec la formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(OU(C3=$B$1;D3=$B$1);1;0)
    en E3, à recopier vers le bas. Le code filtre les 1 de la colonne ajoutée, dans le module feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address <> "$B$1" Then Exit Sub
        With ActiveSheet
            If .[B1] = "" Then
                .AutoFilterMode = False
            Else
                .Range(.[A2], .Cells(.Rows.Count, 5).End(xlUp)).AutoFilter 5, 1
            End If
        End With
    End Sub
    2. feuille "Filtre avancé 1" avec un filtre avancé. la zone de critères définie en F2:G4 signifie B1 en C ou D. Code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address <> "$B$1" Then Exit Sub
        With ActiveSheet
            If .[B1] = "" Then
                .ShowAllData
            Else
                .Range(.[A2], .Cells(.Rows.Count, 4).End(xlUp)).AdvancedFilter xlFilterInPlace, .Range("F2:G4")
            End If
        End With
    End Sub

    3. feuille "Filtre avancé 2" également avec un filtre avancé. On définit ici un champ calculé dans la zone de critères :

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address <> "$B$1" Then Exit Sub
        With ActiveSheet
            If .[B1] = "" Then
                .ShowAllData
            Else
                .Range(.[A2], .Cells(.Rows.Count, 4).End(xlUp)).AdvancedFilter xlFilterInPlace, .Range("F2:F3")
            End If
        End With
    End Sub
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut
    merci mon ami tu mérite 5 étoiles
    merci beaucoup

  6. #6
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut bonjour
    bonjour
    SVP j'ai un tous petit problème si je ne mettre rien dans F2 et F3 le code ne fonction pas
    voici mon fichier démo
    Fichiers attachés Fichiers attachés

  7. #7
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour iliesss,
    Bonjour Daniel,

    Tu as peut-être intérêt à ne pas utiliser un filtre mais effectuer un simple masquage des lignes.
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Ligne As Long, DerLigne As Long
        If Target.Address <> "$B$1" Then Exit Sub
        Application.ScreenUpdating = False
        With ActiveSheet
            DerLigne = .UsedRange.Rows.Count
            If Target = "" Then
                .Rows("3:" & DerLigne).Hidden = False
            Else
                For Ligne = DerLigne To 3 Step -1
                    If .Range("C" & Ligne) = Target Or .Range("D" & Ligne) = Target Then
                        Rows(Ligne).Hidden = False
                    Else
                        Rows(Ligne).Hidden = True
                    End If
                Next Ligne
            End If
        End With
        Range("B1").Select
    End Sub
    Cordialement.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Filtré par rapport a deux colonnes dans un JTable
    Par wagui26 dans le forum Débuter
    Réponses: 3
    Dernier message: 08/05/2012, 10h49
  2. [XL-2003] Erreur requête SQL en VBA dans Excel : colonne contenant des chiffres et des lettres
    Par Sergeith dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 04/08/2009, 13h49
  3. Réponses: 6
    Dernier message: 23/10/2007, 15h01
  4. Réponses: 6
    Dernier message: 29/08/2007, 06h49
  5. Recherche VBA dans plusieurs colonnes.
    Par madchemiker dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/07/2007, 13h09

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