Notifications
Clear all

Ordenar Planilha

5 Posts
2 Usuários
0 Reactions
1,386 Visualizações
(@roberto_sv)
Posts: 30
Eminent Member
Topic starter
 

Bom dia,
Caros amigos, tenho algumas planilhas que insiro muitas linhas por conta de entrada de ítens como uma planilha de contas a pagar, pois bem, essa planilha tem que ser ordenada por vencimento, e como insiro muitas linhas, muitas das vezes os vencimentos desordenam, pois bem, fiz uma macro, e funciona, mas gostaria de saber se tem como nas inserções de linhas consigo um artifício no VBA de o range aumentar também.
Abaixo segue a macro

Sub MACRO2()
'
' MACRO2 Macro
' ORDENAÇÃO DA PLANILHA POR DATA DE VENCIMENTO
'

'
Range("B2:AD2139").Select
ActiveWorkbook.Worksheets("QUEIMADOS - ELDORADO III").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("QUEIMADOS - ELDORADO III").Sort.SortFields.Add Key _
:=Range("E2:E2139"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("QUEIMADOS - ELDORADO III").Sort
.SetRange Range("B2:AD2139")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

O Range é da célula E2 até a E2139, se eu inserir 10 linhas , como faço para o range aumentar automatocamente.

Grato

 
Postado : 09/08/2013 8:48 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Roberto_sv,

Boa Tarde!

Tenta assim:

Sub MACRO2()
Dim UltimaLinha As Long
UltimaLinha = Sheets("QUEIMADOS - ELDORADO III").Cells(Cells.Rows.Count, 5).End(xlUp).Row
If UltimaLinha < 2 Then UltimaLinha = 2
'
' MACRO2 Macro
' ORDENAÇÃO DA PLANILHA POR DATA DE VENCIMENTO
'

'
Range("B2:AD" & UltimaLinha).Select
ActiveWorkbook.Worksheets("QUEIMADOS - ELDORADO III").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("QUEIMADOS - ELDORADO III").Sort.SortFields.Add Key _
:=Range("E2:E" & UltimaLinha), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("QUEIMADOS - ELDORADO III").Sort
.SetRange Range("B2:AD" & UltimaLinha)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 09/08/2013 12:40 pm
(@roberto_sv)
Posts: 30
Eminent Member
Topic starter
 

Boa tarde,

Funcionou perfeito, mas, tenho outras planilhas de controle em baixo dessa planilha, se eu executar a macro, ela vai pegar e misturar as planilhas, isso eu deixei de mensioner, desculpe, será que há uma forma de substituirmos o "ultima linha por uma linha marcada no final da planilha, pois, quendo eu coloco linhas eu insiro, e essa célula marcada sempre é a última.
Grato.

 
Postado : 09/08/2013 12:52 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Roberto,

O 5 na linha de código onde eu pego a última linha significa que estamos pegando a última linha da colun a E que contenha dados. Minha sugestão seria a de você não ter dados (que não deseja) pelo em baixo dessa coluna. Se todo, for impossível isso, você pode pegar a última linha por qualquer outra coluna que não tenha dados abaixo dela. Para isso basta modificar o 5 pelo número da coluna que você quer, sabendo que a contagem começa do 1. (A=1, B=2 e assim sucessivamente). Desse modo, por exemplo, você pode colocar essa sua marcação, por exemplo, numa última coluna (onde não vai mais ter dados abaixo dela) e modificar apenas o número 5 para o número dessa última coluna.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 09/08/2013 1:38 pm
(@roberto_sv)
Posts: 30
Eminent Member
Topic starter
 

e se eu colocar na ultima célula dessa primeira planilha a palavra fim, será que consigo na fórmula a macro entender como a última linha que tem que marcar no range.

 
Postado : 09/08/2013 1:46 pm