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 :

filtres chronologiques avec un Userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Points : 84
    Points
    84
    Par défaut filtres chronologiques avec un Userform
    Bonjour,

    J'ai créé un Userform qui permet d'appliquer certains filtres, mais je bloque sur les champs de date. J'ai fait quatre listes déroulantes, respectivement pour le mois (StartMonth), l'année (StartYear) de début de période, et pour le mois (EndMonth), l'année (EndYear) de fin de période.

    renvoie le numéro du mois, puisque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Start.Month.ListIndex = 0
    renvoie une chaîne vide. Idem pour EndMonth.

    J'ai remarqué que, bizarrement, les filtres chronologiques écrits "en dur" sont des dates formatées à la française (dd/mm/YYYY), mais que dès que j'utilise des variables, il l'interprète à l'américaine (m/d/YYYY). Bon.
    Je ne m'intéresse qu'au mois, tous les jours des dates sur cette colonne étant à 1. D'autre part, j'ai d'abord voulu tester la période de début, sans m'occuper de la date de fin, que j'ai laissée "en dur".

    J'ai donc écrit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Filtre sur la date de début de période
        If StartMonth.ListIndex = 0 Then
        ActiveSheet.ListObjects("Liste_Factures").Range.AutoFilter Field:=6
        Else
     
        ActiveSheet.ListObjects("Liste_Factures").Range.AutoFilter Field:=6, _
            Criteria1:=">=" & StartMonth.ListIndex & "-1-" & StartYear.Value, Operator:=xlAnd, Criteria2:="<=31/12/2017"
    Après la soumission du formulaire, on peut constater qu'aucune correspondance n'est trouvée, puisque tout a été filtré (aucune ligne du tableau n'est apparente), mais si l'on regarde quels filtres ont été appliqués, il y a bien un filtre chronologique et les dates écrites dans le filtres ont l'air bien écrites. Il doit donc y avoir un problème de format. J'ai essayé aussi avec "/01/" au lieu de "-1-". Ça ne marche pas davantage.

    J'ai aussi essayé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Criteria1:=">=" & DateSerial(StartYear.Value,StartMonth.ListIndex,1) , Operator:=xlAnd, Criteria2:="<=31/12/2017"
    mais ça ne marche pas non plus.

    Merci d'avance de votre aide,

    Cordialement,

  2. #2
    Membre régulier Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Points : 84
    Points
    84
    Par défaut
    Bonjour,

    Après beaucoup de tâtonnements, ce code semble marcher :
    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
    'Filtre sur la période
        Dim crit1 As String
        Dim crit2 As String
     
        crit1 = ">=" & StartMonth.ListIndex & "/01/" & StartYear.Value
        crit2 = "<=" & EndMonth.ListIndex & "/01/" & EndYear.Value
     
        If (StartMonth.ListIndex = 0 And EndMonth.ListIndex = 0 And StartYear.ListIndex = 0 And EndYear.ListIndex = 0) Then
        ActiveSheet.ListObjects("Liste_Factures").Range.AutoFilter Field:=6
        Else
     
        ActiveSheet.ListObjects("Liste_Factures").Range.AutoFilter Field:=6, _
            Criteria1:=crit1, Operator:=xlAnd, Criteria2:=crit2
        Principal.EraseFilter.Enabled = True
     
        End If
    Je confirme donc que le mois et le jour sont inversés. Je reste ouvert à vos remarques, au cas où quelqu'un aurait mieux, ou plus orthodoxe.

    Merci à tous.

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par Markos22 Voir le message
    Bonjour,

    Après beaucoup de tâtonnements, ce code semble marcher :
    ...
    Je confirme donc que le mois et le jour sont inversés. Je reste ouvert à vos remarques, au cas où quelqu'un aurait mieux, ou plus orthodoxe.
    1. C'est parfait. Le tâtonnement t'a permis de decouvrir la solution : les dates doivent etre au format de date americain : "m/d/yyyy"
    2. Plus orthodoxe : Tu pourrais utiliser la commande Format pour obtenir le format de date americain.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    crit1 = ">=" & Format(DateSerial(annee, mois, jour), "m/d/yyyy")
    Cordialement

    Docmarti.

  4. #4
    Membre régulier Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Points : 84
    Points
    84
    Par défaut
    Merci, Docmarti !

    Je marque cette discussion comme résolue. A bientôt !

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

Discussions similaires

  1. [XL-2003] Comment maintenir le résultat un filtre élaboré avec un userform
    Par MichaSarah dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/12/2010, 10h32
  2. Réponses: 4
    Dernier message: 25/05/2007, 11h11
  3. [VBA-E] Problème avec une UserForm
    Par jamelie dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/05/2007, 14h20
  4. Réponses: 2
    Dernier message: 22/12/2006, 12h46
  5. Probleme de Nbre avec un Userform Via Excel
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/08/2006, 09h29

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