Сначала проверьте: является ли рабочий лист частью ActiveWorkbook
? Если открыта другая рабочая книга, весь код завершится ошибкой уже в операторе Set sh = ActiveWorkbook.Sheets("Saisie")
. Вы можете использовать ThisWorkbook
вместо.
Предполагая, что это не ваша проблема: вы должны понимать, над какими объектами вы точно работаете. Ваша первая попытка не удалась из-за SortKey: вы пишете Key1:=Range("H1")
. Range
, без квалификации, использует диапазон листа active , и это не то, что вы хотите (и это не удастся).
Попробуйте например
sh.Range("H1:K2001").sort Key1:=sh.Range("H1"), Order1:=xlAscending, Header:=xlYes
Ваша вторая попытка связана с другой проблемой: вы используете Range
в пункте with
и пишете Key1:=.Range("H1")
в качестве критерия. Теперь .Range("H1")
будет относительно вашего диапазона в предложении with. Это приводит к эффективному использованию диапазона O1
- опять же не то, что вы хотите.
Есть много способов исправить это, например, используя рабочий лист в предложении with.
With ThisWorkbook.Worksheets("Saisie")
.Range("H1:K2001").sort Key1:=.Range("H1"), Order1:=xlAscending, Header:=xlYes
End With