Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Léo Piccinin

Copiar a cor de fundo de uma celula para outra automaticamente

Recommended Posts

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.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Edson, infelizmente não pode ser dessa maneira. Pensei que seria fácil de resolver isso, mas já fiz essa mesma pergunta nuns 10 fóruns e ninguém soube ou se deu ao trabalho de responder. :(

     

    Compartilhar este post


    Link para o post
    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. 

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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.

    Compartilhar este post


    Link para o post
    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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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.

    Editado por Léo Piccinin

    Compartilhar este post


    Link para o post
    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

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×