Microsoft 365 Listbox et Tableau filtré

eric72

XLDnaute Accro
Bonjour à tous,
Je rencontre un problème pour charger des données dans une listbox à partir d'un tableau structuré Filtré, en effet dans mon tableau je filtre en ne gardant que le commercial "a", mais quand je charge la listbox ils sont tous là, est-il possible de ne charger que les lignes filtrées et donc modifier les données et le remettre dans le tableau à la bonne ligne?
Je m'en remets à votre savoir!!!
Merci beaucoup
Eric
 

Pièces jointes

  • TEST.xlsm
    216.7 KB · Affichages: 5
Solution
Mon code du post #5 est facile à comprendre, il suffit de l'adapter.

J'ai donc modifié la macro UserForm_Initialize de UsfCommande avec ceci :
VB:
  '--- valeurs initiales dans ListBox
  Dim r As Range, n&
  For Each r In rng.Rows
    If Not r.Hidden Then n = n + 1
  Next r
  Dim Tbl(): ReDim Tbl(1 To n, 1 To Ncol + 1)
  n = 0
  For i = 1 To UBound(BD)
    If Not rng.Rows(i).Hidden Then
        n = n + 1
        C = 0
        For Each k In colVisu
            C = C + 1: Tbl(n, C) = BD(i, k)
        Next k
        C = C + 1: Tbl(n, C) = i + Decal
        Tbl(n, 5) = Format(Tbl(n, 5), "0# ## ## ## ##")
   End If
 Next i

ChTi160

XLDnaute Barbatruc
Bonjour Éric
Il y sur les forum des exemples de récupération des lignes résultat d'un filtre(faire une recherche)
Voir au bas de cette page...
Un extrait d'un code .
VB:
Dim VisibleRange As Range
Dim area
x=0
 Set VisibleRange = TableauStructure.DataBodyRange.SpecialCells(xlCellTypeVisible)
For Each area In visibleRange.Areas 'On boucle sur les zones du Filtre
    For Each Ligne In area.Rows 'On boucle sur les Lignes de chaque Zone du Filtre
          x = x + 1
         For Col = 1 To 4 'On va récupérer dans l'exemple les 4 valeurs des Quatre colonnes de la Ligne visible
              TabRecup(1 + Col, x) = Ligne.Cells(1, Col).Value
    Next
Next
la on change un tableau
Jean marie
 

eric72

XLDnaute Accro
Bonjour Éric
Il y sur les forum des exemples de récupération des lignes résultat d'un filtre(faire une recherche)
Voir au bas de cette page...
Un extrait d'un code .
VB:
Dim VisibleRange As Range
Dim area
x=0
 Set VisibleRange = TableauStructure.DataBodyRange.SpecialCells(xlCellTypeVisible)
For Each area In visibleRange.Areas 'On boucle sur les zones du Filtre
    For Each Ligne In area.Rows 'On boucle sur les Lignes de chaque Zone du Filtre
          x = x + 1
         For Col = 1 To 4 'On va récupérer dans l'exemple les 4 valeurs des Quatre colonnes de la Ligne visible
              TabRecup(1 + Col, x) = Ligne.Cells(1, Col).Value
    Next
Next
la on change un tableau
Jean marie
Bonjour Jean-Marie,
Merci pour ta réponse, ce qui veut dire que je dois remplacer ma procédure Initialize ou l'inclure dedans? Si oui a quel endroit dois-je l'inclure, je ne comprends pas bien.
Merci
 

job75

XLDnaute Barbatruc
Bonjour eric72, ChTi160,

Bien que le VBA soit protégé il est facile de voir que la ListBox a 12 colonnes.

En supposant qu'elle se nomme ListBox1 placez dans le code de l'UserForm concerné :
VB:
Private Sub UserForm_Initialize()
Dim r As Range, n&, col%
With [TbCommande]
    For Each r In .Rows
        If Not r.Hidden Then n = n + 1
    Next r
    ReDim tablo(1 To n, 1 To 12)
    n = 0
    For Each r In .Rows
        If Not r.Hidden Then
            n = n + 1
            For col = 1 To 10
                tablo(n, col) = r.Cells(col)
            Next col
            tablo(n, 11) = r.Cells(15)
            tablo(n, 12) = r.Cells(24)
        End If
    Next r
End With
ListBox1.List = tablo
End Sub
A+
 

eric72

XLDnaute Accro
Bonjour eric72, ChTi160,

Bien que le VBA soit protégé il est facile de voir que la ListBox a 12 colonnes.

