O arquivo tem duas planilhas:
"Planilha1" - Possui uma tabela onde o usuário deve preencher as células do intervalo B2:O2. As opções de preenchimento de cada célula são fornecidas por uma lista de validação de dados que varia conforme o valor selecionado na célula anterior. Em outras palavras, as células do intervalo são interdependentes. Assim, para cada valor escolhido na célula B2, há uma lista de opções diferente para ser escolhida na célula C2. Por conseguinte, o valor que seleciono na célula C2 determina uma opção de valores para ser escolhido na célula D2 e assim sucessivamente.
O problema ocorre quando, após preencher todas as células do intervalo B2:O2, eu decido alterar o valor de qualquer uma dessas células. Nesse caso, terei que alterar manualmente o valor das células subsequentes. Gostaria de uma macro que preenchesse automaticamente o valor das células subsequentes com uma "sugestão" de valor a partir do valor escolhido na célula anterior.
Em outras palavras, para cada alteração em Cells(2,i), gostaria que o valor de Cells(2,j) fosse preenchido automaticamente com uma "sugestão" de valor, dado que i < j <= 14.
Essa "sugestão" o excel encontraria na Sheets("Planilha4").Range("DQ3:ER2649"), que é a "TabelaFonte" onde estão listados todos os valores possíveis de serem selecionados no intervalor "B2:O2".
No código que apresentei, eu tento preencher automaticamente o valor de Cells(2,j) com um procv, a partir do valor preenchido na célula imediatamente anterior Cells(2,j-1). Nesse caso o intervalo da "TabelaFonte" tem que variar para o procv funcionar.
Exemplo: se eu altero o valor da célula B2, a célula C2 vai procurar o valor de B2 no intervalo "Planilha4!DQ3:ER2649". O valor da célula D2, por conseguinte, vai procurar o valor de C2 no intervalo "Planilha4!DR3:ER2649", e assim sucessivamente, até a célula O2 (coluna j=14).
Espero que agora tenha ficado mais claro
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i, j As Integer
Dim TabelaFonte, Tabela, Referencia As Range
i = Target.Column
Set Tabela = Sheets("Planilha4").Range("DQ3:ER2649")
Set Referencia = Range(Tabela).Find(Target.Value, , , xlWhole)
Set TabelaFonte = Sheets("Planilha4").Range("Referencia", Cells(2649, 148))
If Not Intersect(Target, Range("B2:O2")) Is Nothing Then
For j = i + 1 To 14
Cells(2, j).Select
ActiveCell.Value = Application.WorksheetFunction.VLookup(Cells(2, j - 1).Value, TabelaFonte, 2, False)
Next
End If
End Sub
Postado : 12/01/2018 6:56 am