Ir ao conteúdo

Excel VBA p/ Impedir o usuário Digitar na célula com regra


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Boa tarde Pessoal,

 

Nessa Guia eu deixo todas as células bloqueadas e deixo apenas essas células da coluna E liberadas para o usuário fazer os imputs de %.

               Preciso saber se teria alguma macro pra impediir do usuário digitar onde a célula referente a Coluna C e D for = zero/vazia, desde que não afete a fórmula existente na coluna E, ou seja, que ele continue lá após o usuário tentar imputar.

 

Aproveito também, uma msgbox pra avisar o usuário que não pode relizar tal operação.

 

O exemplo abaixo é de uma determinada marca de produto, são 31 marcas no total que estão em sequencia nessa mesma guia.

 

OBS: A macro não pode ser fixa, pois as fórmulas da coluna B até D são dinâmicos, pode ter várias rotas ou poucas rotas.

 

image.png.aea3eaed2c789a7a05fb39a83832df2e.png

desde já agradeço e muito obrigado.

Postado

Acho mais fácil guardar o valor da célula e voltar com ele no caso da operação inválida, veja se assim resolve,

 

Dim Valor As Variant

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Valor = ActiveCell
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect([E:E], Target) Is Nothing Then
        If Selection.Cells.Count > 1 Then
            GoTo INVALIDA
        End If
        If Target.Offset(0, -1) = 0 Or Target.Offset(0, -2) = 0 Then
INVALIDA:
            Application.EnableEvents = False
            Target = Valor
            Application.EnableEvents = True
            MsgBox "Operação inválida"
        End If
    End If
End Sub

 

  • Amei 1
Postado

@Midori

 

Na coluna E tem fórmula, são pesos sugeridos para o usuário aceitar ou ele mesmo colocar o peso que achar melhor, mas ele só deve colocar peso nessa coluna onde houver média de Vendas C e D.

 

O problema é que uma vez ou outra, o usuário digita peso fora do que eu expliquei e não deveria, ai passa despercebido por mim, no final do processo gera um retrabalho enorme pra abrir 36 arquivos e identificar que foi o infeliz que fez errado.

 

 

esse códgio abaixo foi eu que criei pra resolver isso, porém, não estou satifeito com ele, pois ele desloca pra pegar a fórmula em outra coluna e colar de volta, essa rotina e um paleativo, mas deixa a planilha um pouco mais pesada. Se houver uma rotina diferente da minha agradeço demais.

 

Private Sub Worksheet_Change(ByVal Target As Range)

fml = ActiveCell.Offset(-1, 13).FormulaR1C1 'variavel pra deslocar a fórmula na coluna R e colar na E

    If Target.Row >= 9 And Target.Row <= 943 And Target.Column = 5 Then
        If Cells(1, 7) = "Distribuição de Peso em local Indevido!" Then
        
        Cells(Target.Row, Target.Column) = fml
               
        MsgBox ("Sem histórico de venda dos últimos 6 meses") _
        & vbCrLf & vbCrLf & "Campo não permitido para digitação, repare que não há histórico de venda dos últimos 6 meses" & vbCrLf & vbCrLf & "***Favor Rever seu peso!***", vbCritical, "AÇÃO NÃO PERMITIDA"
        
            
    Else
    
        End If
                    
    End If
    
End Sub

  • Solução
Postado

@Scofieldgyn Veja se assim resolve,

 

Dim Valor As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Valor = ActiveCell.Formula
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect([E:E], Target) Is Nothing Then
        If Selection.Cells.Count > 1 Then
            GoTo INVALIDA
        End If
        If Target.Offset(0, -1) = 0 Or Target.Offset(0, -2) = 0 Then
INVALIDA:
            Application.EnableEvents = False
            Target.Formula = Valor
            Application.EnableEvents = True
            MsgBox "Operação inválida"
        End If
    End If
End Sub

 

  • Amei 1
Postado

@Midori Boa tarde, aproveitei esse mesmo tópico porque aqui está o histórico da nossa conversa e a oportunidade está relacionado ao código que me forneceu.

 

Eu gostaria de esconder as fórmulas através das opção nativa do excel, porém após selecionar os campos que desejo esconder, exceto a coluna [E:E] , dar um erro na execução do seu código. 

 

é possível ajustar esse código pra que não dê esse erro?

Postado

@Scofieldgyn Agora vi o erro, substitua a primeira Sub por essa, veja se resolve.

 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect([E:E], Target) Is Nothing Then
        If ActiveCell.HasFormula Then
            Valor = ActiveCell.Formula
        Else
            Valor = ActiveCell.Value
        End If
    End If
End Sub

 

  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!