Ir ao conteúdo
  • Cadastre-se

Copiar a cor de fundo de uma celula para outra automaticamente


Visitante

Posts recomendados

Boa noite.

 

Pessoal, meu problema é relativamente simples para quem entende de VBA. Quero que ao ser mudada a cor de fundo de uma célula, automaticamente essa cor também seja alterada na célula correspondente de outra planilha. Ex.: Se eu alterar a cor de fundo da célula da Plan1!A1, quero que essa cor automaticamente seja alterada (copiada) na Plan2!A1. Agradeço por qualquer ajuda.

Link para o comentário
Compartilhar em outros sites

Léo, só prá lembrar a você que, estando na planilha Plan1, se você selecionar a "orelha" da Plan2 com Control, você cria um grupo de Planilhas e tudo que fizer em uma vai acontecer na outra também, valores, formatos, fórmulas... Só não esquece de desagrupar depois, clicando em qualquer outra aba ou clicando com o botão direito na aba e selecionar "Desagrupar".

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Mas em termos práticos como você quer que o programa responda: é só num intervalo de células de Plan1, é qualquer célula, é quando clicar num botão, é só formato, ou é valor também, largura de coluna, cor de fonte, borda, fundo, etc., etc., etc...  Especifique com o máximo de detalhe como você espera que o Excel reaja. 

Link para o comentário
Compartilhar em outros sites

Vou exemplificar. Na minha Plan1 no intervalo A1:J1 tem 10 células cujas cores serão alteradas manualmente. Independentemente da cor que for colocada, quero que as cores do intervalo A1:J1 da Plan1, sejam "espelhadas" (copiadas automaticamente) para as células do intervalo C3:L3 da Plan5. Note que para cada célula da Plan1, tem uma célula correspondente na Plan5 que deverá ter a mesma cor da Plan1.

Link para o comentário
Compartilhar em outros sites

Bom dia, Léo

 

Tendo em vista que o ato de formatar células (cor, fundo, fonte, etc.) não chega a disparar nenhum evento no Excel, teria que  usar um artifício que seria cercar o problema usando diversas armadilhas de evento, embora algumas possam se tornar às vezes redundantes. O efeito colateral disso é que pode haver um pouco mais de lentidão. Uma ideia que você poderia experimentar seria inserir no módulo de eventos de nível de Workbook ("EstaPastaDeTrabalho") o seguinte:

Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  CopiaCorFonteEFundo ws:=Sh, flag:=True
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  CopiaCorFonteEFundo ws:=Sh, flag:=False
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  CopiaCorFonteEFundo ws:=Sh, flag:=True
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
  CopiaCorFonteEFundo ws:=Wn.ActiveSheet, flag:=False
End Sub

Sub CopiaCorFonteEFundo(ws As Worksheet, flag As Boolean)
  Dim rgOrigem As Range, rgDestino As Range
  If (ws.Name = "Plan1" And flag) Or (ws.Name = "Plan2" And Not flag) Then
    Set rgOrigem = ThisWorkbook.Worksheets("Plan1").Range("A1:J1")
    Set rgDestino = ThisWorkbook.Worksheets("Plan2").Range("C3:L3")
    rgDestino.Interior.ColorIndex = rgOrigem.Interior.ColorIndex
    rgDestino.Font.Color = rgOrigem.Font.Color
  End If
  Set rgOrigem = Nothing
  Set rgDestino = Nothing
End Sub

O primeiro (SheetSelectionChange) é que mais "trabalha", agindo sempre que você clicar em qualquer célula. O segundo (SheetActivate) dispararia ao entrar na Plan2. O terceiro (SheetChange) é útil caso você tenha formatações condicionais, por exemplo. Por fim, WindowsActivate pode ser útil caso você trabalhe com mais de uma janela do mesmo workbook aberta ao mesmo tempo, atuando caso você clique de uma  janela para outra. Nesse último caso, vale lembrar que com duas janelas abertas ao mesmo tempo, naquela em que está exibindo o intervalo de destino você não verá a mudança simultaneamente simplesmente com formatação, mas sim quando clicar na janela ou ocorrer outro dos eventos já "cercados".

Agora, se for realmente muito necessário que seja (quase) instantaneamente um artifício seria usar uma armadilha de tempo (OnTime), digamos a cada x segundos atualizar, mas penso que além de deixar tudo muito lento, seria um preciosismo desnecessário.

Link para o comentário
Compartilhar em outros sites

Boa tarde.

Branco, primeiramente obrigado pela disposição de ajudar. Coloquei esse código que você postou mas simplesmente não aconteceu nada. Não acusou erro, mas tb não fez o espelhamento do cores como desejado.

Link para o comentário
Compartilhar em outros sites

Em 24/02/2017 às 17:41, Léo Piccinin disse:

Coloquei esse código que você postou mas simplesmente não aconteceu nada.

 

Estranho Léo. Você seguiu a recomendação que lhe fiz no post anterior?

 

Em 23/02/2017 às 12:24, Edson Luiz Branco disse:

...Uma ideia que você poderia experimentar seria inserir no módulo de eventos de nível de Workbook ("EstaPastaDeTrabalho") o seguinte...

 

 

Ou seja, o código tem que ser inserido não num módulo normal (Módulo1, 2, etc), mas no módulo "EstaPastaDeTrabalho" que no VBE aparece no canto superior esquerdo da janela Projeto, conforme imagem:

 

 

58b4ea05a4c48_MduloClasseWorkbook.jpg.3dd360e331199fdccdf4432ae97f52d4.jpg

 

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...

Duvida postada em 2017 e provavelmente o problema já foi resolvido por quem postou.

Não sou especialista em Excel, mas tive um problema semelhante e a melhor forma de resolver (sem macro, coisa que só sei superficialmente), foi assim:

Como copiar cor e conteúdo de células da Plan1 para a Plan2, de forma que a Plan2 reflita o conteúdo da Plan1

Na Plan1    , coluna C linha 4 - célula colorida verde escrito verde
                   , coluna C linha 5 - célula colorida laranja escrito laranja
                   , coluna C linha 6 - célula colorida azul escrito azul

Na Plan2, eu quero refletir qualquer mudança de conteúdo e de cor das células acima, só que a partir da coluna F linhas 12, 13 e 14
Faça:
Copiar na Plan1 a coluna C linha 4 
Posicionar o cursor na Plan2 coluna F linha 12 
Botão direito e selecione "Colar Especial"; "Outras opções para colar" e selecione "Imagem vinculada (I)"
A formula gerada é: =Plan1!$C$4   Obs.: Não adianta simplesmente digitar essa formula, pois só refletirá o conteúdo e não a cor é obrigatório o uso da opção "Imagem vinculada (I)"
Depois de feita a 1ª vez, ai sim, copie e cole essa fórmula "em cada célula da Plan2, uma a uma" (Não funciona colar em lote).
Em cada célula da Plan2, corrija a linha (e/ou a coluna) correspondente a célula de origem na Plan1.

E, dessa forma, qualquer mudança de cores ou de conteúdo das células da Plan1, serão refletidas na Plan2.
Pode dar trabalho em futuras manutenções com a inclusão de novos dados na Plan1 mas, nunca encontrei nenhuma outra solução com essa simplicidade.

Espero ter contribuído.

Link para o comentário
Compartilhar em outros sites

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...