Notifications
Clear all

Executar uma macro de classificação automaticamente

9 Posts
2 Usuários
0 Reactions
1,280 Visualizações
(@gfsaraujo)
Posts: 5
Active Member
Topic starter
 

Boa tarde,

Eu to quebrando a cabeça aqui e não estou conseguindo fazer o que preciso.

O caso é o seguinte, eu preciso realizar automaticamente uma classificação sempre que uma coluna de outra sheet for atividada. Eu cheguei no seguinte ponto e não consigo passar disso:

Public Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Sheets("Plan6").Range("D6:D375") Then
Call Classificacao
End If
End Sub

Public Sub Classificacao()
Range("C1").Sort Key1:=Range("C2"), _
Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub

Alguem poderia por favor me ajudar, isso é realmente muito importante pra mim.

Valeeeeu.

 
Postado : 19/02/2013 12:37 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Mas o que está "pegando" ?

 
Postado : 19/02/2013 12:50 pm
(@gfsaraujo)
Posts: 5
Active Member
Topic starter
 

Então eu coloquei esse código na Sheet que eu quero que seja classificada e não funciona nem a pau.

Modifiquei várias vezes e ao meu ver o código não parece estar errado.

Será que eu tenho que colocar esse código na sheet onde fica a coluna que se modificada da o "start" no processo:
Public Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Sheets("Plan6").Range("D6:D375") Then
Call Classificacao
End If
End Sub

E esse outro código na sheet que eu quero classificar:

Public Sub Classificacao()
Range("C1").Sort Key1:=Range("C2"), _
Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub

Pq eu tentei isso também e não funcionou.

Saberia me dizer se as fórmulas estão certas?

 
Postado : 19/02/2013 12:55 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pelo que entendi, este código está no Evento Change da Plan6 :
Public Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Sheets("Plan6").Range("D6:D375") Then
Call Classificacao
End If
End Sub

E ao atender a condição, você quer que a classificação seja na Plan7 :

Então é preciso ativar primeiro a Aba Plan7 e depois rodar a classificação :

Public Sub Classificacao()
    
    'Ativa a Plan7
    Sheets("Plan7").Activate

    'Realiza a classificação na Aba Ativa
    Range("C1").Sort Key1:=Range("C2"), _
    Order1:=xlAscending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, _
    Orientation:=xlTopToBottom
    
End Sub

Ou, referenciar direto na Rotina a aba que quer a classificação :

Public Sub Classificacao2()

    Sheets("Plan7").Range("C1").Sort Key1:=Sheets("Plan7").Range("C2"), _
    Order1:=xlAscending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, _
    Orientation:=xlTopToBottom

End Sub

Se não for isto, o ideal seria postar um modelo.

[]s

 
Postado : 19/02/2013 1:10 pm
(@gfsaraujo)
Posts: 5
Active Member
Topic starter
 

Pior que não foi viu Mauro, o cenário é exatamente o que você descreveu.

Coloquei o seguinte código na Plan6:
Public Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("D1:D375") Then
Call Classificacao
End If
End Sub
Public Sub Classificacao()
Sheets("Plan11").Activate
Range("C1").Sort Key1:=Range("C2"), _
Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub

E não rodou, aparace "Subscrito fora do intervalo".

 
Postado : 19/02/2013 1:31 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Araujo, por esta mensagem de erro só mesmo olhando o seu modelo, uma vez que os endereços (Ranges) estão indicados direto na rotina.

[]s

 
Postado : 19/02/2013 1:56 pm
(@gfsaraujo)
Posts: 5
Active Member
Topic starter
 

Mauro mandei o arquivo em anexo.

Desde já muito obrigado pela ajuda.

 
Postado : 19/02/2013 2:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Araujo, não sei se entendi corretamente, mas altere suas rotinas pela a abaixo e faça os testes se é isto :

Public Sub Worksheet_Change(ByVal Target As Range)
  
  If Not Intersect(Target, Range("D6:D375")) Is Nothing Then
    
    Call Classificacao
    
  End If
End Sub


Public Sub Classificacao()
  
    Sheets("ApoioProfessionalServices").Columns("A:O").Sort _
    key1:=Sheets("ApoioProfessionalServices").Range("C2"), _
    order1:=xlDescending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, _
    Orientation:=xlTopToBottom
    
End Sub

Alterei xlAscending por xlDescending uma vez que na Coluna "C" só temos valores e a maioria é "0" (Zero) então eles prevalecem na ascendencia.

[]s

 
Postado : 19/02/2013 6:36 pm
(@gfsaraujo)
Posts: 5
Active Member
Topic starter
 

Nossa muito obrigado Mauro, era exatamente isso que eu estava precisando.

Salvou a patria.

Valeu.

 
Postado : 20/02/2013 7:01 am