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:  
antonioneto7

RESOLVIDO Problema com automatização de planilha no Excel

Recommended Posts

Galera,

To com um probleminha já tentei resolver de várias formas, menos por VBA pois não tenho muito conhecimento, até tenho, mas não suficiente. (talvez a solução esteja aí).

O problema é o seguinte, eu tenho uma tabela na qual atualizo dezenas de valores, estes estão separados por meses e são baseados no valor de uma única célula que é atualizada todos os meses. Para deixar mais claro ver imagem em anexo. post-725006-0-89047400-1401364345_thumb.

 

Gostaria que o valor das células AB5, AC5, AD5... até DEZ (e as respectivas para os outros projetos) fossem preenchidas automaticamente. O valor delas é formado da seguinte maneira: H5-(soma de todos os meses anteriores).

 

Porém, o grande problema é que, a cada vez que eu atualizar o valor de H5, o resultado não passa para o mês seguinte, ele fica sempre no mês que foi colocado a fórmula.

PS.: os valores até MAR foram colocados à mão, já os valores de abril é dado por uma fórmula (de novo, que não se “perpetua” para os meses seguintes). E existem muito mais células do que isso, apenas resumi para facilitar.

Espero ter sido o mais claro possível.

Como posso resolver isso?

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimente e veja se entendi corretamente.

Instale o código abaixo no módulo da planilha, assim:
1. copie o código daqui
2. clique com o direito na guia da planilha de interesse e escolha 'Exibir código'
3. cole o código na janela em branco que vai se abrir
4. feito! 'Alt+Q' para retornar para a planilha e testar

funcionamento - ao alterar o valor na coluna "H", em qualquer linha, o código vai lançar na primeira coluna vazia, mesma linha, o valor de "H" menos os valores existentes naquela linha a partir de "Y".

obs. considerei que após a coluna "AJ" as linhas estão vazias
 

