Notifications
Clear all

Menu para localizar e substituir termo

8 Posts
2 Usuários
0 Reactions
1,530 Visualizações
(@mantova)
Posts: 13
Eminent Member
Topic starter
 

Olá, primeiramente, se já houver algum tópico tratando desse assunto, peço desculpas, procurei no forum mas não encontrei algo que me atendesse.
Tenho uma planilha que utilizo em uma escola, já tenho algumas coisas em macro, mas não entendo nada de programação.

O que eu preciso é o seguinte:

Criar uma macro que abra uma espécie de menu para que eu digite o texto que eu quero que ela substitua ou exclua em determinada coluna.
Por exemplo: Na coluna AF temos datas de matriculas suplementares (MS) e transferências (TR) entre outras. No momento tem uma fórmula para que seja apagada qualquer matrícula do ano 2012 e em fevereiro de 2013 (Onde tem, por exemplo, MS: 18/02/13, ao clicar no botão Arrumar Planilha, ficará vazio)

Só que da maneira como está, a data é fixa, ??/??/2012 ou ??/02/2013, fazendo com que no ano de 2014 eu tenha que alterar a macro. Gostaria que, ao clicar no botão arrumar, após a macro executar algumas ações automáticas, aparecesse um menu que me permitisse digitar as informações que eu desejo deixar em branco.

Em outros trechos da macro eu poderia usar o mesmo comando, mas se houver como e vocês puderem me ajudar com essa parte, eu adapto a macro para as outras colunas.

Abaixo o código que está me dando problemas no momento.
Em anexo a planilha.

Range("AP7").Select
Columns("AF:AF").Select
Selection.Replace What:="MS: ??/??/12", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Range("AP8").Select
Columns("AF:AF").Select
Selection.Replace What:="MS: ??/02/13", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

 
Postado : 12/06/2013 12:32 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

De fato esta rotina Arrumar é um pouco extensa, então vamos falar só da parte que citou "data é fixa, ??/??/2012 ou ??/02/2013":

Primeiro não entendi o porque antes está selecionando os Ranges "Range("AP7").Select" e "Range("AP8").Select" se não tem nenhuma ação apos a seleção, você pode excluir estas duas instruções.

Quanto as datas, uma vez que estão nos mesmos Ranges, você pode criar uma Variável, e adicionar um InputBox para que seja digitado a data e carregado na Variável, e na Instrução trocar a expressão "??/??/2012" pela Variável, ficando mais ou menos assim :

Dim sDatas$

Sub InputBoxDatas()
     
    sDatas = InputBox("Entre com a Data:", "Inputbox")
    
    If StrPtr(sDatas) = 0 Then
        MsgBox "Você Cancelou!"
    
    Else
        
        If sDatas = "" Then
            MsgBox "Você não digitou nada e clicou em OK"
        
        Else
            
            Call ArrumarData_AF_AF
            
        End If
        
    End If
    
End Sub

Sub ArrumarData_AF_AF()

    Columns("AF:AF").Select
    Selection.Replace What:="MS: " & sDatas, Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

End Sub

Reduzi só para a parte das datas, mas é só adaptar a sua maneira, você ainda pode adicionar opção para continuar após a execução da primeira parte alterando a propriedade do botão do msgbox para "vbYesNo", para voltar e executar a segunda utilizando a mesma rotina.
sMsg = MsgBox("Deseja Continuar", vbYesNo)

Espero que ajude.

[]s

 
Postado : 12/06/2013 10:40 pm
(@mantova)
Posts: 13
Eminent Member
Topic starter
 

Eu estava selecionando os Ranges pq o espertão aqui achou que dava para fazer um Ctrl+C Ctrl+V no menu substituir do Excel (Ctrl+U) com a coluna que eu queria substituir selecionada. Mas obviamente não rolou.

Esse arrumar está bem extenso mesmo, como você pode perceber, existem duas colunas para cada item (Nº, RM, Nome, etc), a da direita eu pego as informações de um site e colo lá, a da esquerda é a que eu passo para as professoras. Quando eu copio e colo as informações da net vêm fora do padrão utilizado pela escola então a macro Arrumar põe tudo nesse padrão, depois eu só confiro se teve alterações (coluna AG).

Eu quero deixar tudo o mais automatizado possível, pois nem sempre sou eu quem realiza a atualização dos dados, assim quem utilizar fica só no copia e cola e apertar "botãozinho".

Eu vou testar o comando que você passou se eu tiver algum problema eu aviso, obrigado desde já pela ajuda.

 
Postado : 13/06/2013 6:58 am
(@mantova)
Posts: 13
Eminent Member
Topic starter
 

Como diria um americano: "Worked like a charm!!!!"

Você é ninja mesmo velhão, obrigado!!!

 
Postado : 13/06/2013 7:06 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Como diria um americano: "Worked like a charm!!!!"

Você é ninja mesmo velhão, obrigado!!!

Agradeço a consideração, mas ninja só no status que me deram.

Como pode perceber já era bem tarde qdo olhei sua rotina, e com certeza dá para dar mais uma enxugada na mesma, mas o sono já estava me pegando, e se ainda for precisar e se o fator tempo ajudar faço uma analise mais detalhada pois tem varias instruções que podem ser substituidas e reduzidas eliminando alguns termos como o select que em boa parte não precisamos.

[]s

 
Postado : 13/06/2013 7:33 am
(@mantova)
Posts: 13
Eminent Member
Topic starter
 

Eu só não consegui entender a função para dar o loop "sMsg = MsgBox("Deseja Continuar", vbYesNo)"

Como fazer para que, ao clicar Sim, ele execute o Sub InputBoxDatas ???

 
Postado : 13/06/2013 8:31 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Eu só não consegui entender a função para dar o loop "sMsg = MsgBox("Deseja Continuar", vbYesNo)"

Como fazer para que, ao clicar Sim, ele execute o Sub InputBoxDatas ???

5 minutinhos antes de sair para o almoço, troque pela a abaixo e veja se resolve:

Sub InputBoxDatasComDesicao()

Dim resultado As VbMsgBoxResult
          
inicio:
        
    sDatas = InputBox("Entre com a Data:", "Inputbox")
       
    If StrPtr(sDatas) = 0 Then
        MsgBox "Você Cancelou!"
       
    Else
           
        If sDatas = "" Then
            MsgBox "Você não digitou nada e clicou em OK"
           
        Else
                
            Call ArrumarData_AF_AF
            resultado = MsgBox("Deseja executar novamente esta ação?", vbYesNo, "Tomando uma decisão")
                
            If resultado = vbYes Then
                MsgBox "Você acaba de confirmar a ação"
                GoTo inicio
            Else
                MsgBox "Você acaba de recusar a ação"
                Exit Sub
            End If

        End If
           
    End If
       
End Sub

Fiz uma adaptação aproveitando a dica do link abaixo somente na rotina que lhe passei anteriormente :
VBA – Confirmando decisões com o MsgBox (VbMsgBoxResult)
http://www.tomasvasquez.com.br/blog/mic ... gboxresult

[]s

 
Postado : 13/06/2013 8:55 am
(@mantova)
Posts: 13
Eminent Member
Topic starter
 

Quando eu crescer quero ser "que nem" você velhão!!!!

Ficou PERFEITO!!!

 
Postado : 13/06/2013 9:54 am