XL 2019 Array avec filtre VBA

Ron74

XLDnaute Nouveau
Bonjour a tous
Je voudrais savoir s'il est possible de faire un tableau en VBA qui n'a comme donnée que les données de la "salle 3-5" par exemple.
Pour n'avoir dans mon tableau VBA que les ligne 1-2-3-9
merci de votre aide
 

Pièces jointes

  • Classeur1.xlsx
    10.4 KB · Affichages: 3
Solution
Bonjour,


VB:
Sub filtreArrayClé()
  Set f = Sheets("Reservations")
  Tbl1 = f.Range("A2:K" & f.[A65000].End(xlUp).Row).Value
  clé = "Salle 3-5"
  For i = 1 To UBound(Tbl1)
    If Tbl1(i, 11) = clé Then n = n + 1
  Next i
  j = 0
  Dim Tbl2: ReDim Tbl2(1 To n, 1 To UBound(Tbl1, 2))
  For i = 1 To UBound(Tbl1)
    If Tbl1(i, 11) = clé Then j = j + 1: For k = 1 To UBound(Tbl1, 2): Tbl2(j, k) = Tbl1(i, k): Next k
   Next i
   f.[M2].Resize(UBound(Tbl2), UBound(Tbl2, 2)) = Tbl2
End Sub

Avec une fonction

Code:
Sub EssaifiltreArrayFonctionCol()
  Set f = Sheets("Reservations")
  Tbl1 = f.Range("A2:K" & f.[A65000].End(xlUp).Row).Value
  Tbl = FiltreArrayCléColRécup(Tbl1, "Salle 3-5", 11, Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
  If Not IsEmpty(Tbl)...

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,


VB:
Sub filtreArrayClé()
  Set f = Sheets("Reservations")
  Tbl1 = f.Range("A2:K" & f.[A65000].End(xlUp).Row).Value
  clé = "Salle 3-5"
  For i = 1 To UBound(Tbl1)
    If Tbl1(i, 11) = clé Then n = n + 1
  Next i
  j = 0
  Dim Tbl2: ReDim Tbl2(1 To n, 1 To UBound(Tbl1, 2))
  For i = 1 To UBound(Tbl1)
    If Tbl1(i, 11) = clé Then j = j + 1: For k = 1 To UBound(Tbl1, 2): Tbl2(j, k) = Tbl1(i, k): Next k
   Next i
   f.[M2].Resize(UBound(Tbl2), UBound(Tbl2, 2)) = Tbl2
End Sub

Avec une fonction

Code:
Sub EssaifiltreArrayFonctionCol()
  Set f = Sheets("Reservations")
  Tbl1 = f.Range("A2:K" & f.[A65000].End(xlUp).Row).Value
  Tbl = FiltreArrayCléColRécup(Tbl1, "Salle 3-5", 11, Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
  If Not IsEmpty(Tbl) Then f.[M12].Resize(UBound(Tbl), UBound(Tbl, 2) - LBound(Tbl, 2) + 1) = Tbl
End Sub

Function FiltreArrayCléColRécup(Tbl, clé, colClé, colRécup)
  n = 0
  For i = 1 To UBound(Tbl)
    If Tbl(i, colClé) = clé Then n = n + 1
  Next i
  Dim Tbl2(): ReDim Tbl2(1 To n, LBound(colRécup) To UBound(colRécup))
  n = 0
  For i = 1 To UBound(Tbl)
    If Tbl(i, colClé) = clé Then
        n = n + 1
        For k = LBound(colRécup) To UBound(colRécup): Tbl2(n, k) = Tbl(i, colRécup(k)): Next k
    End If
  Next i
  If n > 0 Then FiltreArrayCléColRécup = Tbl2
End Function

Filtre tableau par combobox


Boisgontier
 

Pièces jointes

  • Copie de Classeur1.xlsm
    20.5 KB · Affichages: 9
  • Copie de FormRechercheComboBox2.xlsm
    41.6 KB · Affichages: 11
Dernière édition:

Discussions similaires

Réponses
31
Affichages
368