Logo Hardware.com.br
Luis_Henrique10
Luis_Henriqu... Novo Membro Registrado
9 Mensagens 4 Curtidas

[Resolvido] Criação de programação no Excel

#1 Por Luis_Henriqu... 20/11/2017 - 10:19
Sou novo por aqui e estou precisando de ajuda em uma planilha do Excel.
Tenho 3 abas: anexo 1, anexo 2 e anexo 3, considerando:
Anexo 1 - Aba de informações;
Anexo 2 - Aba de informações;
Anexo 3 - Resultado de informações;
No anexo 1 e 2, tenho várias informações de determinadas pessoas. Preciso que as linhas das abas "anexo 1" e "anexo 2" apareçam no "anexo 3" quando a linha estiver pintada de amarela.
Porém, estou pintando a linha manualmente, pois o parâmetro para pintar a linha é: H (preenchida com OK); I (preenchida com OK); J (preenchida com OK) e K (preenchida com NÃO); Porém, este é o mesmo parâmetro para outras duas cores: verde e azul. Se fosse o caso, poderia criar outra coluna e quando precisasse alterar para amarelo, colocaria um OK e criaria uma formatação condicional para pintar de amarelo automaticamente.
Mas, retomando...
O que fazer para aparecer as linhas dos anexos 1 e 2 no anexo 3 quando estiverem pintadas de amarelo e desaparecerem quando alterar a cor?
Resumindo, quero criar uma espécie de espelho na aba 3, para refletir as linhas amarelas das abas 1 e 2.
Para facilitar o entendimento, segue em anexo cópia do modelo da planilha.

Anexos

Responder
Luis_Henrique10
Luis_Henriqu... Novo Membro Registrado
9 Mensagens 4 Curtidas
#3 Por Luis_Henriqu...
07/02/2018 - 14:31
Preciso de ajuda em uma planilha do Excel.
Tenho 03 abas, são elas:

Anexo 1 - Aba de informações;
Anexo 2 - Aba de informações;
Anexo 3 - Resultado de informações;
No anexo 1 e 2, tenho várias informações de determinadas pessoas. Preciso que as linhas das abas "anexo 1" e "anexo 2" apareçam no "anexo 3" quando estiverem pintadas de amarela e desapareçam quando alteradas no “anexo 1” e/ou “anexo 2”.

Resumindo, quero criar uma espécie de espelho na aba 3, para refletir as linhas amarelas das abas 1 e 2.
Para facilitar o entendimento, segue em anexo cópia do modelo da planilha.

Anexos

