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 date dans un listbox [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Par défaut Filtre sur date dans un listbox
    Bonjour

    Dans un userform j'ai une listbox qui est alimentée par deux combobox les sources sont colonne B et C , je souhaite créer un filtre sur la colonne D sur le choix de l'année.
    J'ai donc créé des CheckBox avec pour action le code des filtres par année.
    Pour le CheckBox2016 ça fonctionne mais pas pour CheckBox2017

    les filtres se font sur la feuille mais pas sur la lisbox.

    Une piste ?
    Merci
    Cordialement

    Codes des CheckBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub CheckBox2016_Change()
    'filtre 2016
        Me.ListBox1.Clear
        If CheckBox2016 = True Then
            Sheets("BD").Select
        ActiveSheet.Range("$A$1:$J$3000").AutoFilter Field:=4, Criteria1:= _
            ">=01/01/2016", Operator:=xlAnd, Criteria2:="<=12/31/2016"
     
            Else
            Sheets("BD").Select
    ActiveSheet.Range("$A$1:$J$3000").AutoFilter Field:=4
     
        End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub CheckBox2017_Change()
    'filtre 2017
    Me.ListBox1.Clear
        If CheckBox2017 = True Then
            Sheets("BD").Select
        ActiveSheet.Range("$A$1:$J$3000").AutoFilter Field:=4, Criteria1:= _
            ">=01/01/2017", Operator:=xlAnd, Criteria2:="<=12/31/2017"
     
            Else
            Sheets("BD").Select
    ActiveSheet.Range("$A$1:$J$3000").AutoFilter Field:=4
     
        End If
    End Sub
    Le code des combobox

    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
    Private Sub ComboBox2_click()
    'Filtre colonne B
    'ComboBox1 = ""
      ComboBox3 = ""
      Me.ListBox1.Clear
      For k = 1 To Ncol: Me("textBox" & k) = "": Next k
      j = 0
      n = Application.CountIf(Application.Index(Rng, , 2), Me.ComboBox2) 'colonne B
      Dim b()
      ReDim b(1 To n, 1 To Ncol + 1)
      For i = LBound(BD) To UBound(BD)
        If Me.ComboBox2 = BD(i, 2) Then
          j = j + 1
          For k = 1 To Ncol
            b(j, k) = BD(i, k)
            If k >= 3 And k <= 5 Then
            b(j, k) = BD(i, k)
            End If
          Next k
          b(j, k) = i
        End If
       Next i
       ListBox1.List = b 'alimente listbox1
       ListBox1.ListIndex = 0
    End Sub
    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
    Private Sub ComboBox3_click()
    'Filtre colonne C
      'ComboBox1 = ""
      ComboBox2 = ""
      Me.ListBox1.Clear
      For k = 1 To Ncol: Me("textBox" & k) = "": Next k
      j = 0
      n = Application.CountIf(Application.Index(Rng, , 3), Me.ComboBox3) 'colonne C
      Dim b()
      ReDim b(1 To n, 1 To Ncol + 1)
      For i = LBound(BD) To UBound(BD)
        If Me.ComboBox3 = BD(i, 3) Then
          j = j + 1
          For k = 1 To Ncol
            b(j, k) = BD(i, k)
            If k >= 3 And k <= 5 Then
            b(j, k) = BD(i, k)
            End If
          Next k
          b(j, k) = i
        End If
       Next i
       ListBox1.List = b 'alimente listbox1
       ListBox1.ListIndex = 0
    End Sub
    Nom : apercu.JPG
Affichages : 1606
Taille : 30,0 Ko

  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,
    J'avoue que ce n'est pas très clair.
    D'abord ton titre évoque un contrôle ListBox or les codes que tu affiches montrent clairement que tu utilises des contrôles ComboBox

    Tu souhaites filtrer la feuille ou uniquement la liste du ComboBox ?
    Autre question, pourquoi deux ComboBox l'un avec 2016 et l'autre 2017, Y a t'il une raison ?

    Si tu souhaites avoir deux ComboBox avec 2016 à gauche et 2017 à droite, il suffit de parcourir la liste des données et comparer l'année de la date et d'utiliser la méthode AddItem afin de placer les bonnes informations à gauche ou à droite.

    Question supplémentaire, faut-il récupérer l'enregistrement de la ligne sélectionnée dans l'un ou l'autre ComboBox ?

    Cette réponse dans la discussion ayant pour titre "Remplissage listbox sous condition" t'aidera peu-être

    Autre discussion avec deux ListBox contenant l'un les personnes de sexe féminin et l'autre celles de sexe masculin
    Il y a un fichier exemple à télécharger https://www.developpez.net/forums/d1...s/#post8275338
    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
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Avec le fichier en PJ, il n'y aurait plus d'ambiguïté.

    Boisgontier
    http://boisgontierjacques.free.fr

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Par défaut
    Oui effectivement j'ai essayé d'adapter cet excellent formulaire http://boisgontierjacques.free.fr/fi...ifCreation.xls
    dont vous êtes l'auteur. je tenais à vous remercier pour ces réalisations d'un grand secours.
    Mais je bloque pour intégrer la recherche entre deux dates de ma colonne D sur ce formulaire.
    J'ai donc essayé de faire des filtres par année associés à des checkbox.
    Mais ça fonctionne que pour 2016.

    Merci
    Cordialement

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    J'avoue que ce n'est pas très clair.
    D'abord ton titre évoque un contrôle ListBox or les codes que tu affiches montrent clairement que tu utilises des contrôles ComboBox

    Tu souhaites filtrer la feuille ou uniquement la liste du ComboBox ?
    Autre question, pourquoi deux ComboBox l'un avec 2016 et l'autre 2017, Y a t'il une raison ?

    Si tu souhaites avoir deux ComboBox avec 2016 à gauche et 2017 à droite, il suffit de parcourir la liste des données et comparer l'année de la date et d'utiliser la méthode AddItem afin de placer les bonnes informations à gauche ou à droite.

    Question supplémentaire, faut-il récupérer l'enregistrement de la ligne sélectionnée dans l'un ou l'autre ComboBox ?

    Cette réponse dans la discussion ayant pour titre "Remplissage listbox sous condition" t'aidera peu-être

    Autre discussion avec deux ListBox contenant l'un les personnes de sexe féminin et l'autre celles de sexe masculin
    Il y a un fichier exemple à télécharger https://www.developpez.net/forums/d1...s/#post8275338
    Bonjour

    Je vais essayer de répondre clairement.

    1. La listebox est modifiée par les combobox d'où ces codes.
    2. Je souhaite filtrer la feuille et que la listebox soit mise à jour avec ce filtre lorsque je fais un choix dans l'un des combobox (une nouvelle liste de données en fait).
    Si tu souhaites avoir deux ComboBox avec 2016 à gauche et 2017 à droite, il suffit de parcourir la liste des données et comparer l'année de la date et d'utiliser la méthode AddItem afin de placer les bonnes informations à gauche ou à droite.
    3. Je souhaite que la liste de données soit les références de valeur de recherche. 2016,2017,2018,2019 etc.

    J'avais donc à l'esprit de créer des filtres .

    J'espère avoir été précis
    Merci

  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
    Bonjour,
    As-tu regardé les deux liens que j'ai publié ?
    Il suffit de t'en inspirer pour alimenter le ListBox la condition dans ton cas devant être réglé par un ou plusieurs And et certainement la fonction Year pour extraire l'année des dates.
    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

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Exemple de filtre sur année avec affichage dans ListBox.
    Les dates sont en colonne D.

    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
     
    Private Sub UserForm_Initialize()
      Set f = Sheets("bd")
      Set d = CreateObject("Scripting.Dictionary")
      bd = f.Range("A2:D" & f.[A65000].End(xlUp).Row).Value
      Tri bd, LBound(bd), UBound(bd), 4  ' version tri
      Me.ListBox1.List = bd
      For i = LBound(bd) To UBound(bd)
         d(Year(bd(i, 4))) = ""
      Next i
      Me.ComboBox1.List = d.keys
      Me.ListBox1.ColumnCount = 4
      Me.ListBox1.ColumnWidths = "50;30;50;30"
    End Sub
     
    Private Sub ComboBox1_click()
      an = Val(Me.ComboBox1): n = 0
      Dim Tbl()
      For i = 1 To UBound(bd)
        If Year(bd(i, 4)) = an Then
            n = n + 1: ReDim Preserve Tbl(1 To UBound(bd, 2), 1 To n)
            For k = 1 To UBound(bd, 2): Tbl(k, n) = bd(i, k): Next k
         End If
      Next i
      If n > 0 Then Me.ListBox1.Column = Tbl Else Me.ListBox1.Clear
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Par défaut
    Bonjour
    merci
    j'ai adapté au formulaire.
    La liste par année choisie s'affiche dans listbox.
    il me reste a réaliser le deuxième critère Colonne B (Ville)
    Critère 1 = année
    Critère 2 = Colonne B (Ville)

    Merci encore

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

Discussions similaires

  1. [AC-2007] Filtre sur date dans un formulaire
    Par frabeau dans le forum VBA Access
    Réponses: 10
    Dernier message: 14/10/2011, 15h04
  2. [AC-2007] Filtre sur Dates dans VBA
    Par Corinne4775 dans le forum Access
    Réponses: 4
    Dernier message: 07/09/2011, 10h16
  3. Filtre sur date dans calcul total form.
    Par lbar012001 dans le forum IHM
    Réponses: 2
    Dernier message: 21/06/2010, 11h11
  4. [VxiR2] Filtre sur date du jour dans une requête
    Par niko8181 dans le forum Webi
    Réponses: 5
    Dernier message: 05/10/2009, 15h39
  5. Réponses: 9
    Dernier message: 19/02/2007, 20h33

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