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 listbox en utilisant DTPicker [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Par défaut Filtrer une listbox en utilisant DTPicker
    Bonjour à tous !
    Tout nouveau sur le forum je sais qu'il y'a déjà eu quelque sujet sur mon problème mais malheureusement après les avoir tous lu et exploité je n'ai pas réussi a le résoudre !
    Je vous explique donc de quoi il s'agit :

    Mon fichier me sert a rentrer des commandes (Feuille "Formulaire"), a pouvoir les reprendre et les modifier en ajoutant des info (Feuille "Modifier") et à filtrer les résultat et les afficher dans plusieurs listBox (Feuille "Statut").
    Ma première ListBox affiche mes commandes qui sont "En cours" et en "Attente chgt" et ma deuxième listBox ( bouton préparation) affiche mes commandes "A faire" et "En cours". Il n'y a aucun problème la dessus, tout s'affiche nickel.

    Mais maintenant la dernière programmation de mon fichier consiste a renseigner deux date dans des DTPicker présents sur mon USERFORM4 et a afficher uniquement les commandes comprises entre ces deux dates ! Et c'est la que je bloque !
    J'ai essayé tout les codes possibles mais rien ne ressort a chaque fois donc je me tourne vers vous si vous avez des idées !
    Ci joint mon fichier ( j'ai essayé de le réduire au max et de commenter le + possible)
    Merci d'avance pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Prends le temps de lire les règlement du site concernant les fichiers joints.
    Pour ma part, je n'ouvre pas les fichiers avec macros...

    Peux-tu mettre le bout de code que tu essaies en utilisant le bouton # pour formater celui-ci ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Par défaut
    Bonjour et merci de m'avoir répondu !
    Ah oui je me doutais bien que mettre mon fichier tel quel n’était pas une bonne idée mais je me disais que c’était plus pratique pour comprendre.

    Voici un bout de mon prog avec illustration alors :
    Déjà voici le code pour afficher ma listbox des que j'ouvre mon userform : elle contient les commandes qui sont "en cours" et en "Attente chgt"
    Il y'a beaucoup de conditions mais c'est uniquement pour la mise en forme représenté sur l'image suivante !

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    'Liste des procédures a faire
    Private Sub UserForm_Initialize()
     
    'Valeur par défault
    DTPicker1.Value = Now - 365
    DTPicker2.Value = Now
     
    listing1
    listing2
    listing3
    listing4
    End Sub
     
    'Bouton pour quitter l'écran
    Private Sub CommandButton1_Click()
    Unload UserForm4
    End Sub
     
    'Bouton pour changer d'écran
    Private Sub CommandButton2_Click()
    Unload UserForm4
    UserForm6.Show
    End Sub
     
    'Liste les valeurs des commandes dans la zone 101
    Private Sub listing1()
    Dim i As Integer
    With ListBox1
        .Clear
        .ColumnCount = 2
        .ColumnWidths = "50;0"
    End With
     
    With Sheets("Modifier")
     
    ' Si le statut est "En cours" ou "Attente chgt" alors on affiche la commande dans l'écran de suivi
        For i = 5 To .Range("a100000").End(xlUp).Row
     
            'Si pas de quai et "Attente chgt"
            If .Cells(i, 11) = "" And .Cells(i, 17) = "Attente chgt" Then
            ListBox1.AddItem
            ListBox1.List(ListBox1.ListCount - 1, 0) = "  " & "           " & .Cells(i, 17) & "     " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)
     
            Else
            'si pas de quai et "En cours"
            If .Cells(i, 11) = "" And .Cells(i, 17) = "En cours" Then
            ListBox1.AddItem
            ListBox1.List(ListBox1.ListCount - 1, 0) = "  " & "           " & .Cells(i, 17) & "            " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)
     
            Else
            'si quai et "Attente chgt"
            If .Cells(i, 17) = "Attente chgt" Then
            ListBox1.AddItem
            ListBox1.List(ListBox1.ListCount - 1, 0) = .Cells(i, 11) & "       " & .Cells(i, 17) & "     " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)
     
            Else
            'si quai et "En cours"
            If .Cells(i, 17) = "En cours" Then
            ListBox1.AddItem
            ListBox1.List(ListBox1.ListCount - 1, 0) = .Cells(i, 11) & "       " & .Cells(i, 17) & "            " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)
     
    End If
    End If
    End If
    End If
     
    Next i
     
    End With
    End Sub
    Nom : Sans titre.png
