Ir ao conteúdo

Posts recomendados

Postado

Olá, pessoal. Boa noite.

 

Estou criando uma planilha no Excel e me deparei com um problema que, por não conhecer os fundamentos de programação Vba, não consegui dar sequencia na criação da mesma e dessa forma, estou pedindo uma ajuda nesse sentido.

 

A situação é a seguinte: tenho quatro colunas A, B, C, D de certa forma relacionadas entre si, as quais estão dispostas abaixo:

 

        A             B              C             D

1  LIGUE   RELIGUE   LACRE   CORTE

2   Ativo

3   Ativo

4   Ativo

5   Ativo

 

Na coluna A, todas as células iniciam preenchidas com a palavra "Ativo" e as colunas B, C e D estão vazias.

 

Em uma determinada situação, caso precise efetuar um LACRE (Coluna C), deverei digitar na célula C2 a expressão "Executado". Fazendo isto, C2 = "Executado" e,  A2 = "", B2 = "" e D2 = "". O preenchimento da célula C2 deve deletar o conteúdo da célula A2 (ficar em branco).

 

Em outra situação, caso precise efetuar um CORTE (Coluna D), deverei digitar na célula D2 a expressão "Executado". Feito isto, D2 = "Executado" e, A2 = "", B2 = "" e C2 = "". O preenchimento da célula D2 deve deletar o conteúdo da célula A2 (ficar em branco).

 

Por outro lado, caso seja necessário efetuar um RELIGUE (Coluna D ), deverei digitar na célula B2 a expressão "Executado". Feito isto, B2 = "Executado"; A2 = "Ativo", C2 = "" e D2 = "". O preenchimento da célula B2 deve deletar o conteúdo das células C2 ou D2, caso existam valores em alguma e reatribui o valor "Ativo" para a célula A2.

 

Desde já, agradeço ao Fórum e a todos aqueles que me ajudem a resolver este problema.

 

Grato,

Postado

Olá,

 

Clique com o botão direito do mouse sobre o nome da sua aba (Como se fosse renomeá-la) e depois clique em Exibir Código.

 

Cole isso no editor de texto e feche e janela, em seguida teste se funciona como deseja.

Private Sub Worksheet_Change(ByVal Target As Range)    If Target.Row > 1 And UCase(Target.Value) = "EXECUTADO" Then        Application.EnableEvents = False            Select Case Target.Column                Case 2                    Target.Offset(0, -1) = "Ativo"                    Range(Target.Offset(0, 1), Target.Offset(0, 2)).ClearContents                Case 3, 4                    Cells(Target.Row, 1).ClearContents            End Select        Application.EnableEvents = True    End IfEnd Sub
  • Curtir 1
Postado

Olá, Wendell

 

bom dia.

 

Obrigado pela ajuda com o código enviado. Está quase funcional, porém em duas situações acaba ocorrendo um erro.

 

Condições:

 

1  Se A = Ativo, então B = "". C="" e D="" ----- Está funcionando.

 

2  Se C = Executado, então A="", B="" e D="" ---- Está funcionando.

                                ou

3  Se D =Executado, então A= "", B="" e C =""---- Está funcionando.

 

4  Se B = Executado, então A=Ativo, B="", C="" e D="" ---- Está funcionando.

 

Entretanto, em 4 ocorre um problema. B = Executado, quando deveria ficar vazio.

Isto porque, se formos atribuir valor a C ou D (Condição 2 ou 3) novamente na mesma linha, o sistema

reporta erro, ou seja, C ou D (dependendo da escolha) = Executado, e B=Executado (resultado da condição 4) não fica vazio, o que tem gerado um erro.

 

A simulação abaixo está sendo feita como se fosse em uma mesma linha.

 

Ligue       Religue       Corte          Lacre

 

Ativo                                                                  Situação inicial

 

                                Executado                         Cliente está inadimplente e cortamos o serviço, ficando A="", B="". C=Executado e D=""

Ativo                                                                  Cliente apresente pagamento e restauramos o serviço B=Executado, ficando A=Ativo, B="", C="" e D=""

 

                                                Executado         Cliente solicita cancelamento do serviço e lacramos o ponto, ficando A="", B="", C="" e D="Executado" 

 

Neste quadro, se eu tentar religar o cliente, fazendo B=Executado, então A=Ativo, B=Executado (deveria ficar Vazio quando A ficasse Ativo), C ="" e D="".

Se após, eu efetuar um Corte (C=Executado) ou um Lacre (D=Executado), o código exibe uma mensagem de erro.

 

Grosseiramente falando:

 

A=Ativo => B="", C="", D=""

C=Executado => A="", B="" e D=""

D=Executado => A="", B="" e C=""

B=Executado => A=Ativo, B="", C="" e D="" ---> Só colocaremos valor em B (Executado), quando C ou D estiverem como Executado, o que fará com que A = Ativo. Ou seja,

                                                                              B é um defensor de A, já que C e D são os vilões (rsrsrsrs).

 

 

