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 sur dates


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut Filtre sur dates
    Bonjour à tous,

    J'ai trois cas de figure pour extraire une durée avec JourDépart et JourFin, limité par le 01/01/2012 comme borne inférieure et par le 31/12/2012 comme borne supérieure :

    1) Un étendu qui commence le mois passé et prend fin le mois en cours.

    Exp : du 25/11/2012 au 24/12/2012

    Alors : JourDépart = 01/01/2012, JourFin = 24/12/2012

    Durée = 24 j dans le mois de décembre.

    2) Un étendu qui commence le mois en cours et prend fin le mois même.

    Exp : du 02/12/2012 au 17/12/2012

    Alors : JourDépart = 02/12/2012, JourFin = 17/12/2012

    Durée = 16 j dans le mois de décembre.

    3) Un étendu qui commence le mois en cours et prend fin le mois suivant.

    Exp : du 28/12/2012 au 17/12/2012

    Alors : JourDépart = 28/12/2012, JourFin = 31/12/2012
    Durée = 4 j dans le mois de décembre.

    En résumé, je ne définirais les extrémités de ma durée, depuis les étendus de dates, qu'avec les jours communs du mois de décembre et ceux des jours des étendus (les intersections des jours).

    J’aimerais ajouter une condition dans le critère du champ 3 pour m’extraire les dates en colonne C qui ont le mois égal ou inférieur au mois en cours (<=12), et dans le critère du champ 4 pour m’extraire les dates en colonne D qui ont le mois égal ou supérieur au mois en cours (>=12).

    Dans la colonne C, j’aurais des dates avec le mois de novembre (??/11/2012) et décembre (??/12/2012).

    Dans la colonne D, j’aurais des dates avec le mois de décembre (??/12/2012) et janvier 2013 (??/01/2013).

    Mais avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Filtre()
        Dim NbLg As Long
        Dim Plg As Range
        If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
     
        NbLg = Range("A2").End(xlDown).Row
     
        Set Plg = Range("A1:E" & NbLg)
        With Plg
            .AutoFilter field:=3, Criteria1:=">=" & CSng(CDate("01/12/2012"))
            .AutoFilter field:=4, Criteria1:="<=" & CSng(CDate("31/12/2012"))
        End With
    End Sub
    Le filtre est toujours nul

    Alors, comment résoudre cette problématique ?

    Merci d’avance.

  2. #2
    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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    A la lecture du code donc sans avoir testé, il semblerait qu'il manque la fonction AND
    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

  3. #3
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour Philippe,

    Le AND pour les deux colonnes ?

    et on ajoutera quoi comme condition après ?

    Bonsoir,

    En PJ, un exemple avec le résultat voulu.

    Le filtre automatique est appliqué en deux fois sur deux colonnes C ensuite D, pour permettre d'extraire les dates de chaque colonne est de remplir un deuxième tableau qui me servira dans un autre traitement.

    Seulement j’ai du mal à avoir mon 2ème tableau !

    J’espère que l’exemple sera plus explicite

    Merci de votre aide.
    Fichiers attachés Fichiers attachés

  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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je te suggère l'utilisation des filtres avancés appelé aussi élaborés.
    La zone Data contenant au moins les deux colonnes dates y compris leurs étiquettes nommée db et commencant en A1
    En E1 la date (1er jour du mois)
    La zone des critères (exemple H1:H2 et nommé dbCriteria
    En H1, étiquette Formule, en H2, la formule ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(($B4>=E$1)*($A4<=FIN.MOIS(E$1;0)) )
    Le code VBA à placer dans l'objet de la feuille où se trouve la zone à filtrer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    Function Filter(lst As Range, criteria As Range)
     lst.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=criteria ', Unique:=False
    End Function
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Address = "$E$1" Then
       Debug.Print Filter(Range("db"), Range("dbCriteria"))
      End If
    End Sub
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Target.Address = "$E$1" And ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
    End Sub
    Fichiers attachés Fichiers attachés
    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
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour Philippe,

    En essayant d'adapter ton code, sur mes données, je n'ai pas réussi à avoir le troisième tableau en bas dans l'exemple en pièce jointe ?

    Merci.
    Fichiers attachés Fichiers attachés

  6. #6
    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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Dans la zone de critères je vois déjà un problème dans la formule se trouvant en C2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(($B2>=G$1)*($A2<=FIN.MOIS(G$1;0)) )
    La zone data couvre la plage A2:F10. Les étiquettes Date Début & Fin sont en $C$2:$D$2 et la première ligne de données est en ligne 3 donc la formule devrait faire référence à C2 et D2
    La formule pour la date devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET($D3>=H$1;$C3<=FIN.MOIS(H$1;0))
    De plus dans le code tu vérifies si la cellule E1 est modifiée comme je l'avais initialement prévue mais comme tu as déplacé la liste de choix à G2 il faut changer l'adresse Target aussi.
    Comme il y a deux choix, Date et Type je préfère pour ma part une autre approche.
    Dès que j'aurai l'occasion je mettrai un autre classeur avec ma suggestion.
    En résumé quand il y a une formule comme critère, la formule doit renvoyer VRAI ou FAUX et doit faire référence à la première ligne data de la liste des données, ici ligne 3 (Etiquettes en ligne 2).
    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

Discussions similaires

  1. MySQL + c++ builder : Filtre sur date inposible
    Par fpascal dans le forum MySQL
    Réponses: 8
    Dernier message: 09/10/2008, 09h46
  2. [BOXI] Problème de filtre sur date
    Par Julien59 dans le forum Deski
    Réponses: 6
    Dernier message: 10/06/2008, 10h25
  3. Filtre sur date du jour + date du jour+1
    Par pierrot67 dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/05/2007, 07h21
  4. Problème de filtre sur date avec ADOQuery
    Par lingli dans le forum Bases de données
    Réponses: 12
    Dernier message: 30/04/2006, 15h40
  5. Filtre sur date
    Par MagicManu dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/08/2005, 00h05

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