XL 2019 Recherchez et filtrez plusieurs feuilles spécifiques dans la listbox userform conditions et date

Dadi147

XLDnaute Occasionnel
Bonjour. J’ai un userform pour filtrer les données d’une feuille spécifique sous deux conditions avec la possibilité de spécifier la première date de la recherche et la dernière date. Mais je veux rechercher plusieurs documents spécifiques dans le cahier d’exercices. La gamme de données dans les feuilles est uniforme.
 

Pièces jointes

  • FormFiltre.xlsm
    53.8 KB · Affichages: 7
Solution
Bonjour Dadi,
Une solution pourrait passer par un seul tableau regroupant tous vos tableaux.
Vous pouvez vous inspirer du site de notre ami Jacques : http://boisgontierj.free.fr/index2.htm
Voir liens post #9 de https://excel-downloads.com/threads...iable-tableau-a-la-suite-du-tableau.20001623/

Ce qui donnerait dans votre userform :

VB:
Dim TblBD(), nomTableau, NbCol, ColVisu(), Dates(), Choix()
Private Sub UserForm_Initialize()
  ' Les 3 tableaux sont mis les uns derrère les autres.
  Dim Tablo1, Tablo175, Tablo176, T
  Tablo1 = [Tableau1]: Tablo175 = [Tableau175]: Tablo176 = [Tableau176]
  TblBD = MergeArray2DVert(Tablo1, Tablo175)
  TblBD = MergeArray2DVert(TblBD, Tablo176)
...
...
...
avec la fonction perso ...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Dadi,
Une solution pourrait passer par un seul tableau regroupant tous vos tableaux.
Vous pouvez vous inspirer du site de notre ami Jacques : http://boisgontierj.free.fr/index2.htm
Voir liens post #9 de https://excel-downloads.com/threads...iable-tableau-a-la-suite-du-tableau.20001623/

Ce qui donnerait dans votre userform :

VB:
Dim TblBD(), nomTableau, NbCol, ColVisu(), Dates(), Choix()
Private Sub UserForm_Initialize()
  ' Les 3 tableaux sont mis les uns derrère les autres.
  Dim Tablo1, Tablo175, Tablo176, T
  Tablo1 = [Tableau1]: Tablo175 = [Tableau175]: Tablo176 = [Tableau176]
  TblBD = MergeArray2DVert(Tablo1, Tablo175)
  TblBD = MergeArray2DVert(TblBD, Tablo176)
...
...
...
avec la fonction perso :
Code:
Function MergeArray2DVert(a, b)
   maxtab1 = UBound(a)
   Dim Tbl(): ReDim Tbl(1 To UBound(a) + UBound(b), 1 To UBound(a, 2))
   For i = LBound(a) To UBound(a)
     For c = 1 To UBound(a, 2): Tbl(i, c) = a(i, c): Next
   Next i
   For i = 1 To UBound(b)
     For c = 1 To UBound(b, 2): Tbl(maxtab1 + i, c) = b(i, c): Next
   Next i
   MergeArray2DVert = Tbl
End Function
Voir PJ pour simple test.
 

Pièces jointes

  • FormFiltre.xlsm
    55 KB · Affichages: 6

Dadi147

XLDnaute Occasionnel
Bonjour Dadi,
Une solution pourrait passer par un seul tableau regroupant tous vos tableaux.
Vous pouvez vous inspirer du site de notre ami Jacques : http://boisgontierj.free.fr/index2.htm
Voir liens post #9 de https://excel-downloads.com/threads...iable-tableau-a-la-suite-du-tableau.20001623/

Ce qui donnerait dans votre userform :

VB:
Dim TblBD(), nomTableau, NbCol, ColVisu(), Dates(), Choix()
Private Sub UserForm_Initialize()
  ' Les 3 tableaux sont mis les uns derrère les autres.
  Dim Tablo1, Tablo175, Tablo176, T
  Tablo1 = [Tableau1]: Tablo175 = [Tableau175]: Tablo176 = [Tableau176]
  TblBD = MergeArray2DVert(Tablo1, Tablo175)
  TblBD = MergeArray2DVert(TblBD, Tablo176)
...
...
...
avec la fonction perso :
Code:
Function MergeArray2DVert(a, b)
   maxtab1 = UBound(a)
   Dim Tbl(): ReDim Tbl(1 To UBound(a) + UBound(b), 1 To UBound(a, 2))
   For i = LBound(a) To UBound(a)
     For c = 1 To UBound(a, 2): Tbl(i, c) = a(i, c): Next
   Next i
   For i = 1 To UBound(b)
     For c = 1 To UBound(b, 2): Tbl(maxtab1 + i, c) = b(i, c): Next
   Next i
   MergeArray2DVert = Tbl
End Function
Voir PJ pour simple test.
Un très beau travail qui mérite des éloges. Merci beaucoup, c'est ce qu'il faut vraiment.
 

Dadi147

XLDnaute Occasionnel
Merci. Cela fonctionne vraiment bien pour moi. Juste pour plus de précisions, que puis-je changer ici pour obtenir le numéro de ligne afin de pouvoir ajouter les codes de modification et de suppression ?

Me.Enreg = Range(nomTableau).Rows.Count + 1
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Deux approches possibles, voir PJ bouton vert :
VB:
Sub NbLigne()
  ' Les 3 tableaux sont mis les uns derrère les autres.
  Dim Tablo1, Tablo175, Tablo176, T
  Tablo1 = [Tableau1]: Tablo175 = [Tableau175]: Tablo176 = [Tableau176]
  TblBD = MergeArray2DVert(Tablo1, Tablo175)
  TblBD = MergeArray2DVert(TblBD, Tablo176)
  ' 1ere approche
  N1 = [Tableau1].Rows.Count + [Tableau175].Rows.Count + [Tableau176].Rows.Count
  ' 2eme approche
  N2 = UBound(TblBD)
 ' Resultat
 MsgBox "Somme des lignes des tableaux : " & N1 & Chr(10) & _
        "Somme des lignes de TblBD : " & N2
End Sub
La seconde est plus rapide.
Cela pourrait donner, avec ou sans le +1, à voir :
Code:
Me.Enreg = UBound(TblBD) + 1
 

Pièces jointes

  • FormFiltre Nb Lignes.xlsm
    53.8 KB · Affichages: 8

Dadi147

XLDnaute Occasionnel
Re,
Deux approches possibles, voir PJ bouton vert :
VB:
Sub NbLigne()
  ' Les 3 tableaux sont mis les uns derrère les autres.
  Dim Tablo1, Tablo175, Tablo176, T
  Tablo1 = [Tableau1]: Tablo175 = [Tableau175]: Tablo176 = [Tableau176]
  TblBD = MergeArray2DVert(Tablo1, Tablo175)
  TblBD = MergeArray2DVert(TblBD, Tablo176)
  ' 1ere approche
  N1 = [Tableau1].Rows.Count + [Tableau175].Rows.Count + [Tableau176].Rows.Count
  ' 2eme approche
  N2 = UBound(TblBD)
 ' Resultat
 MsgBox "Somme des lignes des tableaux : " & N1 & Chr(10) & _
        "Somme des lignes de TblBD : " & N2
End Sub
La seconde est plus rapide.
Cela pourrait donner, avec ou sans le +1, à voir :
Code:
Me.Enreg = UBound(TblBD) + 1
Merci pour . effectué avec succès
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin