Notifications
Clear all

Msgbox com endereço da celula

8 Posts
1 Usuários
0 Reactions
1,088 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde a todos!

Como faço para ao digitar um valor em uma célula, A1, por exemplo, e aparecer uma Msgbox informando onde se encontra este valor no range A2:A10000?
Mais ou menos assim: Msgbox "O valor pesquisado está na célula " & "endereço da célula"

Obrigado.

Silvio Felinto

 
Postado : 14/05/2014 9:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Silviofelinto, veja se atende:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 And Target.Row = 1 Then

linha = 2

Do While Cells(linha, 1).Value <> Cells(1, 1).Value

linha = linha + 1

Loop

MsgBox ("O valor procurado está na célula A" & linha)

End If

End Sub

Att,

Ricardo

 
Postado : 14/05/2014 10:04 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Talvez outra forma...

Sub AleVBA_11660()
Dim rngFound As Range
With Cells
  Set rngFound = .Find(What:=[A1], After:=.Cells(1, .Columns.Count), _
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, MatchCase:=False)
End With
If Not rngFound Is Nothing Then
  myCol = rngFound.Select
   MsgBox "Valor encontrado em! " & ActiveCell.Address
Else
  MsgBox "Valor não encontrado!"
End If
 
Postado : 14/05/2014 10:20 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

É devido a esta versatilidade que eu gosto do VBA, contribuindo :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sValor
    Dim Intervalo As Range

    If Target.Address <> "$A$1" Or Target.Value = "" Then Exit Sub
    
    sValor = Target.Value
     
    With Sheets("Plan1").Range("A2:A1000")

            Set Intervalo = .Find(what:=sValor, _
                                  after:=.Cells(.Cells.Count), _
                                  LookIn:=xlFormulas, _
                                  LookAt:=xlWhole, _
                                  SearchOrder:=xlByRows, _
                                  SearchDirection:=xlNext, _
                                  MatchCase:=False)
            
            If Not Intervalo Is Nothing Then
           
                MsgBox "Valor pesquisado : " & sValor & " está na Celula " & Intervalo.Address(0, 0)
            Else
                MsgBox "Valor nao Localizado"
            
            End If
    
    End With

End Sub

[]s

 
Postado : 14/05/2014 10:25 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde Ricardo!

A macro deu certo até certo ponto. se eu digitar por engano um valor que não está na coluna A, ocorre um erro de execução. Tem como resolver?

Gostaria de saber como trocar a referência da célula em que vou digitar o valor a ser pesquisado, por exemplo, para a célula D2.
Se não for pedir muito, também desejaria entender a sintaxe desta macro, ou seja, como o excel lê as instruções.

Mais uma vez, muito obrigado.

 
Postado : 14/05/2014 10:32 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

No meu caso ficaria

Sub AleVBA_11660()
Dim rngFound As Range
With Cells
  Set rngFound = .Find(What:=[D2], After:=.Cells(1, .Columns.Count), _
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, MatchCase:=False)
End With
If Not rngFound Is Nothing Then
  myCol = rngFound.Select
   MsgBox "Valor encontrado em! " & ActiveCell.Address
Else
  MsgBox "Valor não encontrado!"
End If
 
Postado : 14/05/2014 10:37 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Vamos as coinsiderações :
Silvio, referente as Dicas :
ricardorezende:
A primeira linha :
If Target.Column = 1 And Target.Row = 1 Then - comop estamos utilizando o Evento "Worksheet_Change", significa que a digitação não for na Coluna 1, Linha 1 ou A1 a rotina não continua, e se for Verdadeiro, na instrução While irá pesquisar em todas as linhas se o valor existe e emitir a mensagem.
O que acho improdutivo desta forma é que supondo que o valor procurado esteja na linha 5000, a rotina entra em Loop e será executada 5000x.

Na dica do Alexandre, ele usa o Metodo Find como na minha rotina que alem de ser nativa do excel é apropriada para realizar busca, veja na ajuda do VBA e encontrara todas as propriedades associadas a mesma.
O diferencial na rotina do Alexandre para a minha é que a dele a pesquisa é efetuada em toda a planilha e a minha somente no Range em que você especificou "A2:A1000".

Finalizando, eu sou da opinião de utilizar um das rotinas que utilizam o metodo Find, assim terá um ganho de performance e rapidez.

[]s

 
Postado : 14/05/2014 10:56 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Valeu Mauro!

Testei e deu certo.

Silvio Felinto.

 
Postado : 14/05/2014 11:06 am