Private Sub Worksheet_Change(ByVal Target As Range)  Dim LC As Long    If Target.Count > 1 Then Exit Sub      If Target.Column = 8 Then        LC = Cells(Target.Row, Columns.Count).End(xlToLeft).Column          If LC < 25 Then Cells(Target.Row, 25) = Cells(Target.Row, 8): Exit Sub          Cells(Target.Row, LC + 1) = Cells(Target.Row, 8) - _            Application.Sum(Range(Cells(Target.Row, 25), Cells(Target.Row, LC)))      End IfEnd Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Olá, Osvaldo

    Muito obrigado pela resposta, mas não deu certo não.

     

    Vou te mandar a planilha e talvez fique mais fácil pra você ver...

     

    A ideia (funcionamento) do seu código está correta, porém por alguma razão não funcionou aqui...

     

    Além do cálculo baseado em H (Avanço físico) existe um outro baseado na coluna J (avanço financeiro), sendo que o de cálculo do avanço físico tem um range Y:AJ enquanto que o avanço financeiro tem um range AK:AV. Ignorar a última parte "IP Ponderado"

     

    Espero que fique mais claro e que você possa me ajudar :D

    PLANILHA TESTE PROJ.xlsx

    Editado por antonioneto7

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    ... mas não deu certo não.

    O código que sugeri atende ao que você solicitou no post #1. Mas com base no que você relata aí abaixo, parece que agora você quer cálculos que não foram citados antes... :confused:

     

    Vou te mandar a planilha e talvez fique mais fácil pra você ver...

    Não ajuda em nada postar uma planilha com toneladas de dados com a esperança que eu adivinhe o que você quer após perder longo tempo para analisar. :P

    Disponibilize uma planilha simplificada, com poucos dados, 5 ou 6 linhas, coloque os resultados desejados com as explicações na própria planilha de como obteve tais resultados. ;)

     

    A ideia (funcionamento) do seu código está correta, porém por alguma razão não funcionou aqui...

    O código que sugeri atende ao que você solicitou no post #1. Mas com base no que você relata aí abaixo, parece que agora você quer cálculos que não foram citados antes... :confused:

     

    Além do cálculo baseado em H (Avanço físico) existe um outro baseado na coluna J (avanço financeiro), sendo que o de cálculo do avanço físico tem um range Y:AJ enquanto que o avanço financeiro tem um range AK:AV. Ignorar a última parte "IP Ponderado"

    Desculpe, não entendi. <_<

     

    Espero que fique mais claro e que você possa me ajudar :D

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Entendi, Osvaldo! :D

     

    A planilha tem bastante informação mesmo! Tô meio ocupado agora, mas vou preparar uma planilha de exemplo bem explicada pra você entender!

     

    Muito obrigado, novamente :)

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Tentei esclarecer o máximo possível.

      :aplausos:   :D

     

    Fala, Antonio.

    Testaí e retorne se precisar de algum ajuste.

    Substitua o código anterior por este:

    Private Sub Worksheet_Change(ByVal Target As Range)  Dim LC As Long    If Target.Count > 1 Then Exit Sub      If Target.Column = 8 And Target.Value <> "" And Cells(Target.Row, "G") = "Real." Then        If Cells(Target.Row, "AJ") <> "" Then MsgBox "DEZ já está preenchido": Exit Sub        LC = Cells(Target.Row, "AJ").End(xlToLeft).Column          If LC < 25 Then Cells(Target.Row, 25) = Cells(Target.Row, 8): Exit Sub            Cells(Target.Row, LC + 1) = Cells(Target.Row, 8) - _              Application.Sum(Range(Cells(Target.Row, 25), Cells(Target.Row, LC)))      ElseIf Target.Column = 10 And Target.Value <> "" And Cells(Target.Row, "G") = "Real." Then        If Cells(Target.Row, "AV") <> "" Then MsgBox "DEZ já está preenchido": Exit Sub        LC = Cells(Target.Row, "AV").End(xlToLeft).Column          If LC < 37 Then Cells(Target.Row, 37) = Cells(Target.Row, 10): Exit Sub            Cells(Target.Row, LC + 1) = Cells(Target.Row, 10) - _              Application.Sum(Range(Cells(Target.Row, 37), Cells(Target.Row, LC)))      End IfEnd Sub

    funcionamento :

    1. ao inserir novo valor em células da coluna "H", e a célula da mesma linha na coluna "G" tiver o conteúdo "Real.", o código lançará na primeira coluna vazia após "Y", mesma linha, o valor inserido em "H" menos os valores existentes naquela linha no intervalo "Y:AJ".  ;)

    2. ao inserir novo valor em células da coluna "J", e a célula da mesma linha na coluna "G" tiver o conteúdo "Real.", o código lançará na primeira coluna vazia após "AK", mesma linha, o valor inserido em "J" menos os valores existentes naquela linha no intervalo "Ak:AV". ;)

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Grande Osvaldo!

     

    Muito obrigado, funcionou perfeitamente! :D  :aplausos:  :aplausos:

     

    Vou precisar fazer o mesmo para alguns outros dados, em outra planilha. O que devo mudar no código?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Vou precisar fazer o mesmo para alguns outros dados, em outra planilha. O que devo mudar no código?

     

    Se a estrutura da outra planilha for idêntica e se os procedimentos a serem executados pelo código também serão idênticos àquela em que foi instalado o código, é só instalar o código no módulo da outra planilha. :)

    Se não for, sugiro que você disponibilize a outra planilha com as explicações, de forma semelhante ao seu post #6 ( :joia: ).

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Osvaldo,

    ainda no mesmo problema, o de alterar o valor de um dado em uma célula e ele fazer a conta pra dar o resultado.

    Gostaria de saber se é possível alterar a planilha na qual o valor é alterado.

     

    Deixe-me explicar melhor:

     

    - Atualmente o código que você fez qualquer alteração feita na coluna "H" na linha que tenha "Real." realiza uma operação de subtração deste valor de H e joga na próxima linha vazia no range Y:AJ.

    - O que eu gostaria agora era que essa "coluna H" fosse em outra planilha, mas que a operação fosse realizada na mesma planilha (a que é feita atualmente), seria algo =MENU!H5-SOMA(Y5:AB5) ao invés de =H5-Soma(Y5:AB5).

     

    Deu pra entender? :D

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    - Atualmente o código que você fez qualquer alteração feita na coluna "H" na linha que tenha "Real." realiza uma operação de subtração deste valor de H e joga na próxima linha vazia no range Y:AJ.

    - O que eu gostaria agora era que essa "coluna H" fosse em outra planilha, mas que a operação fosse realizada na mesma planilha (a que é feita atualmente), seria algo =MENU!H5-SOMA(Y5:AB5) ao invés de =H5-Soma(Y5:AB5).

     

     

    Instale este código no módulo da planilha na qual você fará os lançamentos nas colunas "H" e "J".

    O código efetuará os cálculos com os dados existentes na planilha "MENU" e nela lançará os resultados.

    O cálculo, bem como o resultado, serão efetuados na linha de mesmo número da linha em que houver a alteração em "H" ou "J" da planilha que contiver este código.

    Caso o código postado antes esteja instalado no módulo da planilha "MENU" remova-o.

     

    Private Sub Worksheet_Change(ByVal Target As Range)  Dim LC As Long    If Target.Count > 1 Then Exit Sub      If Target.Column = 8 And Target.Value <> "" And Cells(Target.Row, "G") = "Real." Then              With Sheets("MENU")        If .Cells(Target.Row, "AJ") <> "" Then MsgBox "DEZ já está preenchido": Exit Sub        LC = .Cells(Target.Row, "AJ").End(xlToLeft).Column          If LC < 25 Then .Cells(Target.Row, 25) = .Cells(Target.Row, 8): Exit Sub            .Cells(Target.Row, LC + 1) = .Cells(Target.Row, 8) - _              Application.Sum(.Range(.Cells(Target.Row, 25), .Cells(Target.Row, LC)))      End With            ElseIf Target.Column = 10 And Target.Value <> "" And Cells(Target.Row, "G") = "Real." Then              With Sheets("MENU")        If .Cells(Target.Row, "AV") <> "" Then MsgBox "DEZ já está preenchido": Exit Sub        LC = .Cells(Target.Row, "AV").End(xlToLeft).Column          If LC < 37 Then .Cells(Target.Row, 37) = .Cells(Target.Row, 10): Exit Sub            .Cells(Target.Row, LC + 1) = .Cells(Target.Row, 10) - _              Application.Sum(.Range(.Cells(Target.Row, 37), .Cells(Target.Row, LC)))      End With            End IfEnd Sub
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.





    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

    ×