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 :

Problème filtre VBA [XL-2007]


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
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut Problème filtre VBA
    Bonjour,

    Je n'arrive pas à faire des filtres automatiques en VBA sur une colonne qui contient "VRAI" ou "FAUX" ! Est ce normal ?
    Il est bien marqué "est égal à VRAI" mais rien ne s'affiche ! Sauriez vous pourquoi ? Je procède comme suit pour faire le filtre !

    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
    Set WsSource = ThisWorkbook.Worksheets("total réseau hors CR " & Year(Fin))
    Set WsCible = ThisWorkbook.Sheets("Données")
     
    Nbl = WsSource.Range("A1").CurrentRegion.Rows.Count
     
    Set myRange = WsSource.Range("A2:A" & Nbl)
     
     With WsSource
            Set d = Nothing
            Set d = .Rows(1).Find("Date_1ereTarification", , xlValues, xlWhole)
            If Not d Is Nothing Then .Range("A1").AutoFilter d.Column, DateMD, xlAnd, DateMF
     
            Set e = Nothing
            Set e = .Rows(1).Find("IsKaliviaSante", , xlValues, xlWhole)
            If Not e Is Nothing Then .Range("A1").AutoFilter e.Column, "VRAI"
     
    '        WsCible.Range("D9").Value = Application.WorksheetFunction.Subtotal(3, myRange)
    Aussi, j'ai testé une solution, c'est à dire compter le nombre de lignes pour lesquelles les cellules correspondent à ce que je veux mais elle ne fonctionne pas je pense que je m'y prends mal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Deb et Fin correspondent à des dates
     
    With WsSource
        For i = 1 To Nbl
            If (.Cells(i, d.Column) > Deb And .Cells(i, d.Column) < Fin) And .Cells(i, e.Column) = "VRAI" Then Cpt = Cpt + 1
        Next i
    End With
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    au premier filtre (sur les dates), tu remontes bien des lignes ?


    concernant te second code, c'est normal que VRAI ne soit pas encadré d'apostrophes ?
    tu as vérifié que ton test sur les dates ne pose pas de problème ? (inversion mois et jours par exemple ... format de cellule etc...)

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Merci Joe pour ton intérêt,

    Oui je remonte bien les lignes parce que lorsque je ne fais pas de filtre en prenant en compte la colonne avec les cellules VRAI ou FAUX, j'ai toutes les lignes qui apparaissent.

    Pour le deuxième, Même avec des parenthèses, lorsque j'affiche le compteur après, le msgbox est vide !

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    en l'état je ne vois pas ce qui bloque

    un petit fichier exemple reproduisant le comportement indésirable ?
    sinon je sèche et passe la main aux plus doués que moi (c'est à dire presque tout le monde )

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Voilà pour vous :

    ClasseurTEST.xlsm

    Merci pour votre aide

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Ta procédure lignesC qui filtre sous deux critères (1ere tarification et IsKaliviaSante) fonctionne très bien, je remonte les lignes contenant VRAI

    Ta procédure lignes (la boucle pour compter les vrai) ne peux pas fonctionner pour 3 raisons :

    - ta variable Nbl n'est pas calculée
    - tu compares des dates (valeur de tes cellules) avec des String (tes variables Deb et Fin) ==> il faut convertir le String en Date (en utilisant CDate(Deb) par exemple)
    - concernant les cellules contenant "VRAI", tu as deux solutions différentes (là tu as mélangé les deux) :
    * si tu ne renseigne pas la propriété voulue de ta cellule, par défaut VBA prendra .Value ==>tu dois utiliser l'opérateur Booléen TRUE pour comparer
    * si tu veux utiliser "VRAI", il faut renseigner la propriété .Text de ta cellule

    ce qui donne :

    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
    22
    23
    24
    25
    26
    27
    28
    Sub lignes()
    Dim Cpt
    Dim d As Range
    Dim e As Range
    Dim i As Long
    Dim WsSource As Worksheet
    Dim Nbl As Long
     
    Call DateRec
    Set WsSource = ThisWorkbook.Worksheets("Feuil1")
     
    With WsSource
        Nbl = .Range("A1").CurrentRegion.Rows.Count
        Set d = Nothing: Set d = .Rows(1).Find("Date_1ereTarification", , xlValues, xlWhole)
        Set e = Nothing: Set e = .Rows(1).Find("IsKaliviaSante", , xlValues, xlWhole)
     
        For i = 2 To Nbl
            If .Cells(i, d.Column) > CDate(Deb) _
            And .Cells(i, d.Column) < CDate(Fin) _
            And .Cells(i, e.Column).Text = "VRAI" Then   ' ou  .Cells(i, e.Column) = True
                Cpt = Cpt + 1
            End If
        Next i
    End With
     
    MsgBox Cpt
     
    End Sub
    Ps : tes variables déclarées en début de module sont mal déclarées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Deb, Fin, Deb_M, Fin_M As Date
    Dim DateD, DateF, DateMD, DateMF As String
    seuls Fin_M et DateMF ont un type .. les autres sont considérés comme des Variant

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Par défaut
    Bonjour,

    Essaie comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not e Is Nothing Then .Range("A1").AutoFilter e.Column, True
    Edit : Arf je n'avais pas vu que la solution a déjà été donnée plus haut !

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

Discussions similaires

  1. [XL-2007] Problème filtre automatique avec vba
    Par aziz1015 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 22/07/2015, 16h52
  2. [XL-2010] Problème Filtre avancé avec VBA
    Par jppnancy dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 12/04/2015, 10h35
  3. Problème filtre VBA
    Par clorion91 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/06/2013, 22h35
  4. Problème envoi par mail des cellules filtrées VBA
    Par Miguel973 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/03/2011, 11h12
  5. [VBA-E] Problème Filtre automatique
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/05/2007, 14h58

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