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
| Sub extraction()
Dim source As Workbook
Dim oRng As Range
Dim i As Integer
Dim ListeLig As String
Application.ScreenUpdating = False
Set source = Workbooks.Open("\\10-Arrêtes 2015\08-2015\Xtract D1 Août 15.xlsx")
With source
.Worksheets("Sheet1").UsedRange.Copy ThisWorkbook.Worksheets("Échantillon").Range("A1")
.Close False
End With
With ThisWorkbook.Worksheets("Échantillon")
Set oRng = .Range("H1")
For i = .Cells(Rows.Count, 8).End(xlUp).Row To 2 Step -1
If oRng.Offset(i, 0) < 0.01 And oRng.Offset(i, 0) > -0.01 Then
'On supprime la ligne
oRng.Offset(i, 0).EntireRow.Delete
End If
Next i
If .FilterMode = True Then .ShowAllData
End With
'j'ai fait cette partie avec l'enregistreur de macro mais ça bloque au niveau de (ActiveWorkbook.Worksheets("Échantillon").AutoFilter.Sort.SortFields.Clear)
Sheets("Échantillon").Select
Cells.Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("Échantillon").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Échantillon").AutoFilter.Sort.SortFields.Add Key:= _
Range("H1:H235"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("Échantillon").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Rows("2:4").Select
Selection.Copy
Sheets("CPN1").Select
Range("A2").Select
ActiveSheet.Paste
With ThisWorkbook.Worksheets("Échantillon")
ListeLig = "" ' initialisation de la liste des lignes choisies pour cette feuille
For i = 1 To 6 ' on va piocher trois lignes
' définition de la ligne piochées
LigChoisie = Int((.Cells(.Rows.Count, 1).End(xlUp).Row - 5) * Rnd + 5)
' tant que la ligne piochée a déjà été utilisée
While ListeLig Like "*$" & LigChoisie & "$*"
' on en pioche une autre
LigChoisie = Int((.Cells(.Rows.Count, 1).End(xlUp).Row - 5) * Rnd + 5)
Wend
' on ajoute la ligne piochée à la liste des lignes utilisées
ListeLig = ListeLig & "$" & LigChoisie & "$"
' on écrit la ligne
.Cells(LigChoisie, 1).Resize(1, .UsedRange.Columns.Count).Copy ThisWorkbook.Worksheets("CPN1").Cells(5, 1).Offset(t, 0)
t = t + 1
Next i
End With
Application.ScreenUpdating = True
End Sub |
Partager