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 :

Récupérer des valeurs filtrés dans un tableau structuré


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut Récupérer des valeurs filtrés dans un tableau structuré
    Bonjour ou re bonjour,

    je ne parviens à récupérer les valeurs filtrés d'un tableau structuré.
    Le tableau est filtré sur la colonne "Client", et selon le client la colonne situé à droite affiche les intitulés d'affaires.
    J'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim TabChoix()
        ActiveSheet.ListObjects("T_Affaire").Range.AutoFilter Field:=2, Criteria1:=Range("G20").Value
        Range("T_Affaire[Intitulé]").Select
        TabChoix = Application.Transpose(Selection)
        For Each Data In TabChoix
            Debug.Print Data
        Next
    Dans tout les cas, j'ai la liste non filtré. J'imagine que dans le ListObjects("De_mon_tableau") je devrait pouvoir trouver la méthode qui me permettrai de récupérer les valeurs filtrées... Mais laquelle?

    Merci d'avance pour vos indications.

  2. #2
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    Il y aurait ça qui fonctionne pour copier vers une plage de cellule et qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("ListeText").ListObjects("T_Affaire").ListColumns(3).DataBodyRange.Copy destination:=Sheets("ListeText").Range("Y1")
    Mais quand j'essaie ceci, j'ai une incompatibilité de type.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choix2 = Application.Transpose(Sheets("ListeText").ListObjects("T_Affaire").ListColumns(3).DataBodyRange.Value)
    Je vais fouiner du côté de "Transpose") voir comment que ça marche...

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à toi, Bonjour au Forum,

    Il te suffit de ^rendre en compte les cellules visibles des données de ton tableau structuré (ou bien celles d'une colonne donnée)
    Sachant que l'objet DataBodyRange est avant tout un objet Range.
    A priori donc, toutes les méthodes et propriétés peuvent lui être affectées.

    A adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
     
    Public Sub copyfiltr()
     
    With Worksheets(1)
            .ListObjects("Tableau1").DataBodyRange.SpecialCells(xlCellTypeVisible).Copy _
                    Destination:=.Range("M1")
            Application.CutCopyMode = False
    End With
     
    End Sub

  4. #4
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    Bonjour et merci Marcel,
    pour l'occasion je recopie dans un autre tableau structuré qui alimente ma combobox.list.

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour weetoz, Bonjour le Forum

    Ci-dessous un code gérant les actions suivantes
    - filtre sur une colonne de la liste d'un premier tableau T1
    - vide le corps de cellules d'un 2ème tableau T2
    - recopie vers T2 les données filtrées de T1
    - alimentation d'un contrôle ListBox d'un formulaire

    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
    Option Explicit
     
    Sub essai_listbox()
     
    Dim numchamp As Integer
    Dim T1 As Object, T2 As Object
    Dim cellsResult As Range
     
    Set T1 = Worksheets(1).ListObjects("Tableau1")
    Set T2 = Worksheets(2).ListObjects("Tableau2")
     
    With T1
            If .ShowAutoFilter = True Then .AutoFilter.ShowAllData
    End With
     
    With T2
            If .ShowAutoFilter = True Then .AutoFilter.ShowAllData
            If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
    End With
     
    With T1
            'Recherche du champ à trier
            numchamp = .ListColumns("parent").Index
            'Filtre
            .Range.AutoFilter _
                    Field:=numchamp, Criteria1:="papa"
           Set cellsResult = .ListColumns("véhicule").DataBodyRange.SpecialCells(xlCellTypeVisible)
           cellsResult.Copy Destination:=T2.ListColumns("Voiture").Range.Cells(2, 1).Resize(cellsResult.Count, 1)
    End With
     
    Application.CutCopyMode = False
     
    With UserForm1
            .Lbx_parent.List = T2.ListColumns("Voiture").DataBodyRange.Value
            .Show
    End With
     
    Set T2 = Nothing
    Set T1 = Nothing
     
    End Sub

  6. #6
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    Bonjour et merci MarcelG,

    très lisible! Mais je cache une partie de la vérité... Je sais, c'est mal!
    Plus concrètement, j'ai trois combobox, deux en cascades, et une en parallèle des deux autres, avec saisie auto filtrante.
    J'ai pu avancer sur ce point, j'arrive à présent à récupérer mes données, donc je mets ce sujet en résolu avec le p'tit bout de code qui va bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub listNumAff()
        Sheets("ListeText").ListObjects("T_Affaire").Range.AutoFilter
        choix3 = Application.Transpose([T_Affaire[Num]])
        Set d3 = CreateObject("Scripting.Dictionary")
        For Each c In choix3
            If c <> "" Then d3(c) = ""
        Next
        TblChoix3 = d3.Keys
        Me.CB_NumAff.List = d3.Keys
        Me.CB_NumAff = Target
        Me.CB_NumAff.Visible = True
        Me.CB_NumAff.DropDown
    End Sub
    L'idée de faire une variable objet sur chaque tableau est propre, je voudrais aller un peu plus loin dans ce sens, mais ce sera dans un autre topic dédié.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/02/2018, 23h09
  2. Réponses: 2
    Dernier message: 04/03/2008, 10h48
  3. Récupérer des valeurs multiples dans un DBGrid
    Par Antjac dans le forum Bases de données
    Réponses: 7
    Dernier message: 17/12/2007, 21h44
  4. Manipulation des valeurs contenues dans un tableau
    Par khasanouray dans le forum Langage
    Réponses: 3
    Dernier message: 29/05/2007, 21h36
  5. [Débutant] Récupérer des valeurs affichées dans des cases "Edit"
    Par Clint-is-wood dans le forum Interfaces Graphiques
    Réponses: 26
    Dernier message: 24/05/2007, 19h19

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