Affichages : 338
Taille : 60,7 Ko
    MON CODE UTILISE UNIQUEMENT LA LISTBOX1 EN HAUT A GAUCHE, LES AUTRES SONT IDENTIQUES ! Donc si mon programme de recherche de date marche pour une, il marchera pour toute^^

    Et voici le bout de code pour essayer de filtrer avec les dates quand j'appui sur CommandButton3 !

    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
    'Afficher les commandes entres les dates selectionnées
    Private Sub CommandButton3_Click()
          Datedebut = DTPicker1.Value
          Datefin = DTPicker2.Value
          ' Dans le cas où le choix est effectué sur le DTPicker1
          If Datefin < Datedebut Then
               Select Case MsgBox("La date de fin ne peut être inférieure à la date de début", vbOKOnly + vbCritical, "Saisie date incorrect")
                Case vbOKOnly
                Exit Sub
          End Select
     
          Else
     
    ListBox1.Clear
    Dim x As Range
     
        With ListBox1
        'Mes dates sont dans la colonne O de ma feuille "Modifier"
        For Each x In Sheets("Modifier").Range("O5:O" & Sheets("Modifier").Range("O100000").End(xlUp).Row)
     
                If x.Value >= DTPicker1.Value And x.Value <= DTPicker2.Value Then
     
                    .AddItem x(1, 0)
                    .List(.ListCount - 1, 1) = x(1, 1)
                    .List(.ListCount - 1, 2) = x(1, 2)
                    .List(.ListCount - 1, 3) = x(1, 2)
                    .List(.ListCount - 1, 4) = x(1, 3)
                    .List(.ListCount - 1, 5) = x(1, 4)
                    .List(.ListCount - 1, 6) = x(1, 5)
     
              End If
        Next x
        End With
    End Sub
    Question supplémentaire : Meme en l'utilisant je n'arrive pas bien a comprendre comment marche les (.listCount -1,1)=(1,1) enfin pour n'importe quelle valeurs ! que représente vraiment ces chiffres ? surtout les négatifs je ne vois pas a quoi cela correspond !!

    Merci de votre aide

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 199
    Par défaut
    Bonjour,

    Dans quelle feuille tu dois chercher les données ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Par défaut
    Dans ma feuille "Modifier" ou il y a la liste de mes commandes ! Je souhaite chercher les dates ( colonne "O" ) comprises entre mes deux DTPicker et afficher la ligne de la commande correspondante dans ma listBox (enfin en filtrant quelques info).
    De base ma ListBox affiche toute mes lignes de commandes parfaitement selon les info que je demande en renseignent les cellules spécifiques mais ma fonction pour filtrer entre les dates et afficher le résultat ne marche pas !

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 199
    Par défaut
    J'ai repris le code pour la liste 1 et ajouté une condition

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
     
    Private Sub CommandButton3_Click()
     
    Dim Datedebut As Date, Datefin As Date
     
     
     
          Datedebut = Format(DTPicker1.Value, "dd/mm/yyyy")
          Datefin = Format(DTPicker2.Value, "dd/mm/yyyy")
     
          ' Dans le cas où le choix est effectué sur le DTPicker1
          If Datefin < Datedebut Then
               Select Case MsgBox("La date de fin ne peut être inférieure à la date de début", vbOKOnly + vbCritical, "Saisie date incorrect")
                Case vbOKOnly
                Exit Sub
            End Select
     
          Else
     
    ListBox1.Clear
     
     
    Dim i As Integer
    With ListBox1
        .Clear
        .ColumnCount = 2
        .ColumnWidths = "50;0"
    End With
     
    With Sheets("Modifier")
     
    ' Si le statut est "En cours" ou "Attente chgt" alors on affiche la commande dans l'écran de suivi
        For i = 5 To .Range("a100000").End(xlUp).Row
            If .Cells(i, 15) >= Datedebut And .Cells(i, 15) <= Datefin Then
     
                'Si pas de quai et "Attente chgt"
                If .Cells(i, 11) = "" And .Cells(i, 17) = "Attente chgt" Then
                ListBox1.AddItem
                ListBox1.List(ListBox1.ListCount - 1, 0) = "  " & "           " & .Cells(i, 17) & "     " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)
     
                Else
                'si pas de quai et "En cours"
                If .Cells(i, 11) = "" And .Cells(i, 17) = "En cours" Then
                ListBox1.AddItem
                ListBox1.List(ListBox1.ListCount - 1, 0) = "  " & "           " & .Cells(i, 17) & "            " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)
     
                Else
                'si quai et "Attente chgt"
                If .Cells(i, 17) = "Attente chgt" Then
                ListBox1.AddItem
                ListBox1.List(ListBox1.ListCount - 1, 0) = .Cells(i, 11) & "       " & .Cells(i, 17) & "     " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)
     
                Else
                'si quai et "En cours"
                If .Cells(i, 17) = "En cours" Then
                ListBox1.AddItem
                ListBox1.List(ListBox1.ListCount - 1, 0) = .Cells(i, 11) & "       " & .Cells(i, 17) & "            " & .Cells(i, 1) & "         " & .Cells(i, 15) & "         " & Sheets("Formulaire").Cells(i, 3) & "             " & .Cells(i, 3) & "     " & .Cells(i, 4)
            End If
    End If
    End If
    End If
    End If
     
    Next i
     
    End With
     
     
    'Dim x As Range
    '
    '    With ListBox1
    '    For Each x In Feuil1.Range("O5:O" & Range("O100000").End(xlUp).Row)
    '
    '            If x.Value >= Datedebut And x.Value <= Datefin Then
    '
    '                .AddItem x(1, -4)
    '                .List(.ListCount - 1, 1) = x(1, -3)
    '                .List(.ListCount - 1, 2) = x(1, -2)
    '                .List(.ListCount - 1, 3) = x(1, -1)
    '                .List(.ListCount - 1, 4) = x(1, 0)
    '                .List(.ListCount - 1, 5) = x(1, 1)
    '                .List(.ListCount - 1, 6) = x(1, 2)
    '
    '          End If
    '    Next x
    '    End With
     
        End If
    End Sub

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

Discussions similaires

  1. Ajouter dans une listbox en utilisant un bouton
    Par soumer dans le forum Interfaces Graphiques
    Réponses: 12
    Dernier message: 03/07/2011, 23h02
  2. Réponses: 3
    Dernier message: 15/02/2011, 14h55
  3. [AC-2007] Filtrer une requête en utilisant le menu du nom du champ
    Par Apranax dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 27/10/2010, 10h58
  4. Filtrer une Listbox en fonction d'informations saisies par l'utilisateur
    Par navorinco dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/05/2009, 17h30
  5. [D7] filtrer une ensemble en utilisant l'année
    Par iam dans le forum Bases de données
    Réponses: 5
    Dernier message: 16/01/2007, 10h27

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