En supposant qu'elle se nomme ListBox1 placez dans le code de l'UserForm concerné :
VB:
Private Sub UserForm_Initialize()
Dim r As Range, n&, col%
With [TbCommande]
    For Each r In .Rows
        If Not r.Hidden Then n = n + 1
    Next r
    ReDim tablo(1 To n, 1 To 12)
    n = 0
    For Each r In .Rows
        If Not r.Hidden Then
            n = n + 1
            For col = 1 To 10
                tablo(n, col) = r.Cells(col)
            Next col
            tablo(n, 11) = r.Cells(15)
            tablo(n, 12) = r.Cells(24)
        End If
    Next r
End With
ListBox1.List = tablo
End Sub
A+
Bonjour Job75,
Merci pour votre réponse, voilà mon vba non protégé
 

Pièces jointes

  • TEST.xlsm
    212.3 KB · Affichages: 2

eric72

XLDnaute Accro
Bonjour eric72, ChTi160,

Bien que le VBA soit protégé il est facile de voir que la ListBox a 12 colonnes.

En supposant qu'elle se nomme ListBox1 placez dans le code de l'UserForm concerné :
VB:
Private Sub UserForm_Initialize()
Dim r As Range, n&, col%
With [TbCommande]
    For Each r In .Rows
        If Not r.Hidden Then n = n + 1
    Next r
    ReDim tablo(1 To n, 1 To 12)
    n = 0
    For Each r In .Rows
        If Not r.Hidden Then
            n = n + 1
            For col = 1 To 10
                tablo(n, col) = r.Cells(col)
            Next col
            tablo(n, 11) = r.Cells(15)
            tablo(n, 12) = r.Cells(24)
        End If
    Next r
End With
ListBox1.List = tablo
End Sub
A+
J'aimerais intégrer votre code dans mon code actuel pour ne pas prendre le risque de tout perturber mais je ne suis pas assez doué pour le faire, je n'ai jamais rencontré ce besoin auparavant donc un peu perdu...
Merci de votre aide.
 

eric72

XLDnaute Accro
La ListBox se nomme List et la macro UserForm_Initialize existe déjà.

C'est une usine à gaz, si le code n'est pas de vous demandez à l'auteur de le modifier.
Pour me permettre de progresser, La listbox se nomme "Lst", pouvez-vous m'indiquer les raisons pour lesquelles c'est une "Usine à Gaz", en fait c'est un code que j'ai tenté d'adapter pour mon cas mais apparemment je ne l'ai pas bien fait...
Merci
 

job75

XLDnaute Barbatruc
Mon code du post #5 est facile à comprendre, il suffit de l'adapter.

J'ai donc modifié la macro UserForm_Initialize de UsfCommande avec ceci :
VB:
  '--- valeurs initiales dans ListBox
  Dim r As Range, n&
  For Each r In rng.Rows
    If Not r.Hidden Then n = n + 1
  Next r
  Dim Tbl(): ReDim Tbl(1 To n, 1 To Ncol + 1)
  n = 0
  For i = 1 To UBound(BD)
    If Not rng.Rows(i).Hidden Then
        n = n + 1
        C = 0
        For Each k In colVisu
            C = C + 1: Tbl(n, C) = BD(i, k)
        Next k
        C = C + 1: Tbl(n, C) = i + Decal
        Tbl(n, 5) = Format(Tbl(n, 5), "0# ## ## ## ##")
   End If
 Next i
 

Pièces jointes

  • TEST.xlsm
    250.7 KB · Affichages: 6

eric72

XLDnaute Accro
Mon code du post #5 est facile à comprendre, il suffit de l'adapter.

J'ai donc modifié la macro UserForm_Initialize de UsfCommande avec ceci :
VB:
  '--- valeurs initiales dans ListBox
  Dim r As Range, n&
  For Each r In rng.Rows
    If Not r.Hidden Then n = n + 1
  Next r
  Dim Tbl(): ReDim Tbl(1 To n, 1 To Ncol + 1)
  n = 0
  For i = 1 To UBound(BD)
    If Not rng.Rows(i).Hidden Then
        n = n + 1
        C = 0
        For Each k In colVisu
            C = C + 1: Tbl(n, C) = BD(i, k)
        Next k
        C = C + 1: Tbl(n, C) = i + Decal
        Tbl(n, 5) = Format(Tbl(n, 5), "0# ## ## ## ##")
   End If
 Next i
Oui en effet cela parait si simple.
1000 Mercis pour le coup de main.
j'en profite pour vous souhaiter un joyeux noel à vous et votre famille.
Eric
 

Discussions similaires

Réponses
25
Affichages
660

Statistiques des forums

Discussions
312 209
Messages
2 086 259
Membres
103 167
dernier inscrit
miriame