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 de filtrage de date


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Problème de filtrage de date
    Bonjour, je sais que le problème est usuel mais je n'ai pas trouvé la solution.

    J'ai fait le code suivant qui fonctionnait bien.
    J'ai ajouté des données à une colonne existante (mais vide) du "Listobject" à filtrer et modifié une variable non utilisée dans le filtre.
    Et mon filtrage ne fonctionne plus : aucune correspondance alors qu'il en existe.

    Incompréhensible.

    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
        'Filtre avec la date au format US provenant du bouton cliqué
        Dim DatClic As String
        DatClic = Mid(Controls("LblJour" & IndexBoutonClic).Caption, 1 + InStr(Controls("LblJour" & IndexBoutonClic).Caption, Chr(10)))
     
        'Filtre pour les différentes périodes : dates de certaines périodes
        Dim PremierLundiAnnuel As Date
        PremierLundiAnnuel = DateSerial(Range("_Annee").Value, 9, 1) - Weekday(DateSerial(Range("_Annee").Value, 9, 1), vbMonday) + 1
        NoSemaineAnnuelle = (CDate(DatClic) - PremierLundiAnnuel) \ 7
        Dim Period() As String
        ReDim Period(1 To 3)
        Period(1) = "ab"       'Toutes les semaines
        Period(2) = "12"       'Tous les semestres
        Period(3) = IIf(NoSemaineAnnuelle Mod 2 = 0, "a", "b")          'semaine a si N°Pair sinon
        If CDate(DatClic) > Range("Semestre2").Value Then               'Test si on est au second semestre
            ReDim Preserve Period(1 To 4)                               'Si on est 2e semestre alors oui ajoute le code "2"
            Period(4) = "2"
        End If
     
        ' filtrage
        Worksheets("Dates Annuelles Générées").ListObjects("TabHoraireHebdo").Range.AutoFilter Field:=1, Operator:=xlFilterValues, Criteria1:=Array(CDate(DatClic) + 15)
        ActiveSheet.ListObjects("TabHoraireHebdo").Range.AutoFilter Field:=4, Criteria1:=Array(Period()), Operator:=xlFilterValues
    Nom : Sans titre2.png
Affichages : 166
Taille : 8,7 Ko

    j'ai mis "Criteria1" à la date au format texte version Français ou version US, j'ai converti la date texte avec "DateSERIAL()" ou "DateValue()" puis repasser au format chaine...

    Rien n'y fait.

    Avez-vous une solution ?

    ESVBA

  2. #2
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 288
    Par défaut
    Salut
    Ben CLong()

  3. #3
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Merci à toi hyperion13 de te pencher sur mon problème
    comment l'utilises-tu ?

    J'ai déjà essayé. Peut-être mal ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Criteria1:=Format(CLng(CDate(DatClic)), "mm/dd/yyyy")

    La valeur de DatClic est extraite d'un bouton cliqué.
    "CDate" donne bien une valeur numérique de la date au format Français.
    Et même si je convertis en texte format US.

    Aucune valeur du "Listobject" ne correspond plus...

    ESVBA

  4. #4
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut QUI SE MOQUE DE MOI ?
    Bilan à cet instant :

    ça fonctionne !


    J'ai testé hier soir en reprenant mon tout premier code (Win 11 - XL19).
    ça ne fonctionnait toujours pas.


    J'ai essayé ce jour avec Win7 et XL2010 avec le même programme copié sur une clé.
    J'ai eu beau faire toutes sortes de conversion (même avec "CLong") pas de solution.

    Je redémarre le programme d'hier, non modifié depuis hier, sur le PC Win11 et XL19 et CA FONCTIONNE 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
    'Filtre avec la date
        Dim DatClic As String
        DatClic = Mid(Controls("LblJour" & IndexBoutonClic).Caption, 1 + InStr(Controls("LblJour" & IndexBoutonClic).Caption, Chr(10)))
        '               DatClic = (#9/5/2022#)
        'Filtre pour les différentes périodes : dates de certaines périodes
        Dim PremierLundiAnnuel As Date
        PremierLundiAnnuel = DateSerial(Range("_Annee").Value, 9, 1) - Weekday(DateSerial(Range("_Annee").Value, 9, 1), vbMonday) + 1
        NoSemaineAnnuelle = (CDate(DatClic) - PremierLundiAnnuel) \ 7
        Dim Period() As String
        ReDim Period(1 To 3)
        Period(1) = "ab"       'Toutes les semaines
        Period(2) = "12"       'Tous les semestres
        Period(3) = IIf(NoSemaineAnnuelle Mod 2 = 0, "a", "b")          'semaine a si N°Pair sinon
        If CDate(DatClic) > Range("Semestre2").Value Then               'Test si on est au second semestre
            ReDim Preserve Period(1 To 4)                               'Si on est 2e semestre alors oui ajoute le code "2"
            Period(4) = "2"
        End If
     
        'Application des filtres
        Worksheets("Dates Annuelles Générées").Range("A2").Select
        Worksheets("Dates Annuelles Générées").ListObjects("TabHoraireHebdo").Range.AutoFilter Field:=1, Operator:=xlFilterValues, Criteria1:=Array(CDate(DatClic)+15)
    WAOUH. Ca fonctionne.
    Je modifie en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Criteria1:=Array(CDate(DatClic))
    Ca fonctionne encore !
    Je rechange en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Criteria1:=Array(DatClic)
    Ca fonctionne toujours.
    La vérification du contenu de la variable DatClic déclarée comme une chaine est au format français comme la liste dans le tableau "Listobject" de la feuille de calcul. L'explorateur affiche "05/09/2022"


    Ca fonctionne comme ça aurait dû.


    Il y a un problème de compilateur, de mise à jour, de...
    Ce n'est pas un problème de bug "temporel" puisque j'ai fait des essais sur plusieurs jours et allumer/fermer Windows et Excel.
    Je ne sais. J'espère que le code fonctionnera encore demain.

    Si vous avez déjà rencontré ce genre de problème.
    Avez-vous trouvé une solution définitive ?

    J'espère que ça continuera à fonctionner.

    Je mets un résolu sans même si l'on a pas trouvé de réelle solution.


    ESVBA

  5. #5
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut ET..
    Pour la version Win 7 et XL2010, il faut mettre "Criteria2" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Dates Annuelles Générées").ListObjects("TabHoraireHebdo").Range.AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=Array(2, DatClic)
    fonctionne AVEC UNE DATE US.

    il va falloir tester la version de l'application pour lancer le bon code.

    ESVBA

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

Discussions similaires

  1. problème filtrage par date
    Par master_och dans le forum JDBC
    Réponses: 9
    Dernier message: 07/04/2009, 23h15
  2. problème filtrage par date
    Par master_och dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/04/2009, 13h55
  3. Requete : Problème de filtrage par date
    Par flamby6969 dans le forum Access
    Réponses: 1
    Dernier message: 20/12/2007, 13h29
  4. Problème de filtrage par la date
    Par soso78 dans le forum IHM
    Réponses: 7
    Dernier message: 13/11/2007, 12h23
  5. [ETATS] Problème de filtrage de date
    Par Ithilien dans le forum IHM
    Réponses: 2
    Dernier message: 02/01/2007, 17h11

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