Menu

Alimenter Listbox depuis plusieurs feuilles

-
Bonjour,
Mon nouveau problème!
J'ai le même tableau en feuille 2,3,4,5 et 6. (6 n'est pas la dernière feuille).
Ces feuilles correspond et porte le nom des années, 2019, 2020, 2021, 2022, 2023.

J'ai créer un Userform pour faire un "moteur de recherche" assez basic sur ces tableaux.
J'ai trouvé un code que j'ai adapté mais uniquement sur une feuille.
J'ai besoin que toutes les feuilles ci-dessus alimentes la listbox.

Le code que j'ai trouvé pour le moment:

Dim f, choix(), Rng, Ncol

Private Sub UserForm_Initialize()

Set f = Sheets("2019")

Set Rng = f.Range("A11:G" & f.[a65000].End(xlUp).Row)
Ncol = Rng.Columns.Count

'---- entêtes ListBox
Me.ListBox1.ColumnCount = Ncol
Me.ListBox1.ColumnWidths = 35 & ";" & 80 & ";" & 110 & ";" & 60 & ";" & 60 & ";" & 150 & ";" & 60
'--
TblTmp = Rng.Value
For I = LBound(TblTmp) To UBound(TblTmp)
ReDim Preserve choix(1 To I)
For k = LBound(TblTmp) To UBound(TblTmp, 2)
choix(I) = choix(I) & TblTmp(I, k) & " * "
Next k
Next I
Me.ListBox1.List = Rng.Value
End Sub
Private Sub TextBox1_Change()
If Me.TextBox1 <> "" Then
mots = Split(Trim(Me.TextBox1), " ")
Tbl = choix
For I = LBound(mots) To UBound(mots)
Tbl = Filter(Tbl, mots(I), True, vbTextCompare)
Next I
If UBound(Tbl) > -1 Then
Dim b(): ReDim b(1 To UBound(Tbl) + 1, 1 To Ncol)
For I = LBound(Tbl) To UBound(Tbl)
a = Split(Tbl(I), "*")
For k = 1 To Ncol: b(I + 1, k) = a(k - 1): Next k
Next I
Me.ListBox1.List = b
' Me.Label1.Caption = UBound(Tbl) + 1
End If
Else
UserForm_Initialize
End If
End Sub


D'avance merci pour votre aide.
Afficher la suite 

Votre réponse

1 réponse

Messages postés
481
Date d'inscription
mardi 5 juin 2018
Dernière intervention
25 mars 2019
35
0
Merci
Bonjour,

Essaie :

Dim f, choix(), Rng, Ncol

Private Sub UserForm_Initialize()
Dim Ctr As Long, X As Integer, Y As Integer
'car = Application.Transpose(Tbl)
For i = 2 To 6
  Set f = Sheets(i)
  Set Rng = f.Range("A11:G" & f.[a65000].End(xlUp).Row)
  For X = 1 To Rng.Rows.Count
    Me.ListBox1.AddItem f.Cells(Rng.Row - 1 + X, 1)
    For Y = 2 To 7
      With Me.ListBox1
        .List(.ListCount - 1, Y - 1) = f.Cells(Rng.Row - 1 + X, Y)
      End With
    Next Y
  Next X
Next i
Ncol = Rng.Columns.Count
'---- entêtes ListBox
Me.ListBox1.ColumnCount = Ncol
Me.ListBox1.ColumnWidths = 35 & ";" & 80 & ";" & 110 & ";" & 60 & ";" & 60 & ";" & 150 & ";" & 60
'--
TblTmp = Rng.Value
For i = LBound(TblTmp) To UBound(TblTmp)
ReDim Preserve choix(1 To i)
For k = LBound(TblTmp) To UBound(TblTmp, 2)
choix(i) = choix(i) & TblTmp(i, k) & " * "
Next k
Next i
End Sub
Private Sub TextBox1_Change()
If Me.TextBox1 <> "" Then
mots = Split(Trim(Me.TextBox1), " ")
Tbl = choix
For i = LBound(mots) To UBound(mots)
Tbl = Filter(Tbl, mots(i), True, vbTextCompare)
Next i
If UBound(Tbl) > -1 Then
Dim b(): ReDim b(1 To UBound(Tbl) + 1, 1 To Ncol)
For i = LBound(Tbl) To UBound(Tbl)
a = Split(Tbl(i), "*")
For k = 1 To Ncol: b(i + 1, k) = a(k - 1): Next k
Next i
Me.ListBox1.List = b
' Me.Label1.Caption = UBound(Tbl) + 1
End If
Else
UserForm_Initialize
End If
End Sub


Cordialement.

Daniel
-
Bonjour Daniel,

Merci pour l'intérêt!!

Ton code alimente bien la liste avec toutes les feuilles TOP!
Mais par contre la fonction recherche ne fonctionne plus??
Une idée ?

Cordialement.
danielc0
Messages postés
481
Date d'inscription
mardi 5 juin 2018
Dernière intervention
25 mars 2019
35 > LeDbutantVBAFou -
Je me suis focalisé sur l'alimentation de la listbox. Par contre, je ne sais pas comment fonctionne la recherche. Est-ce que tu as une idée ?

Daniel
Commenter la réponse de danielc0