osvaldomp
osvaldomp Geek Registrado
753 Mensagens 558 Curtidas
#4 Por osvaldomp
07/02/2018 - 20:01
Veja se ajuda.
Instale o código abaixo no módulo de EstaPasta_de_trabalho, assim:
1. copie o código daqui
2. a partir de qualquer planilha tecle 'Alt+F11' para acessar o editor de VBA
3. no lado esquerdo da tela dê duplo clique em EstaPasta_de_trabalho
4. cole o código na janela em branco que vai se abrir
5. feito! 'Alt+Q' para retornar para a planilha e testar

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim m As Long
If Right(ActiveSheet.Name, 1) = 3 Then Exit Sub
If Target.Column <> 2 Or Target.Value = "" Then Exit Sub
Cancel = True
If Application.CountIf(Sheets("ANEXO 3&quot.[A:A], Cells(Target.Row, 1)) > 0 Then
m = Sheets("ANEXO 3&quot.[A:A].Find(Cells(Target.Row, 1), lookat:=xlWhole).Row
Sheets("ANEXO 3&quot.Rows(m).Delete
Else: Cells(Target.Row, 1).Resize(, 12).Copy Sheets("ANEXO 3&quot.Cells(Rows.Count, 1).End(3)(2)
End If
End Sub


funcionamento - o código será executado ao aplicar duplo clique em qualquer célula com conteúdo na coluna B ou da planilha 1 ou da 2; se o registro já existir na planilha 3 ele será removido, se não existir, será inserido

obs. considerei que os números de matrícula da coluna A serão únicos, pois esses números serão utilizados pelo código como critério de busca na planilha 3.
Osvaldo
Luis_Henrique10
Luis_Henriqu... Novo Membro Registrado
9 Mensagens 4 Curtidas
#5 Por Luis_Henriqu...
08/02/2018 - 09:16
osvaldomp disse:
Veja se ajuda.
Instale o código abaixo no módulo de EstaPasta_de_trabalho, assim:
1. copie o código daqui
2. a partir de qualquer planilha tecle 'Alt+F11' para acessar o editor de VBA
3. no lado esquerdo da tela dê duplo clique em EstaPasta_de_trabalho
4. cole o código na janela em branco que vai se abrir
5. feito! 'Alt+Q' para retornar para a planilha e testar

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim m As Long
If Right(ActiveSheet.Name, 1) = 3 Then Exit Sub
If Target.Column <> 2 Or Target.Value = "" Then Exit Sub
Cancel = True
If Application.CountIf(Sheets("ANEXO 3&quot.[A:A], Cells(Target.Row, 1)) > 0 Then
m = Sheets("ANEXO 3&quot.[A:A].Find(Cells(Target.Row, 1), lookat:=xlWhole).Row
Sheets("ANEXO 3&quot.Rows(m).Delete
Else: Cells(Target.Row, 1).Resize(, 12).Copy Sheets("ANEXO 3&quot.Cells(Rows.Count, 1).End(3)(2)
End If
End Sub


funcionamento - o código será executado ao aplicar duplo clique em qualquer célula com conteúdo na coluna B ou da planilha 1 ou da 2; se o registro já existir na planilha 3 ele será removido, se não existir, será inserido

obs. considerei que os números de matrícula da coluna A serão únicos, pois esses números serão utilizados pelo código como critério de busca na planilha 3.


Bom dia, colega.
Na verdade me atende em partes, pois desta forma não preciso selecionar todos os amarelos da planilha manualmente para colar no anexo3. Com o seu código consigo isso apenas com 2 cliques.

Porém, preciso de uma maneira (se é que existe) para que, quando alguma linha amarela dos anexos 1 e/ou 2 alterarem de cor, ela desapareça do anexo 3.
Condicionando: Linha do anexo 1 e/ou 2 está amarela? Preciso de uma cópia dela no anexo 3.
A linha estava amarela e foi alterada de cor? Preciso que desapareça a cópia no anexo 3.

No ensejo, agradeço a disponibilidade e o compartilhamento de conhecimento.
osvaldomp
osvaldomp Geek Registrado
753 Mensagens 558 Curtidas
#6 Por osvaldomp
08/02/2018 - 10:04
Luis_Henrique10 disse:

Na verdade me atende em partes, pois desta forma não preciso selecionar todos os amarelos da planilha manualmente para colar no anexo3. Com o seu código consigo isso apenas com 2 cliques.
Não sei se você testou, o código que passei exclui o registro da planilha 3, também via duplo clique na planilha de origem, então você pode remover a cor e em seguida aplicar duplo clique para remover o registro wink.png

Condicionando:
Linha do anexo 1 e/ou 2 está amarela? Preciso de uma cópia dela no anexo 3.
A linha estava amarela e foi alterada de cor? Preciso que desapareça a cópia no anexo 3.
Não é possível da forma que você pretende pois a alteração manual da cor de preenchimento de células não dispara qualquer evento (que eu saiba).
Um outro caminho (além do duplo clique) seria, ao invés de colorir manualmente como você faz, aplicar Formatação Condicional para colorir as células, dessa forma seria possível utilizar critério igual ao da FC para disparar um evento que faria o que você pretende, ou seja, replicar/excluir o registro na/da planilha 3.


sugestão - para responder clique em Digitar ..., localizado abaixo da última postagem, só clique em Citação se necessário
Osvaldo
Luis_Henrique10
Luis_Henriqu... Novo Membro Registrado
9 Mensagens 4 Curtidas
#7 Por Luis_Henriqu...
08/02/2018 - 10:24
Não sei se você testou, o código que passei exclui o registro da planilha 3, também via duplo clique na planilha de origem, então você pode remover a cor e em seguida aplicar duplo clique para remover o registro wink.png
Realmente, só havia testado o duplo clique 1 vez. No caso, no primeiro duplo clique, ele insere, e no segundo, ele remove. Ótimo!

Não é possível da forma que você pretende pois a alteração manual da cor de preenchimento de células não dispara qualquer evento (que eu saiba).
Um outro caminho (além do duplo clique) seria, ao invés de colorir manualmente como você faz, aplicar Formatação Condicional para colorir as células, dessa forma seria possível utilizar critério igual ao da FC para disparar um evento que faria o que você pretende, ou seja, replicar/excluir o registro na/da planilha 3.

Até então, tenho as mesmas condições para pintar amarela, azul e verde. Então, para criar uma condicional, teria que criar uma outra coluna para diferenciar. Exemplo:
Nova Coluna -
Pintar de amarelo? Caso preencha com "sim", a linha é colorida.
Assim, conseguiria fazer a condicional e pintar automático. Neste caso, você conseguiria pensar em outra forma?
No mais, reitero o agradecimento. Foi de grande ajuda.
osvaldomp
osvaldomp Geek Registrado
753 Mensagens 558 Curtidas
#8 Por osvaldomp
08/02/2018 - 11:30
Luis_Henrique10 disse:

Realmente, só havia testado o duplo clique 1 vez. No caso, no primeiro duplo clique, ele insere, e no segundo, ele remove. Ótimo!
[QUOTE="osvaldomp, post: 7948761, member: 964656"]
osvaldomp disse:

funcionamento - o código será executado ao aplicar duplo clique em qualquer célula com conteúdo na coluna B ou da planilha 1 ou da 2; se o registro já existir na planilha 3 ele será removido, se não existir, será inserido ~~~> Me parece que não fui claro o suficiente fiquei_triste.png


Nova Coluna -
Pintar de amarelo? Caso preencha com "sim", a linha é colorida.
Assim, conseguiria fazer a condicional e pintar automático. Neste caso, você conseguiria pensar em outra forma?
Sim, essa é uma solução viável para efeitos de incluir/excluir registros na planilha 3. (Não me parece mais prática do que o duplo clique, mas ...)
Para prosseguirmos, por favor disponibilize uma nova amostra de arquivo Excel já com essa nova coluna de controle, com a FC aplicada (se você tiver facilidade para aplicar) e com as matrículas únicas.

[/QUOTE]
Osvaldo
Luis_Henrique10
Luis_Henriqu... Novo Membro Registrado
9 Mensagens 4 Curtidas
#9 Por Luis_Henriqu...
08/02/2018 - 13:26
funcionamento - o código será executado ao aplicar duplo clique em qualquer célula com conteúdo na coluna B ou da planilha 1 ou da 2; se o registro já existir na planilha 3 ele será removido, se não existir, será inserido ~~~> Me parece que não fui claro o suficiente fiquei_triste.png

Sim, talvez eu tenha me expressado mal, mas compreendi e é exatamente isso que quis dizer.
-
Para prosseguirmos, por favor disponibilize uma nova amostra de arquivo Excel já com essa nova coluna de controle, com a FC aplicada (se você tiver facilidade para aplicar) e com as matrículas únicas.

Segue em anexo amostra da planilha com a nova coluna e a FC aplicada.

Anexos

osvaldomp
osvaldomp Geek Registrado
753 Mensagens 558 Curtidas
#10 Por osvaldomp
08/02/2018 - 15:04
O que eu quis dizer é que da primeira vez que informei sobre duplo clique para remover o registro não fui claro, pois só após a segunda vez que informei é que você "descobriu" esse recurso que está no código. smile.png

Experimente esta abaixo no lugar do anterior.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim m As Long
If Right(ActiveSheet.Name, 1) = 3 Then Exit Sub
If Target.Column <> 12 Then Exit Sub
If Target.Value = "sim" Then
Cells(Target.Row, 1).Resize(, 13).Copy Sheets("ANEXO 3&quot.Cells(Rows.Count, 1).End(3)(2)
Else: m = Sheets("ANEXO 3&quot.[A:A].Find(Cells(Target.Row, 1), lookat:=xlWhole).Row
Sheets("ANEXO 3&quot.Rows(m).Delete
End If
End Sub
Osvaldo
Luis_Henrique10
Luis_Henriqu... Novo Membro Registrado
9 Mensagens 4 Curtidas
#11 Por Luis_Henriqu...
08/02/2018 - 15:42
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim m As Long
If Right(ActiveSheet.Name, 1) = 3 Then Exit Sub
If Target.Column <> 12 Then Exit Sub
If Target.Value = "sim" Then
Cells(Target.Row, 1).Resize(, 13).Copy Sheets("ANEXO 3").Cells(Rows.Count, 1).End(3)(2)
Else: m = Sheets("ANEXO 3").[A:A].Find(Cells(Target.Row, 1), lookat:=xlWhole).Row
Sheets("ANEXO 3").Rows(m).Delete
End If

End Sub

Genial, era exatamente isso.
Só preciso apagar todos os "sim" das colunas L dos anexos 1 e 2 que foram inseridas anteriores a inserção do código, pois quando tento apagar após inserir o código, ele apresenta um erro em tempo de execução "91": A variável do objeto ou a variável do bloco with' não foi definida.
Mais uma vez, muitíssimo obrigado pela ajuda e desculpe o transtorno. Sou extremamente leigo em códigos (e aqui no fórum também).
A propósito, consigo te pontuar pela ajuda?
Grato.
osvaldomp
osvaldomp Geek Registrado
753 Mensagens 558 Curtidas
#12 Por osvaldomp
08/02/2018 - 15:54
Luis_Henrique10 disse:

Só preciso apagar todos os "sim" ...
O erro é porque o registro não é encontrado na planilha 3. Uma opção é apagar antes de instalar o código ou, dependendo da quantidade você pode selecionar a célula com "sim" | apertar F2 | em seguida apertar Enter | em seguida apagar o "sim". Deve ser um "sim" por vez.


A propósito, consigo te pontuar pela ajuda?
Basta você clicar no Curtir e já estaremos todos felizes super.gifcomemorando.gif
Grato.
Osvaldo
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal