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 107 108 109 110 111
| Private Sub CommandButton2_Click()
Dim Tbl() As Long
Dim Trouve As Range
Dim PlageDeRecherche As Range
Dim Valeur_Cherchee As String
Dim Adr As String
Dim I As Long
Dim J As Long
Dim Tempo As Long
Dim V As Long
Dim workbook_source As String
Dim nom_de_la_feuille_active As String
Chemin = ThisWorkbook.Path & "\"
workbook_source = ActiveWorkbook.Name
nom_de_la_feuille_active = ActiveSheet.Name
'assigne l'input à Valeur_recherchée
Valeur_Cherchee = inputbox("Critère ?")
If Valeur_Cherchee = "" Then Exit Sub
'créer une plage de recherche sur toute les données active de la feuille de calcul
With ActiveSheet
Set PlageDeRecherche = .Range(.Cells(1, 1), .Cells( _
.Cells.Find("*", .Cells(1, 1), -4123, , 1, 2).Row, _
.Cells.Find("*", .Cells(1, 1), -4123, , 2, 2).Column))
End With
'initialise la routine de recherche dans la place de recherche avec comme critère "Valeur_Cherchee"
Set Trouve = PlageDeRecherche.Find(Valeur_Cherchee, , xlValues, xlWhole)
If Trouve Is Nothing Then
MsgBox "'" & Valeur_Cherchee & "' n'est pas présent dans " & PlageDeRecherche.Address(0, 0)
Else
'mémorise l'adresse de la 1ère cellule
Adr = Trouve.Address
'boucle pour récupérer les numéros de ligne dans le tableau
Do
I = I + 1
ReDim Preserve Tbl(1 To I)
Tbl(I) = Trouve.Row
Set Trouve = PlageDeRecherche.FindNext(Trouve)
Loop While Adr <> Trouve.Address
'effectue un tri décroissant dans le tableau pour une suppression par le bas de la feuille
For I = 1 To UBound(Tbl) - 1 'de 1 à la dimension max - 1
For J = I + 1 To UBound(Tbl) 'de 2 à la dimension max
'si Tbl(I) est inférieur à Tbl(J) J = I + 1 donc, si la dimension n est inférieure à la dimension n+1 on déplace les valeurs
If Tbl(I) < Tbl(J) Then
Tempo = Tbl(J) 'on stocke momentanément la valeur de Tbl(J) dans la variable
Tbl(J) = Tbl(I) 'on affecte à Tbl(J) la valeur de la dimension précédente Tbl(I) puisqu'on veut un tri décroissant
Tbl(I) = Tempo 'et on déplace dans Tbl(I) la valeur qui était dans Tbl(J) qui a été stockée dans la variable
End If
Next J
Next I
Application.ScreenUpdating = False
Set Workbook = Application.Workbooks.Add
With Workbook
.SaveAs Filename:=Chemin & Valeur_Cherchee
nom_du_workbook = ActiveWorkbook.Name
Set Workbook = ActiveWorkbook
For I = 1 To UBound(Tbl)
Workbooks(workbook_source).Sheets(1).Rows(Tbl(I)).EntireRow.Copy Destination:=Workbooks(nom_du_workbook).Sheets(1).[A1].Offset(I, 0):
Next I
End With
Application.ScreenUpdating = True
End If
End Sub |
Partager