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 automatique avec 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 automatique avec vba
    Bonjour,

    Grâce à joe.levrai et aux membres du forum j'ai beaucoup avancé sur mon projet mais je suis encore confronté à une autre difficulté malheureusement, je souhaite filtrer les dates du début de l'année en cours jusqu'au mois précédent, le code suivant fait un filtre uniquement sur le mois précédent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                Range("A1").AutoFilter c.Column, xlFilterThisMonth + 1, xlFilterDynamic
    et celui ci sur l'année en cours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                Range("A1").AutoFilter c.Column, xlFilterThisYear, xlFilterDynamic
    J'ai pensé à faire ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                Range("A1").AutoFilter c.Column, xlFilterThisYear, xlAnd, xlFilterThisMonth + 1, xlFilterDynamic
    Mais cela ne fonctionne pas

    Comment pourrais-je filtrer du début de l'année en cours au mois précédent, par exemple de Janvier à Juin, parce que nous sommes en Juillet. Est ce possible en appliquant les filtres dynamiques ?

    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,

    comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim DateDebut As Date
    Dim DateFin As Date
     
    DateDebut = "01/01/" & Year(Date)
    DateFin = "01/" & Month(Date) & "/" & Year(Date)
     
    With Range("A1")
        .AutoFilter c.Column, ">=" & DateDebut, xlAnd, "<" & Format(DateFin, "mm/dd/yyyy")
    End With

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour a tous.
    Ca fonctionnerait probablement mieux en utilisant un type Long ou Double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dte = Year(Date)
     Dim debut As Long, fin As Long
        debut = DateSerial(dte, 1, 1)
        fin = DateSerial(dte, 6, 30)
        Range("A1").AutoFilter Field:=c.Column, Criteria1:=">=" & debut, Operator:=xlAnd, Criteria2:="<=" & fin

  4. #4
    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
    Avant tout, merci pour votre disponibilité.

    Je vous présente mon code final qui fait le tri et par la suite le copie dans une autre feuille de calcul :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
     
    Sub Creerfichier_reseauencourstarife2015()
     
    Sheets("en cours liste complète réseau").Activate
    Dim ListeTitre()
    Dim ListeParam()
    Dim DateDebut As Date
    Dim DateFin As Date
     
    DateDebut = "01/01/" & Year(Date)
    DateFin = "01/" & Month(Date) & "/" & Year(Date)
     
    ListeTitre = Array("Code_Delegation", "Statut_Etude", "Date_1ereTarification")
    ListeParam = Array("<>DGEN*", Array("3", "4", "5", "6"))
     
     If Month(Now()) = 1 Then
        For i = LBound(ListeTitre) To UBound(ListeTitre)
            Set c = Nothing
            Set c = Rows(1).Find(ListeTitre(i), , xlValues, xlWhole)
            If Not c Is Nothing Then
                If i <= UBound(ListeParam) Then
                   Range("A1").AutoFilter c.Column, ListeParam(i), xlFilterValues
               Else
                    Range("A1").AutoFilter c.Column, xlFilterLastYear, xlFilterDynamic
                End If
            End If
        Next i
        ' on boucle sur chaque colonne cherchée
        ' et on filtre sur son paramètre dédié
      Else
        For i = LBound(ListeTitre) To UBound(ListeTitre)
            Set c = Nothing
            Set c = Rows(1).Find(ListeTitre(i), , xlValues, xlWhole)
            If Not c Is Nothing Then
                If i <= UBound(ListeParam) Then
                    Range("A1").AutoFilter c.Column, ListeParam(i), xlFilterValues
                Else
                    Range("A1").AutoFilter c.Column, ">=" & DateDebut, xlAnd, "<" & Format(DateFin, "mm/dd/yyyy")
                End If
            End If
        Next i
    End If    
        Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)).Copy
        Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = "réseau en cours tarifé 2015"
        ActiveSheet.Paste
        Application.CutCopyMode = False
     
    End Sub
    J'ai une erreur qui me dit impossible d'exécuter le code en mode arrêt lorsque je l’affecte à un bouton. Il fonctionne bien lorsque je l'exécute directement. Qu'est ce que ça veut dire ? Après analyse, l'erreur viendrait de ce bout de code :



    Cordialement

  5. #5
    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
    Salut Docmarti

    ahhhh c'est certains de tes posts que je cherchais hier je pense ... ceux dans lesquels tu expliquais à la perfection les instructions les plus fiables pour les manipulations de dates entre VBA et Excel

    je pensais que c'était Daniel.C

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Salut joe.levrai

    Je suis sensible à ton appréciation du résultat de mes recherches concernant les manipulations de dates entre VBA et Excel.

    Ca a peut-être servi à quelque chose car les questions récurrentes à ce sujet sont devenues rarissimes.

    Par contre, pour ce qui est des filtres, je n'en suis pas un des spécialistes.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je n'en finirai pas de dire les dates au format internationale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Dim debut As string, fin As string 
        debut = ">" & Year(Date) -1 & "-12-31"
    fin = "<" & format("yyyy-mm-01")
        Range("A1").AutoFilter Field:=c.Column, Criteria1:=  debut, Operator:=xlAnd, Criteria2:= fin

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

Discussions similaires

  1. Filtre automatique avec VBA
    Par aziz1015 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 20/07/2015, 22h17
  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. [Toutes versions] Filtre automatique avec vba
    Par sabzzz dans le forum Contribuez
    Réponses: 0
    Dernier message: 13/04/2010, 21h17
  4. [VBA-E] Problème Filtre automatique
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/05/2007, 14h58
  5. Filtre automatique en VBA
    Par kikou44 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/07/2006, 21h24

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