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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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 ...
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

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.
 
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
 
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

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour