Notifications
Clear all

Macro para Pesquisar em determinadas Abas

17 Posts
3 Usuários
0 Reactions
2,569 Visualizações
(@fpheldman)
Posts: 26
Eminent Member
Topic starter
 

Bom dia!
Estou precisando de auxílio para elaborar uma macro que Pesquise pela palavra inserida em um InputBox e localize e selecione a célula encontrada (Assim como acontece no localizar e substituir do próprio Excel, "Ctrl + L"), não diferencie maiúscula de minúscula e coincida conteúdo de célua inteira, assim como no Ctrl + L também.
A pesquisa deverá ser feita apenas em determinadas abas que eu definir.
Podem me auxiliar? Muito obrigado galera! Bom dia e ótima semana a todos.

 
Postado : 14/05/2018 8:13 am
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 
Option Compare Text

Private Sub CommandButton1_Click()
 On Error Resume Next
 Dim totalplans As Long
 Dim celini As Range
 totalplans = Sheets.Count
 Application.ScreenUpdating = False
 For i = 1 To totalplans
 Sheets(i).Activate
 Set celini = ActiveCell
 Sheets(i).Cells.Find(What:=Plan1.TextBox1.Value, After:=ActiveCell).Activate
 If Plan1.TextBox1.Value <> ActiveCell.Value Then
 Plan1.Activate
 celini.Select
 End If
 Set celini = Nothing
 Next i
 Application.ScreenUpdating = True
 End Sub

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 14/05/2018 9:10 am
(@fpheldman)
Posts: 26
Eminent Member
Topic starter
 
Option Compare Text

Private Sub CommandButton1_Click()
 On Error Resume Next
 Dim totalplans As Long
 Dim celini As Range
 totalplans = Sheets.Count
 Application.ScreenUpdating = False
 For i = 1 To totalplans
 Sheets(i).Activate
 Set celini = ActiveCell
 Sheets(i).Cells.Find(What:=Plan1.TextBox1.Value, After:=ActiveCell).Activate
 If Plan1.TextBox1.Value <> ActiveCell.Value Then
 Plan1.Activate
 celini.Select
 End If
 Set celini = Nothing
 Next i
 Application.ScreenUpdating = True
 End Sub

Boa tarde xlarruda!
Mais uma vez obrigado pelos seus ensinamentos.
O sistema de busca com palavras inteiras e direcionamento à celuala referente funcionou perfeitamente.
Seria possível a busca também com "meias palavras"?
Ex: Ao digitar "mor" no campo de buscar ele direcionar a morango.
Assim como ocorre no Ctrl + L quando se marca a opção "coincidir conteúdo de célula inteira".

 
Postado : 14/05/2018 1:22 pm
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Que bom que deu certo.

Tem como sim. Apenas apague essa parte do código:

If Plan1.TextBox1.Value <> ActiveCell.Value Then
Plan1.Activate
celini.Select
End If

Ela é a responsável por verificar se as palavras são exatamente iguais. Removendo ela, ele busca qualquer parte da palavra.

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 14/05/2018 1:27 pm
(@fpheldman)
Posts: 26
Eminent Member
Topic starter
 

Que bom que deu certo.

Tem como sim. Apenas apague essa parte do código:

If Plan1.TextBox1.Value <> ActiveCell.Value Then
Plan1.Activate
celini.Select
End If

Ela é a responsável por verificar se as palavras são exatamente iguais. Removendo ela, ele busca qualquer parte da palavra.

Boa noite xlarruda!
Apaguei a parte citada por você mas não consegui, também tentei de algumas outras formas antes de responder mas sem sucesso, só consegui por palavras inteiras.
Também estou falhando em definir as guias em que vou fazer a busca, só consigo em todas; se tenho 5 guias (plan1, plan2... plan5) e quero fazer a pesquisa só em plan1 e plan3 por exemplo, não realizando nas demais.

 
Postado : 15/05/2018 4:04 pm
(@klarc28)
Posts: 971
Prominent Member
 
For i = 1 To totalplans
'Se for a Plan1 ou Plan3
if sheets(i).name = "Plan1" or sheets(i).name = "Plan3" then
Sheets(i).Activate
 
Postado : 16/05/2018 5:12 am
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Segue corrigido:

Para busca parcial:

Option Compare Text
Sub Localizar_parcial()
    Dim celini As Range
    Application.ScreenUpdating = False
    Set celini = ActiveCell
    On Error Resume Next
    If Sheets(i).Name = "Plan1" Or Sheets(i).Name = "Plan3" Then 'SÓ PESQUISA NAS PLANS 1 E 3
    For i = 1 To Sheets.Count
    Sheets(i).Activate
    Sheets(i).Cells.Find(What:=Plan1.TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
    If Plan1.TextBox1.Value = "*" & ActiveCell.Value & "*" Then
    Plan1.Activate
    celini.Select
    End If
    Set celini = Nothing
    Next i
    End If
    Application.ScreenUpdating = True
End Sub

Para busca Total:

Option Compare Text
Sub Localizar_total()
    Dim celini As Range
    Application.ScreenUpdating = False
    Set celini = ActiveCell
    On Error Resume Next
    If Sheets(i).Name = "Plan1" Or Sheets(i).Name = "Plan3" Then 'SÓ PESQUISA NAS PLANS 1 E 3
    For i = 1 To Sheets.Count
    Sheets(i).Activate
    Sheets(i).Cells.Find(What:=Plan1.TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
    If Plan1.TextBox1.Value <> ActiveCell.Value Then
    Plan1.Activate
    celini.Select
    End If
    Set celini = Nothing
    Next i
    End If
    Application.ScreenUpdating = True
End Sub

Mude, na sétima linha do código, o nome das plans que deverão ser pesquisadas..

Repare também que a única diferença entre os códigos está no método de busca
LookAt:= xlPart ( busca parte do texto)
LookAt:= xlWhole ( busca texto exato)

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 16/05/2018 6:24 am
(@fpheldman)
Posts: 26
Eminent Member
Topic starter
 

Boa noite xlarruda!
Não sei o que estou fazendo de errado, não estou conseguindo fazer o código funcionar utilizando ele na planillha "Localizar" que você postou.

 
Postado : 16/05/2018 6:27 pm
(@klarc28)
Posts: 971
Prominent Member
 

Testei e funcionou. Exclui a sub teste que estava dando erro. Veja o anexo.

 
Postado : 17/05/2018 5:33 am
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Segue um arquivo de exemplo parcial e total:

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 17/05/2018 6:45 am
(@fpheldman)
Posts: 26
Eminent Member
Topic starter
 

Segue um arquivo de exemplo parcial e total:

Boa noite xlarruda!
Cara você é nota 1000! Obrigado pela paciência.
Deu certinho com a busca total, agora com a busca parcial tive um problema:
Se eu buscar "mor" por exemplo, ele realmente localiza e seleciona as palavras "morango" que estão na guia A (Plan1) na medida que vou clicando;
contudo assim que eu clico em Busca Parcial ele abre outra guia, no caso a guia D, tendo que clicar na guia A para ver o resultado da busca.

 
Postado : 17/05/2018 7:04 pm
(@klarc28)
Posts: 971
Prominent Member
 
Sub Localizar_parcial()
    Dim celini As Range
    Application.ScreenUpdating = False
    Set celini = ActiveCell
    On Error Resume Next
    
    For i = 1 To Sheets.Count
    If Sheets(i).Name = "A" Or Sheets(i).Name = "D" Then 'MUDE AQUI O NOME DA PLAN PARA PESQUISAR
   ' Sheets(i).Activate
    Sheets(i).Cells.Find(What:=Plan1.TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
    If Plan1.TextBox1.Value = "*" & ActiveCell.Value & "*" Then
    Plan1.Activate
    celini.Select
    End If
    Set celini = Nothing
    End If
    Next i
        Application.ScreenUpdating = True
End Sub
 
Postado : 19/05/2018 1:23 pm
(@fpheldman)
Posts: 26
Eminent Member
Topic starter
 

Boa noite klarc28,

dessa forma a pesquisa só é feita na Plan1, se pesquiser por uma palavra que está guia D por exemplo não dá certo.

 
Postado : 19/05/2018 7:00 pm
(@klarc28)
Posts: 971
Prominent Member
 
Sub Localizar_parcial()
    Dim celini As Range
    Application.ScreenUpdating = False
    Set celini = ActiveCell
    On Error Resume Next
    
    For i = 1 To Sheets.Count
    If Sheets(i).Name = "A" Or Sheets(i).Name = "D" Then 'MUDE AQUI O NOME DA PLAN PARA PESQUISAR
    Sheets(i).Activate
    Sheets(i).Cells.Find(What:=Plan1.TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
        GoTo fim
    If Plan1.TextBox1.Value = "*" & ActiveCell.Value & "*" Then
    Plan1.Activate
    celini.Select
    End If
    Set celini = Nothing
    End If
    Next i
fim:
        Application.ScreenUpdating = True
End Sub
 
Postado : 19/05/2018 9:17 pm
(@fpheldman)
Posts: 26
Eminent Member
Topic starter
 

Bom dia,
Continua o mesmo problema

 
Postado : 21/05/2018 8:12 am
Página 1 / 2