1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| Public n As Long
Sub Afficher_Liste_Des_Familles()
Sheets("Feuil1").Select
Liste_de_choix.Show
End Sub
Sub Filtrage()
Dim DerLig_f2 As Long, NbCol As Long, NwLig As Long
Application.ScreenUpdating = False
Set f1 = Sheets("Feuil1")
Set f2 = Sheets("Feuil2")
Set f3 = Sheets("Feuil3")
DerLig_List = f1.Range("J" & n + 1).Row
ReDim x(DerLig_List) As String
For i = 2 To DerLig_List
x(i) = f1.Range("J" & i).Value
Next
f2.Select 'sur la feuille 2
DerLig_f2 = f2.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille 2
Set Filtre = f2.Range("A1:A" & DerLig_f2)
ActiveSheet.AutoFilterMode = False 'on supprime les filtres existants
[A1].AutoFilter 'on met le filtre sur ligne 1
f2.Range("A1:A" & DerLig_f2).AutoFilter Field:=1, Criteria1:=Array(x), Operator:=xlFilterValues 'on filtre avec les sélections de la listbox
f1.Range("J2:J" & DerLig_List).ClearContents 'on efface les sélections de la colonne J de la feuille 1
'd'après la sélection de la liste, on récupère les données filtrées de la feuille 2
NbCol = ActiveSheet.[IV2].End(xlToLeft).Column 'nombre de colonnes de la feuille 2
ActiveSheet.Range("_FilterDataBase").Resize(, NbCol).SpecialCells(xlCellTypeVisible).Copy 'on copie la zone filtrée
f1.Select 'sur la feuille 1
NewLig = Range("A" & Rows.Count).End(xlUp).Row + 1 'trouve la première ligne vide
If NwLig < 13 Then NewLig = 13
Cells(NewLig, "A").Select 'on se positionne sur la première cellule vide
ActiveSheet.Paste 'on colle la zone filtrée de la feuille 2
Rows(NewLig).Delete 'on efface la première ligne contenant le titre
f1.Range(Cells(NewLig - 1, "A"), Cells(NewLig - 1, NbCol)).Copy 'on recopie le format de la ligne précédente
f1.Range(Cells(13, "A"), Cells(Range("A" & Rows.Count).End(xlUp).Row, NbCol)).PasteSpecial Paste:=xlPasteFormats
End Sub |
Partager