Olá Rafael!
Li sua solução e achei bom, mas, como não sou expert em VBA não consegui reproduzir sua instrução adaptando para a minha nescessidade. Vou postar a minha planilha e peço sua ajuda para isso.
Eu acabei fazendo igual a nosso colega, usando os códigos de gravação do VBA. A primeira lista foi de boa, mas, na segunda dá erro e não saio disso. Gostaria de aplicar seu metodo. Mas, se alguém entendeu e puder me ajudar, serei grato também.
Na minha planilha, tenho um codigo para incluir e excluir linha, conforme a lista vai aumentando. Por isso, tenho no codigo o esquema para encontrar a última linha e a última coluna visivel. Com isso, consigo encontrar as outras variáveis para montar o range, o que não consigo é concluir a classificação.
Sub Classificar_Lista()
'
' Classificar_Lista Macro
' Classifica as listas de 'Empresas Anfitriã' e 'Oradores'
'
Dim UltimaLinha As Long
Dim UltimaColuna As Long
Dim PrimeiraLinha As Long
Dim PrimeiraColuna As Long
Dim PrimeiraLinhaClass As Long
Dim PrimeiraColunaClass As Long
Application.ScreenUpdating = True
' Interrompe a atualização da tela;
Application.ScreenUpdating = False
' Desprotege a Aba;
ActiveSheet.Unprotect
' Seleciona a planilha ativa;
Set sh = ActiveSheet
' Obs. pessoal: Não entendi este comando, futuramente pesquisar o que está acontecendo aqui,
' mas, o comando é nescessário para a execução a seguir;
Set rng = sh.Range("A1").SpecialCells(xlCellTypeLastCell)
' Recupera a última linha VISIVEL;
UltimaLinha = rng.Row
' Recupera a última coluna VISIVEL;
UltimaColuna = rng.Column
' Retorna o resultado em uma caixa de texto na tela;
' MsgBox "A última linha é: " & UltimaLinha & vbCrLf & "A última coluna é: " & UltimaColuna, vbInformation
' Posiciona na última célula à esquerda na tabela à classificar
UltimaLinha = UltimaLinha - 4
UltimaColuna = UltimaColuna - 11
' Posiciona na primeira célula que há valor na coluna
Selection.End(xlUp).Select
Selection.End(xlUp).Select
PrimeiraLinha = ActiveCell.Row
PrimeiraColuna = UltimaColuna
PrimeiraLinha = PrimeiraLinha + 2
' Estabelece os parâmetros para a classificação da coluna ORADORES
Range(Cells(PrimeiraLinha, PrimeiraColuna), Cells(UltimaLinha, UltimaColuna)).Select
ActiveWorkbook.Worksheets("Empresas").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Empresas").Sort.SortFields.Add Key:=Range(Cells(PrimeiraLinha, PrimeiraColuna), Cells(UltimaLinha, UltimaColuna)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Empresas").Sort
.SetRange Range(Cells(PrimeiraLinha, PrimeiraColuna), Cells(UltimaLinha, UltimaColuna))
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
UltimaLinha = 0
UltimaColuna = 0
PrimeiraLinha = 0
PrimeiraColuna = 0
' Iniciaa classificação para a segunda tabela na aba.
' Obs. pessoal: Não entendi este comando, futuramente pesquisar o que está acontecendo aqui,
' mas, o comando é nescessário para a execução a seguir;
Set rng = sh.Range("A1").SpecialCells(xlCellTypeLastCell)
' Recupera a última linha;
UltimaLinha = rng.Row
' Recupera a última coluna;
UltimaColuna = rng.Column
' Retorna o resultado em uma caixa de texto na tela;
' MsgBox "A última linha é: " & UltimaLinha & vbCrLf & "A última coluna é: " & UltimaColuna, vbInformation
' Posiciona na última célula à direita na tabela a classificar
UltimaLinha = UltimaLinha - 4
' Posiciona na última célula à direita na tabela a classificar
PrimeiraColuna = UltimaColuna - 7
' Posiciona na primeira célula que há valor na coluna
Selection.End(xlUp).Select
Selection.End(xlUp).Select
PrimeiraLinhaClass = UltimaLinha
PrimeiraColunaClass = PrimeiraColuna
PrimeiraLinha = ActiveCell.Row
PrimeiraLinha = PrimeiraLinha + 2
Range(Cells(PrimeiraLinha, PrimeiraColuna), Cells(UltimaLinha, UltimaColuna)).Select
ActiveWorkbook.Worksheets("Empresas").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Empresas").Sort.SortFields.Add2 Key:=Range( _
Cells(PrimeiraLinha, PrimeiraColuna), Cells(UltimaLinha, UltimaColuna)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Empresas").Sort
.SortFields.Clear
.SortFields.Add Key:=Range(Cells(PrimeiraLinha, PrimeiraColuna), Cells(UltimaLinha, UltimaColuna)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range(Cells(PrimeiraLinha, PrimeiraColuna), Cells(UltimaLinha, UltimaColuna))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Salvando Planilha;
ActiveWorkbook.Save
' Protege a planilha;
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
' Apenas posiciona o cursor;
ActiveSheet.Cells(C1).Select
' Reativa a atualização da tela;
Application.ScreenUpdating = True
'
End Sub
Pasta1.xlsx