Suite à la description de mon problème: j'ai une table de variante de longueur de colonne. Je veux searchr dans la colonne 4 pour la valeur minimale puis copyr la ligne avec la valeur minimale à la rangée 6
C'est mon code:
Sub TestMax() Dim searchArea As Range Dim searchResult As Range Dim rowMax As Long Dim maxValue As Long Dim columnSearch As Integer Dim lastRow As Long columnSearch = 4 'Select all the cells in the column you want to search down to the first empty cell. lastRow = Sheets("V&A 16").Range("B1048576").End(xlUp).Row Range(Cells(8, 4), Cells(lastRow, 4)).Select Set searchArea = Range(Cells(8, 4), Cells(lastRow, 4)) 'Determine the max value in the column. maxValue = Application.Max(searchArea) 'Find the row that contains the max value. Set searchResult = Sheets("V&A 16").Columns(columnSearch).Find(What:=maxValue, _ After:=Sheets("V&A 16").Cells(8, columnSearch), LookIn:=xlValues, LookAt:=xlWhole, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _ SearchFormat:=False) 'Store the row that contains the minimum value in a variable. rowMax = searchResult.Cells.Row searchResult.Select Range(Cells(rowMax, 3), Cells(rowMax, 13)).Select Selection.Copy Range("C6").Select ActiveSheet.Paste Link:=True End Sub
Pour une raison quelconque, je constate une erreur. Le même code exact avec Application.Min au lieu de max fonctionne cependant. Une aide à ce sujet? Merci d'avance!!
Bien qu'une solution appropriée puisse refaire la majeure partie du code et que l'on puisse discuter de noms de variables et de valeurs fixes dans votre code, je pense que cela ne vous aidera pas dans une démarche étape par étape.
Donc, pour commencer, je suggérerais ce qui suit (si vous êtes nouveau dans VBA):
D'abord, je changerais
maxValue = Application.Max(searchArea)
pour ça
maxValue = Application.WorksheetFunction.Max(searchArea)
et ensuite get le rowMax avec
rowMax = Application.WorksheetFunction.Match(maxValue, searchArea, 0)
(vous pourriez être sûr de l'avoir)
Remarques:
EDIT: essayez ceci. Comme je l'ai dit, alors que l'approche est sans doute un peu horrible, je reconnais que, du sharepoint vue de l'apprentissage, il est préférable de garder ce que vous avez fait jusqu'ici et de le modifier uniquement pour «fonctionner d'une manière ou d'une autre». J'espère que cela pourra aider!
Sub TestMax() Dim searchArea As Range Dim rowMax As Long Dim maxValue As Long Dim lastRow As Long columnSearch = 4 'get the lastrow lastRow = Sheets("V&A 16").Range("B1048576").End(xlUp).Row 'set the search area Set searchArea = Range(Cells(8, columnSearch), Cells(lastRow, columnSearch)) 'Find the row that contains the max value inside the search area rowMax = Application.WorksheetFunction.Match( _ Application.WorksheetFunction.Max(searchArea), searchArea, 0) 'clumsily copy+paste (alternative: set values instead of copying) 'searchArea.Cells(rowMax, columnSearch).EntireRow.Copy 'Cells(6, columnSearch).EntireRow.Select 'ActiveSheet.Paste ' Alternative: ActiveSheet.Rows(6).Cells().Value = searchArea.Rows(rowMax).EntireRow.Cells.Value End Sub
Vous pouvez parcourir la colonne 4 pour find la ligne correspondant à la plus petite valeur et copyr cette ligne dans la ligne n ° 6
(exemple: count tenu de 10 000 lignes de données à vérifier)
Sub Foo() smallest = Cells(1, 4).Value i = 1 For i = 2 To 10000 If Cells(i, 4).Value < smallest And Cells(i, 4).Value <> "" Then smallest = Cells(i, 4).Value Row = i End If Next i Rows(Row & ":" & Row).Select Selection.Copy Rows("6:6").Select ActiveSheet.Paste End Sub