Notifications
Clear all

Vincular dados conforme item selecionado em lista suspensa

10 Posts
2 Usuários
0 Reactions
2,483 Visualizações
(@dih120690)
Posts: 0
New Member
Topic starter
 

Boa tarde pessoal,

Estou com um problema que não consigo resolver. Tenho uma tabela e gostaria de vincular uma lista suspensa com os dados.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim PL1, PL2 As Worksheet

Set PL1 = Sheets("Gestão")
Set PL2 = Sheets("Itens")

Cont = PL2.Cells(Rows.Count, "A").End(xlUp).Row

For x = 2 To Cont

If PL1.Range("A2") = PL2.Cells(x, "A") Then

PL1.Range("B2") = PL2.Cells(x, "B")

End If

Next

End Sub

Porem fica apontando que o metodo range do objeto _worksheet falhou.

Estou enviando junto o arquivo para vcs me ajudarem......POR FAVOR!!

 
Postado : 23/03/2017 9:51 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Abaixo o seu código corrigido.

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim PL1 As Worksheet, PL2 As Worksheet, cont As Long, x As Long
  Set PL1 = Sheets("Gestão")
  Set PL2 = Sheets("Itens")
  cont = PL2.Cells(Rows.Count, "A").End(xlUp).Row
   For x = 2 To cont
    If PL1.Range("A2") = PL2.Cells(x, "A") Then
    Application.EnableEvents = False
    PL1.Range("B2").Value = PL2.Cells(x, "B")
    Application.EnableEvents = True
    End If
   Next
End Sub

Se quiser, experimente este outro também.

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim k As Long
 If Target.Column > 1 Then Exit Sub
  If Application.CountIf(Sheets("Itens").[A:A], Target.Value) > 0 Then
   k = Sheets("Itens").[A:A].Find(Target.Value, lookat:=xlWhole).Row
   Target.Offset(, 1).Value = Sheets("Itens").Cells(k, 2)
  End If
End Sub
 
Postado : 25/03/2017 1:53 pm
(@dih120690)
Posts: 0
New Member
Topic starter
 

O primeiro código funcionou...porém preciso que seja feito da letra A2 até a letra A:50.....com respectivos na lista da coluna B. Não consigo encaixar o código em mais de uma célula....funciona apenas na A2....Help!!!

 
Postado : 26/03/2017 8:27 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

Utilize o segundo código que passei.

 
Postado : 27/03/2017 5:14 am
(@dih120690)
Posts: 0
New Member
Topic starter
 

OK. Muito obrigado...Funcionou direito....Porém agora estou com outro problema.....as células da coluna B vão ser bloqueadas para edição, então automaticamente...quando eu apagar os valores (der delete para limpar a célula A), a coluna B também deveria apagar automaticamente...Só que nessa formula não acontece isso.HELP!

 
Postado : 27/03/2017 7:29 am
(@osvaldomp)
Posts: 857
Prominent Member
 

...as células da coluna B vão ser bloqueadas para edição,...
Esta é uma nova demanda!

quando eu apagar os valores (der delete para limpar a célula A), a coluna B também deveria apagar automaticamente...Só que nessa formula não acontece isso.
Esta é mais uma nova demanda.

Sugestão - pense em T U D O o que você quer e disponibilize um novo arquivo com as explicações necessárias e com as planilhas formatadas
E X A T A M E N T E__I G U A I S às originais.

 
Postado : 27/03/2017 9:39 am
(@dih120690)
Posts: 0
New Member
Topic starter
 

Primeiramente, obrigado! A questão é a seguinte.....No exemplo da planilha a única coisa bloqueada seria as perguntas, pois elas não podem ser alteradas manualmente. Porem quando escolho o item ele automaticamente puxa a pergunta...porém quando eu deleto este item a pergunta não desaparece.....ficando apenas a pergunta. Se caso acontecer de eu em determinado momento não precisar daquele item anteriormente selecionado, eu apago o item, porém a pergunta fica....precisaria ficar com essa linha em branco....Apagou o item...automaticamente já se apaga a pergunta tbm.Espero que consiga me ajudar!!

 
Postado : 27/03/2017 11:34 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Testaí:

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim k As Long
  If Target.Count > 1 Then Exit Sub
  If Target.Column > 1 Then Exit Sub
  Me.Unprotect Password:="123"
   If Target.Value = "" Then
     Rows(Target.Row).Delete
   ElseIf Application.CountIf(Sheets("Itens").[A:A], Target.Value) > 0 Then
    k = Sheets("Itens").[A:A].Find(Target.Value, lookat:=xlWhole).Row
    Target.Offset(, 1).Value = Sheets("Itens").Cells(k, 2)
   End If
  Me.Protect Password:="123", UserInterfaceOnly:=True
End Sub

obs. se você limpar a célula da coluna 'A' o código irá excluir a linha, se em lugar de excluir a linha você quiser somente limpar a linha então substitua esta linha

Rows(Target.Row).Delete

por esta

Rows(Target.Row).Value = ""
 
Postado : 27/03/2017 3:03 pm
(@dih120690)
Posts: 0
New Member
Topic starter
 

Testaí:

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim k As Long
  If Target.Count > 1 Then Exit Sub
  If Target.Column > 1 Then Exit Sub
  Me.Unprotect Password:="123"
   If Target.Value = "" Then
     Rows(Target.Row).Delete
   ElseIf Application.CountIf(Sheets("Itens").[A:A], Target.Value) > 0 Then
    k = Sheets("Itens").[A:A].Find(Target.Value, lookat:=xlWhole).Row
    Target.Offset(, 1).Value = Sheets("Itens").Cells(k, 2)
   End If
  Me.Protect Password:="123", UserInterfaceOnly:=True
End Sub

obs. se você limpar a célula da coluna 'A' o código irá excluir a linha, se em lugar de excluir a linha você quiser somente limpar a linha então substitua esta linha

Rows(Target.Row).Delete

por esta

Rows(Target.Row).Value = ""

Funcionou com a Rows(Target.Row).Value = "".............o problema é que não desejo apagar toda a linha....e sim apenas algumas células......teria como fazer isso?

 
Postado : 07/05/2017 6:16 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

...o problema é que não desejo apagar toda a linha....e sim apenas algumas células......teria como fazer isso?

Sim!

 
Postado : 07/05/2017 6:33 pm