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 :

AutoFilter DateTime résultat Tableau vide - Clic sur filtre à la main et paf résultats [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai Avatar de 3DPas
    Homme Profil pro
    Concepteur 3D
    Inscrit en
    Septembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Concepteur 3D
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 6
    Points : 10
    Points
    10
    Par défaut AutoFilter DateTime résultat Tableau vide - Clic sur filtre à la main et paf résultats
    Bonjour tout le monde,

    Je réalise une timbreuse sous Excel et j'ai un soucis de filtrage au niveau du temps(dates).

    C'est une histoire d'Autofilter. Je désire n'afficher que les timbrage plus vieux que xDateHeure.

    Le soucis c'est que quand j'applique mon Autofilter par VBA je n'ai aucun résultat. Une fois appliqué je clique dessus(sur l'entête de colonne) et le valide à la souris sans changer de paramètres et paf ! Les résultats désirés sont là.

    Voici le code (A savoir que j'ai essayé d'appliquer la méthode de la date numérique mais ça ne foncitonne pas mieux...)

    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
    Sub ajoutFactureDonneesBrutes(strDateDebut As String, strDateFin As String)
     
        'Effacer les filtres en gérant l'erreur s'il n'y a pas de filtres déjà définis
     
        strDateDebut = CDate(strDateDebut) 'Actuellement stocké sous le format jj.mm.yyyy hh:mm:ss
        strDateFin = CDate(strDateFin)
        Worksheets("Données Brutes").Visible = True
        Worksheets("Données Brutes").Activate
     
        On Error Resume Next
        ActiveSheet.ShowAllData
        On Error GoTo 0
     
        'N'afficher que le client sélectionné dans le tableau et les timbrages complets (Date Début et fin)
        iChampClient = ActiveSheet.ListObjects("DataBrutes").ListColumns("Client").Index
        iChampDateHeureFin = ActiveSheet.ListObjects("DataBrutes").ListColumns("Date Heure Fin").Index
        iChampDateHeureDebut = ActiveSheet.ListObjects("DataBrutes").ListColumns("Date Heure Début").Index
     
        'ActiveSheet.ListObjects("DataBrutes").Range.AutoFilter Field:=iChampClient, Criteria1:=strClient
        ActiveSheet.ListObjects("DataBrutes").Range.AutoFilter Field:=iChampDateHeureDebut,  Criteria1:=">" & strDateDebut , Operator:=xlFilterValues 'xlAnd ne fonctionne pas mieux.  <---------------------------------
        ActiveSheet.ListObjects("DataBrutes").Range.AutoFilter Field:=iChampDateHeureFin, Criteria1:="<" & strDateFin, Operator:=xlFilterValues 'clng(strDateDebut) non plus et clng(CDbl(strDateDebut) Pas mieux ... <--------------------------
     
        'Trier par de la date la moins récente à la plus récente ce nouveau tableau
            With ActiveSheet.ListObjects("DataBrutes").Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("DataBrutes[Date Heure Début]"), SortOn:=xlSortOnValues, Order:=xlAscending
            .Header = xlYes
            .Apply
            End With
     
        'Vérifie que les filtres ont trouvés au moins un résultat de travail pour le client sélectionné
        If Range("A1", "A1000000").SpecialCells(xlCellTypeVisible).Count = 1 Then
         '...
        End If
    End Sub
    Cela fait maintenant près de 5 heures que je hurle à l'intérieur de moi-même, j'ai beau lutter, je n'y arrive pas...
    Alors si quelqu'un de la communauté pouvait m'aider ça serait formidable ! siouplait

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une piste avec un classeur exemple sur un tableau :
    Classeur1.xlsm

  3. #3
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Points : 367
    Points
    367
    Par défaut
    En reprenant la solution de These, que je n'avais réussi a trouver,
    une petite amélioration qui prend en compte les heures
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    En mettant un point d'arrêt afin de voir le résultat du filtrage. Je reposte le code avec un Stop (arrivé au stop, aller voir dans la feuille !). J'ai modifié le type de données (double au lieu de long puisque des heures avec) :
    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
     
    Sub Test()
     
        ajoutFactureDonneesBrutes "01/01/2000", "01/01/2004"
     
    End Sub
     
    Sub ajoutFactureDonneesBrutes(strDateDebut As String, strDateFin As String)
     
        Dim Tbl As ListObject
        Dim DateDeb As Double
        Dim DateFin As Double
     
        Set Tbl = Worksheets("Données Brutes").ListObjects("DataBrutes")
     
        DateDeb = CDbl(CDate(strDateDebut)) 'Actuellement stocké sous le format jj.mm.yyyy hh:mm:ss
        DateFin = CDbl(CDate(strDateFin))
     
        With Tbl.DataBodyRange
     
            'passage du formatage en Standard
            .Columns(Tbl.ListColumns("DateEntree").Index).NumberFormat = "General"
            .Columns(Tbl.ListColumns("DateSortie").Index).NumberFormat = "General"
     
            'suppression d'un filtrage éventuel
            .AutoFilter
     
            'filtrage sur la colonne "DateEntree" puis ensuite la colonne "DateSortie"
            .AutoFilter Tbl.ListColumns("DateEntree").Index, ">=" & DateDeb
            .AutoFilter Tbl.ListColumns("DateSortie").Index, "<" & DateFin
     
            Stop '<--- ici le point d'arrêt !
            'ici, la récup du résultat
            '...
            '...
            'suppression du filtrage
            .AutoFilter
     
            '...puis remise en place du formatage
            .Columns(Tbl.ListColumns("DateEntree").Index).NumberFormat = "dd.mm.yyyy hh:mm:ss"
            .Columns(Tbl.ListColumns("DateSortie").Index).NumberFormat = "dd.mm.yyyy hh:mm:ss"
     
        End With
     
    End Sub

  5. #5
    Membre à l'essai Avatar de 3DPas
    Homme Profil pro
    Concepteur 3D
    Inscrit en
    Septembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Concepteur 3D
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 6
    Points : 10
    Points
    10
    Par défaut Problème résolu ! Merci mille fois !
    Bonjour bonjour !

    Merci pour vos réponses ! Grâce à vous j'ai pu résoudre mon problème de manière efficace

    Une bonne journée !

  6. #6
    Membre à l'essai Avatar de 3DPas
    Homme Profil pro
    Concepteur 3D
    Inscrit en
    Septembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Concepteur 3D
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 6
    Points : 10
    Points
    10
    Par défaut Citation de solution
    Citation Envoyé par Theze Voir le message
    Bonjour,

    En mettant un point d'arrêt afin de voir le résultat du filtrage. Je reposte le code avec un Stop (arrivé au stop, aller voir dans la feuille !). J'ai modifié le type de données (double au lieu de long puisque des heures avec) :
    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
     
    Sub Test()
     
        ajoutFactureDonneesBrutes "01/01/2000", "01/01/2004"
     
    End Sub
     
    Sub ajoutFactureDonneesBrutes(strDateDebut As String, strDateFin As String)
     
        Dim Tbl As ListObject
        Dim DateDeb As Double
        Dim DateFin As Double
     
        Set Tbl = Worksheets("Données Brutes").ListObjects("DataBrutes")
     
        DateDeb = CDbl(CDate(strDateDebut)) 'Actuellement stocké sous le format jj.mm.yyyy hh:mm:ss
        DateFin = CDbl(CDate(strDateFin))
     
        With Tbl.DataBodyRange
     
            'passage du formatage en Standard
            .Columns(Tbl.ListColumns("DateEntree").Index).NumberFormat = "General"
            .Columns(Tbl.ListColumns("DateSortie").Index).NumberFormat = "General"
     
            'suppression d'un filtrage éventuel
            .AutoFilter
     
            'filtrage sur la colonne "DateEntree" puis ensuite la colonne "DateSortie"
            .AutoFilter Tbl.ListColumns("DateEntree").Index, ">=" & DateDeb
            .AutoFilter Tbl.ListColumns("DateSortie").Index, "<" & DateFin
     
            Stop '<--- ici le point d'arrêt !
            'ici, la récup du résultat
            '...
            '...
            'suppression du filtrage
            .AutoFilter
     
            '...puis remise en place du formatage
            .Columns(Tbl.ListColumns("DateEntree").Index).NumberFormat = "dd.mm.yyyy hh:mm:ss"
            .Columns(Tbl.ListColumns("DateSortie").Index).NumberFormat = "dd.mm.yyyy hh:mm:ss"
     
        End With
     
    End Sub

    Re j'avais juste oublié de citer LA SOLUTION Encore mille OOOHHH

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 03/11/2016, 15h26
  2. [WD16] Lenteur clic sur filtre
    Par forca dans le forum WinDev
    Réponses: 0
    Dernier message: 23/01/2013, 15h24
  3. Clic sur 2 boutons différents mais même résultat
    Par android75 dans le forum Composants graphiques
    Réponses: 10
    Dernier message: 02/12/2012, 14h14
  4. Réinitialiser objet ou tableau à chaque clic sur mon bouton
    Par mouss4rs dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 22/03/2012, 11h59
  5. Réponses: 11
    Dernier message: 11/08/2006, 16h52

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