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 :

Filtrer une date dans un tableau structuré


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par défaut
    Salut,

    D'après l'enregistreur de macro (comme quoi, il peut servir de temps en temps),
    il y a une constante à utiliser pour filtrer sur "Aujourd'hui":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.ListObjects("TS_Suivi").Range.AutoFilter Field:=1, Criteria1:=xlFilterToday, Operator:=xlFilterDynamic
    PS:
    Je ne voit pas l'utilité de désactiver l'affichage lorsque l'on applique un filtre,
    le temps de réponse est instantanné, a moins que tu aies beaucoup de données (plusieurs milliers).

  2. #2
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Salut,

    D'après l'enregistreur de macro (comme quoi, il peut servir de temps en temps),
    il y a une constante à utiliser pour filtrer sur "Aujourd'hui":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.ListObjects("TS_Suivi").Range.AutoFilter Field:=1, Criteria1:=xlFilterToday, Operator:=xlFilterDynamic
    PS:
    Je ne voit pas l'utilité de désactiver l'affichage lorsque l'on applique un filtre,
    le temps de réponse est instantanné, a moins que tu aies beaucoup de données (plusieurs milliers).
    Ok, mais je veux filtrer sur n'importe quelle date

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par défaut
    Toujours obtenu avec l'enrigistreur de macro,
    Il apparait qu'il faut utiliser l'argument Criteria2 et passer par un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range.AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=Array(2, "1/4/2024")
    En conclusion, même si l'enregistreur de macro n'est pas terrible (le code généré est loin d'être exploitable en l'état), n'hésite pas à faire des expérimentation avec.

  4. #4
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Bonjour,

    Cette macro fonctionne à merveille si le formatage des cellules est "jj.mm.aa" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub FiltrerInterventionParDate()
    ThisWorkbook.Sheets("Suivi").ListObjects("TS_Suivi").AutoFilter.ShowAllData
        ActiveWindow.ScrollRow = 1  'Jusqu'à la ligne
        ThisWorkbook.Sheets("Suivi").ListObjects("TS_Suivi").DataBodyRange.AutoFilter Field:= _
        ThisWorkbook.Sheets("Suivi").ListObjects("TS_Suivi").ListColumns("Intervention").Index, Criteria1:=Format(Date, "dd.mm.yy")
        ActiveWindow.ScrollRow = 1  'Jusqu'à la ligne
    End Sub
    Cette macro ne fonctionne pas si le formatage des cellules est "jjj jj.mm.aa" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub FiltrerInterventionParDate() 
    ThisWorkbook.Sheets("Suivi").ListObjects("TS_Suivi").AutoFilter.ShowAllData
        ActiveWindow.ScrollRow = 1  'Jusqu'à la ligne
        ThisWorkbook.Sheets("Suivi").ListObjects("TS_Suivi").DataBodyRange.AutoFilter Field:= _
    ThisWorkbook.Sheets("Suivi").ListObjects("TS_Suivi").ListColumns("Intervention").Index, Criteria1:=Format(Date, "ddd dd.mm.yy")
        ActiveWindow.ScrollRow = 1  'Jusqu'à la ligne
    End Sub
    Je fais du sur place

    En attendant une solution, j'ai créé une colonne Interventionjjmmaa avec le format jj.mm.aa qui renvoie les dates des cellules de la colonne Intervention formatée jjj jj.mm.aa, c'est tordu mais ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub FiltrerInterventionParDate()
    ThisWorkbook.Sheets("Suivi").ListObjects("TS_Suivi").AutoFilter.ShowAllData
        ActiveWindow.ScrollRow = 1  'Jusqu'à la ligne
        ThisWorkbook.Sheets("Suivi").ListObjects("TS_Suivi").DataBodyRange.AutoFilter Field:= _
        ThisWorkbook.Sheets("Suivi").ListObjects("TS_Suivi").ListColumns("Interventionjjmmaa").Index, Criteria1:=Format(Date, "dd.mm.yy")
        ActiveWindow.ScrollRow = 1  'Jusqu'à la ligne
    End Sub

    Je vous remercie pour votre aide

  5. #5
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 041
    Par défaut
    Une idée à tester : mettre provisoirement les données au format date reconnu par le filtre, appliquer le filtre, remettre les données au format date désiré.

  6. #6
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Citation Envoyé par laurent_ott Voir le message
    Une idée à tester : mettre provisoirement les données au format date reconnu par le filtre, appliquer le filtre, remettre les données au format date désiré.
    Bonne idée, mais c'est tout de même incroyable de devoir faire ce micmac pour un simple filtre ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        If Not Intersect(Target, Range("Cell_Filtrer_Intervention")) Is Nothing And Target.Count = 1 Then
            Cancel = True 'Empêche l'édition de la cellule active (F2) lors de Worksheet_BeforeDoubleClick Cancel = True permet de resortir du mode édition
            Target = USF_Calendar.ShowX(Target)
            If Target <> "Filtrer" Then
                Call Liberer_filtre_TS(Tableau)
                Sheets("suivi").Range("TS_Suivi[Intervention]").NumberFormat = "dd/mm/yy"
                Call Filtrer_TS(Tableau, "Intervention", Format(Range("Cell_Filtrer_Intervention"), "dd.mm.yy"))
                Sheets("suivi").Range("TS_Suivi[Intervention]").NumberFormat = "ddd dd/mm/yy"
                ActiveWindow.ScrollRow = 1  'Jusqu'à la ligne
                ActiveSheet.Range("Cell_Filtrer_Intervention") = "Filtrer" 'Inscrire le texte dans la cellule
            End If
        End If

  7. #7
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Merci à tous

    ça fonctionne à merveille

    Le problème est que le formatage vba ajoute automatiquement un point après l'abréviation du jour, il est nécessaire de formater les cellules avec 3 points => jjj. jj.mm.aa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim Tableau As Range
        Set Tableau = Range("TS_Suivi")
        If Not Intersect(Target, Range("Cell_Filtrer_Intervention")) Is Nothing And Target.Count = 1 Then
            Cancel = True 'Empêche l'édition de la cellule active (F2) lors de Worksheet_BeforeDoubleClick Cancel = True permet de resortir du mode édition
            Target = USF_Calendar.ShowX(Target)
            If Target <> "Filtrer" Then 'Evite de lancer la macro si aucune date n'est sélectionnée via le calendrier ou au clique sur le bouton Annuler
                Call Liberer_filtre_TS(Tableau)
                Call Filtrer_TS(Tableau, "Intervention", Format(Target, "ddd dd.mm.yy")) 'Formater les cellules avec 3 points jjj. jj.mm.aa
                ActiveWindow.ScrollRow = 1  'Faire défiler la fenêtre de sorte que la première ligne du tableau soit visible
                ActiveSheet.Range("Cell_Filtrer_Intervention") = "Filtrer" 'Inscrire le texte dans la cellule
            End If
        End If

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2007] tri mois d'une date dans un tableau croisé dynamique
    Par marcelisa2 dans le forum Excel
    Réponses: 3
    Dernier message: 04/06/2013, 17h57
  2. [MySQL] affichage d'une date dans un tableau
    Par toomou dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/01/2009, 11h56
  3. [Dates] Formater une date dans un tableau
    Par orleans dans le forum Langage
    Réponses: 14
    Dernier message: 25/01/2008, 06h46
  4. StringTokenizer - Reprise d'une date dans un tableau
    Par pado_83 dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 03/10/2006, 12h42
  5. [JTable] Afficher une date dans un tableau / Renderer
    Par isak dans le forum Composants
    Réponses: 3
    Dernier message: 11/07/2005, 18h09

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