Esta é a situação.

 

Grato pela ajuda.

 

Luiz Alberto

 

 

Obs. Tentei colocar parte da planilha em Anexo, mas recebo msg de erro aqui no fórum.

 

Grato,

 

Luiz Alberto

Postado

Olá Luiz,

 

Confesso que não entendi muito bem, você quer que ao preencher a coluna B com "Executado" a macro coloque "Ativo" na coluna A sem apagar o que estiver nas colunas C ou D?

 

Para postar planilhas com macro no fórum você precisa zipar o arquivo antes.

Postado

Wendell, boa tarde.

Tudo bem contigo?

Isso mesmo. Vou tentar me explicar melhor.

As condições abaixo, como teste, refere-se apenas a linha 2 nas colunas em questao.

1) Condicao inicial: o cliente esta ativo, então, as celulas ficarao com A=Ativo, B=vazia, C=vazia e D=vazia

2) Caso o cliente seja inadimplente, então digitarei em C2=Executado. As celulas A2=vazio, B2=vazio, C2=Executado e D2=vazio.

Ou

3) O cliente não deseja mais o servico, então eu Lacro o servico. As celulas A2=vazio, B2=vazio, C2=vazio; e D2=Executado.

Observe que ou eu Corto ou Lacro.

4) Nesta opção o cliente me pede para religar o servico (coluna B ). então, eu faco B2=Executado e, apos digitar em B2, A2=Ativo (Estava vazia em funcao da opcao 2 ou 3), B2=vazio, C2=vazio e D2=vazio

Como voce pode perceber, tudo pode acontecer em uma mesma linha nestas 4 colunas. O cliente esta ativo; podemos cortar; podemos lacrar; e podemos religar o servico.

Esta situacao é dinamica e pode acontecer para todos os clientes nas 286 linhas da estrutura.


Grato,

Luiz Alberto
 

Postado

Assim?

Private Sub Worksheet_Change(ByVal Target As Range)    If Target.Row > 1 And UCase(Target.Value) = "EXECUTADO" Then        Application.EnableEvents = False            Select Case Target.Column                Case 2                    Target.Offset(0, -1) = "Ativo"                    Range(Target, Target.Offset(0, 2)).ClearContents                Case 3                    Range(Target.Offset(0, -2), Target.Offset(0, -1)).ClearContents                    Target.Offset(0, 1).ClearContents                Case 4                    Range(Target.Offset(0, -3), Target.Offset(0, -1)).ClearContents            End Select        Application.EnableEvents = True        Target.Copy    End IfEnd Sub
  • Curtir 1
Postado

Feche todas as planilhas, abra de novo e experimente esse;

Private Sub Worksheet_Change(ByVal Target As Range)    If Target.Count = 1 Then        If Target.Row > 1 And UCase(Target.Value) = "EXECUTADO" Then            Application.EnableEvents = False                Select Case Target.Column                    Case 2                        Target.Offset(0, -1) = "Ativo"                        Range(Target, Target.Offset(0, 2)).ClearContents                    Case 3                        Range(Target.Offset(0, -2), Target.Offset(0, -1)).ClearContents                        Target.Offset(0, 1).ClearContents                    Case 4                        Range(Target.Offset(0, -3), Target.Offset(0, -1)).ClearContents                End Select            Application.EnableEvents = True            Target.Copy        End If    End IfEnd Sub
Postado

Wendel,

 

beleza. Vou testar agora.

 

 

Apenas para tirar uma dúvida: Na planilha final, LIGUE, RELIGUE, CORTE e LACRE estão, respectivamente nas colunas E, F, G e H. O código que você me passou e que eu estava testando, encontravam-se nas colunas A, B, C e D.

 

Há algo que possa ser modificado no código para que as novas colunas sejam identificadas?

 

Sds,

 

Luiz

  • Solução
Postado

Para funcionar nessas colunas utilize esse:

Private Sub Worksheet_Change(ByVal Target As Range)    If Target.Count = 1 Then        If Target.Row > 1 And UCase(Target.Value) = "EXECUTADO" Then            Application.EnableEvents = False                Select Case Target.Column                    Case 6                        Target.Offset(0, -1) = "Ativo"                        Range(Target, Target.Offset(0, 2)).ClearContents                    Case 7                        Range(Target.Offset(0, -2), Target.Offset(0, -1)).ClearContents                        Target.Offset(0, 1).ClearContents                    Case 8                        Range(Target.Offset(0, -3), Target.Offset(0, -1)).ClearContents                End Select            Application.EnableEvents = True            Target.Copy        End If    End IfEnd Sub
  • Curtir 1
Postado

Wendell,

 

Executei o novo código e, sem dúvida, está perfeito.

 

Apenas fiquei na dúvida quanto ao reposicionamento das colunas da planilha final em relação a esta de teste com apenas 4 colunas que estava usando.

 

Parabéns pelo código!!!!

 

:D

 

Luiz

Visitante
Este tópico está impedido de receber novas respostas.

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!