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 :

Données filtrées d'un Listobject placé dans une listbox sur Userform


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 Données filtrées d'un Listobject placé dans une listbox sur Userform
    Bonjour,

    je galère : mon code n'affiche plus les lignes filtrées.
    Oui, oui, mon code affichait les bonnes lignes et j'ai modifié plusieurs choses.
    Maintenant, il n'affiche plus les lignes filtrées sur la feuille Excel.
    Je ne comprends plus. J'ai testé différentes déclarations de plage filtrée mais rien n'y fait.

    Je fais appel à vous.

    ESVBA

    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
    Sub testremplissage()
        Dim Tmp          As String
        Dim Plage        As Range
        Dim PlageFiltree As Range
        Dim i As Long                   'N° ligne dans la listbox
        Dim K As Integer                ' K colonne du tableau et de la listbox
        Dim Cel As Range                'Cellule filtrée de la première colonne
     
        Set Plage = Worksheets("Dates Annuelles Générées").Range("A2", Range("A65536").End(xlUp)).Resize(, 1)
        Set PlageFiltree = Plage.SpecialCells(xlCellTypeVisible)
     
        i = 0
        For Each Cel In PlageFiltree
            Me.LstHoraire.AddItem Format(i + 1, "000")         'Me.LstHoraire.List(i, 0) = Format(i, "000")
            For K = 1 To 9
                Select Case K
                    Case 7, 8
                        Tmp = Format(Cel.Offset(i, K - 1).Value, "hh:mm")
                    Case Else
                        Tmp = Cel.Offset(i, K - 1).Value
                End Select
     
                Me.LstHoraire.List(i, K) = Tmp
            Next K
            i = i + 1
        Next Cel
    End Sub
    Merci de votre aide.

  2. #2
    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
    Je viens de constater :

    le filtre est fait sur une date, la feuille de calcul m'affiche correctement les dates correspondantes.

    L'erreur de remplissage de la Listbox est uniquement sur la colonne de dates (les dates proviennent bien de la base) mais ne correspondent pas toutes à la date filtrée !

    Toutes les autres colonnes sont correctement remplies avec les bonnes valeurs.

    J'ai déjà essayer de modifier le format de remplissage dans la listbox rien n'y fait.

    Dans la feuille, les dates sont au format "Lun 03/10/2022" et je souhaite simplement un format "03/10/2022" (3 octobre).

    H'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    Case 1
                    MsgBox "<" & Cel.Offset(i, K - 1).Value & ">"
                        Tmp = Format(Cel.Offset(i, K - 1).Value, "dd/mm/yyyy")
    mais rien n'y fait.

    Les dates affichées par la MSGBOX ne sont pas les bonnes.

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

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 290
    Par défaut
    Salut
    Je ne vois pas à partir de L9 de votre macro Post#1 la fonction AutoFilter !
    Quelle est alors l'utilité en L10 de SpecialCells(xlCellTypeVisible) ?

    Et êtes-vous dans un tableau structuré (intitulé de votre Post#1) ou dans un tableau "normal" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets(1).Range(Cells(1, 1), Cells(Range("A" & Rows.Count).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column)).AutoFilter Field:=2, Criteria1:="Product A"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets(1).ListObjects("Tableau1").Range.AutoFilter Field:=2, Criteria1:="Product A"

  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 Bonjour Hyperion13,
    Merci de te pencher sur mon problème.

    Il s'agit d'un tableau structuré de type "Listobject".

    Oui, je n'ai pas mis le code du filtre ; il n'était pas fini, cette fois c'est fait.
    Je le joins mais sans rapport avec mon problème de balayer toutes les valeurs visibles (filtrées).

    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
        '--- Efface la "Listbox" car on a un nouveau choix de date
        LstHoraire.Clear
     
        '--- Filtrage
        ' Efface le filtre si existant
        If Feuil14.FilterMode Then
            Feuil14.ListObjects("TabHoraireHebdo").Range.AutoFilter
        End If
     
        '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
     
        'ATTENTION +15 A SUPPRIME PAR LA SUITE
        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
     
        '--- Rempli un tableau des valeurs filtrées
        Call testremplissage
    Mon Code de remplissage de la "Listbox" :
    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 testremplissage()
        Dim Tmp          As String
        Dim Plage        As Range
        Dim PlageFiltree As Range
        Dim i As Long                   'N° ligne dans la listbox
        Dim K As Integer                ' K colonne du tableau et de la listbox
        Dim Cel As Range                'Cellule filtrée de la première colonne
     
        'Set Plage = Worksheets("Dates Annuelles Générées").Range("A2", Range("i65536").End(xlUp)).Resize(, 1) .Rows
        Set Plage = Worksheets("Dates Annuelles Générées").Range("A2", Range("A65536").End(xlUp))  
        'A FAIRE : ICi gérer plage vide
        Set PlageFiltree = Plage.SpecialCells(xlCellTypeVisible)
     
       'Même réponse avec la ligne suivante
       'Set PlageFiltree = Worksheets("Dates Annuelles Générées").ListObjects("TabHoraireHebdo").ListColumns("Dates").DataBodyRange.SpecialCells(xlCellTypeVisible)
     
        i = 0
        For Each Cel In PlageFiltree.Rows
            'MsgBox Cel.Cells(1).Value             'Offset(i, 2).Value
            Me.LstHoraire.AddItem Format(i + 1, "000")         'Me.LstHoraire.List(i, 0) = Format(i, "000")
            For K = 1 To 9
                Select Case K
                    Case 1
                        Tmp = Format(Cel.Offset(i, K - 1).Value2, "dd/mm/yyyy")
                    Case 7, 8
                        Tmp = Format(Cel.Offset(i, K - 1).Value, "hh:mm")
                    Case Else
                        Tmp = Cel.Offset(i, K - 1).Value
                End Select
     
                Me.LstHoraire.List(i, K) = Tmp
            Next K
            i = i + 1
        Next Cel
    End Sub


    Voici ce que j'obtiens :Nom : captureecran.png
Affichages : 294
Taille : 117,5 Kooui, il y a un décalage de 15 jours entre le bouton cliqué et la valeur du filtre. C'est normal, c'est pour avoir des valeurs.


    LES DATES NE CORRESPONDENT PAS MAIS LES AUTRES COLONNES OUI. LA SELECTION EST BONNE, C'EST L'INTERPRETATION DES DATES ?
    J'ai utilisé ".Value" et ".Value2" (spécifique aux dates)

    Merci de ton aide.
    Images attachées Images attachées  

  5. #5
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 039
    Par défaut
    Bonjour,
    Cela vient peut-être de
    Pour rester sur la même ligne il faut faire

  6. #6
    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
    bonjour laurent_ott,

    et si je disais "BIEN VU".

    Merci laurent_ott, c'est la solution.


    Quant on ne veut pas voir, on ne voit pas.

    Merci à toi.

    RESOLU

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

Discussions similaires

  1. [XL-2007] Validation de choix dans une ListBox de UserForm
    Par Almanzor dans le forum Excel
    Réponses: 2
    Dernier message: 04/06/2017, 07h52
  2. Rapatrier des données filtrées dans une listbox
    Par starius dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/01/2009, 13h21
  3. Réponses: 7
    Dernier message: 04/04/2007, 18h51
  4. Réponses: 1
    Dernier message: 22/09/2006, 11h19

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