Notifications
Clear all

Macro permite valores que estão em um range com condicionais

3 Posts
2 Usuários
0 Reactions
714 Visualizações
 Ale
(@ale)
Posts: 0
New Member
Topic starter
 

Prezados(as), boa noite!

Preciso criar uma macro com algumas condicionais que impossibilitem o usuário de inserir (digitando ou colando) determinados valores de um range em outro range. Exemplo:
1- Na célula A1 existe uma lista suspensa (drop down list) com três opções: “Custo”, “Despesa “ e “Projeto;
2- Ao selecionar na lista suspensa a opção “Custo”, só serão permitidos inserir na coluna G da Plan1 valores que estão no range “R2:R5” contido na Plan2, ou seja, caso o usuário cole ou digite algum valor que não está neste range a planilha deverá emitir uma mensagem de aviso e exlcuir o valor inserido;
3- Da mesma forma deverá ocorrer ao selecionar na lista suspensa a opção “Despesa”, só serão permitidos inserir na coluna G da Plan1 valores que estão no range “F2:F5” contido na Plan2. Para a opção “Projeto”também deverá seguir o mesmo racional, só serão permitidos valores que estão no range “L2:L5”contido na Plan2;

Consegui fazer parte do código, porém sem conseguir todas as condicionais (opções da lista e diferentes ranges), sem emitir a mensagem corretamente, e sem excuir os valores inseridos:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Cell As Range
If Not Intersect(Target, Columns("G")) Is Nothing Then
For Each Cell In Intersect(Target, Columns("G"))
If IsNumeric(Application.Match(ActiveCell.Value, Sheets("Plan2").Range("R2:R5"), 0)) Then Target.ClearContents
Next
End If
End Sub

Gostaria de saber os códigos corretos que preciso inserir e ainda posteriormente aperfeiçoar minha planilha com mais dezenas de condicionais com a mesma lógica.
Infelizmente ainda sou iniciante nos estudos de VBA e não consegui resolver essa questão que acredito que para a maioria de vocês deve ser bem simples.
Desde já agradeço a colaboração e o apoio de vocês!!
Fico no aguardo.
Obrigado!

 
Postado : 05/10/2016 6:56 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei se entendi corretamente, mas veja se é isto :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    
    If Not Intersect(Target, Columns("G")) Is Nothing Then
    
        If IsNumeric(Application.Match(Target.Value, Sheets("Plan2").Range("R2:R5"), 0)) Then
            
        Else
            
            Application.EnableEvents = False
            Target.ClearContents
            Application.EnableEvents = True
        
        End If
        
    End If
    
End Sub

[]s

 
Postado : 05/10/2016 7:27 pm
 Ale
(@ale)
Posts: 0
New Member
Topic starter
 

Mauro, obrigado pelo apoio!
Todavia o que busco e preciso vai além desta validação de informação.
Preciso inserir as condicionais que estão na lista suspensa (três condicionais) e limitar os valores que poderão ser inseridos na coluna G conforme o range da Plan2.
Entendo que os códigos que você sugeriu são para buscar no range. Porém, preciso incluir as condições para os outros ranges de opções da lista suspensa e também incluir mensagem de erro.
Notei também que o código Target.clearcontents somente elimina o conteúdo de uma célula. Ao copiar e colar por exemplo um valor que não faz parte do range permitido a macro somente elimina na primeira tentativa.

Consegue me ajudar por gentileza?

Muito obrigado!

 
Postado : 05/10/2016 8:37 pm