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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| 'initialisation de l'userform
Private Sub UserForm_Initialize()
Dim Plage As Range, c As Range
'avec les données de Feuil1...
'positionnement du premier filtre
With Sheets("Feuil1")
'détermination de la plage destinée à être filtrée
Set Plage = .Range(.[A6], .Cells(.Rows.Count, 13).End(xlUp))
'suppression des filtres automatiques
.AutoFilterMode = False
'filtre sur la colonne A des données commençant par "i"
Plage.AutoFilter 1, "=i*"
'filtre sur la colonne F des cellules égales à D
Plage.AutoFilter 6, "D"
'tri sur la colonne A
With .AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
'avec la listbox ListBox1
With Me.ListBox1
'décalage de la plage filtrée pour ne pas récupérer la ligne d'entêtes
Set Plage = Sheets(1).AutoFilter.Range.Offset(1)
'redimensionnement de la plage pour éliminer la ligne ajoutée par la commande "offset"
'redimensionnement de la plage pour ne prendre que la colonne A
Set Plage = Plage.Resize(Plage.Rows.Count - 1, 1)
'sélection des cellules visibles
Set Plage = Plage.SpecialCells(xlCellTypeVisible)
If Plage.Count > 0 Then
'pour chaque cellule de cette plage
For Each c In Plage
'ajout du premier item de la ligne
.AddItem c.Value
'ajout du deuxième item
.List(.ListCount - 1, 1) = c.Offset(, 1).Value
'etc.
.List(.ListCount - 1, 2) = c.Offset(, 2).Value
.List(.ListCount - 1, 3) = c.Offset(, 3).Value
.List(.ListCount - 1, 4) = c.Offset(, 8).Value
.List(.ListCount - 1, 5) = c.Offset(, 9).Value
.List(.ListCount - 1, 6) = c.Offset(, 11).Value
.List(.ListCount - 1, 7) = c.Offset(, 12).Value
Next c
End If
End With
'positionnement du deuxième filtre. Mêmes instructions que pour le premier
With Sheets("Feuil1")
Set Plage = .Range(.[A6], .Cells(.Rows.Count, 13).End(xlUp))
.AutoFilterMode = False
Plage.AutoFilter 1, "=a*"
Plage.AutoFilter 6, "D"
With .AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
'remplissage de la listview
With ListView2
Set Plage = Sheets(1).AutoFilter.Range.Offset(1)
Set Plage = Plage.Resize(Plage.Rows.Count - 1, 1)
Set Plage = Plage.SpecialCells(xlCellTypeVisible)
'suppression des entêtes de colonne
.ColumnHeaders.Clear
'ajout de 8 entêtes de colonne
For i = 1 To 8
.ColumnHeaders.Add
Next i
'déterminatiion de la largeur des colonnes
.ColumnHeaders(1).Width = 50
.ColumnHeaders(2).Width = 50
.ColumnHeaders(3).Width = 50
.ColumnHeaders(4).Width = 50
.ColumnHeaders(5).Width = 50
.ColumnHeaders(6).Width = 50
.ColumnHeaders(7).Width = 50
.ColumnHeaders(8).Width = 50
'on masque les entêtes de colonne
.HideColumnHeaders = True
'alimentation de la listview pour chaque ligne d ela zone filtrée
For Each c In Plage
'ajout d'une ligne et de la valeur de la première colonne
.ListItems.Add , , c.Value
With .ListItems(.ListItems.Count)
'ajout de la valeur de la deuxième colonne
.ListSubItems.Add , , c.Offset(, 1).Value
'etc
.ListSubItems.Add , , c.Offset(, 2).Value
.ListSubItems.Add , , c.Offset(, 3).Value
.ListSubItems.Add , , c.Offset(, 8).Value
.ListSubItems.Add , , c.Offset(, 9).Value
.ListSubItems.Add , , c.Offset(, 11).Value
.ListSubItems.Add , , c.Offset(, 12).Value
End With
Next c
End With
'Spécifie l'affichage en mode "Détails"
ListView2.View = lvwReport
End Sub |
Partager