Ir ao conteúdo
  • Cadastre-se

Excel Código VBA - Cálculo Consumo


Posts recomendados

Amigo(a), obrigado pela resposta. Quase atende, embora preferisse um código VBA, porém talvez tenha como adaptar. Ocorre que os critérios para obtenção dos dados não foram totalmente atendidos. É necessário que, com base nas datas informadas, as totalizações por código devem considerar somente se  (campo Tipo for= S ou D e  o campo DEP seja diferente de NBA).

Vejas os valores esperados no arquivo .doc encaminhado.

 

Tentei ajustar para atender a esses critérios mas não consegui. Você poderia tentar ajustar e me reencaminhar?

Link para o comentário
Compartilhar em outros sites

Amigo(a). Agora ficou show. Não vou precisar da Tabela Dinâmica neste momento. Vou deixar a planilha que calcula o consumo fixa, variando apenas as datas que serão informadas e, a partir daí, vou executar outros procedimentos, via macro que são bem mais tranquilos. Muitíssimo obrigado, mais uma vez. Essa equipe do Clube do Hardware é 10. Parabéns.

adicionado 58 minutos depois

Amigo(a), desculpe. Esqueci um fator importante: A planilha Mov_ME começa em $A$2 e vai crescendo diariamente e como não tenho como determinar até que tamanho irá, nas fórmulas da planilha Cons_mensal como poderia ajustar de modo que fosse de $A$2 até a última célula preenchida da coluna A, de $B2$ até a última célula da coluna B e assim por diante paras as demais colunas  envolvidas.

 

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

Isso você pode ajustar conforme sua necessidade, sugiro você colocar B2:B1000 ou um numero maior que você considere confortavel, importante lembrar que todos os intervalos devem ser iguais.

 

E de tempo em tempo ajustar o numero de linhas durante o uso.


Não precisa necessariamente usar a ultima linha preenchida.




 

Link para o comentário
Compartilhar em outros sites

Amigo(a), desculpe. Esqueci um fator importante: A planilha Mov_ME começa em $A$2 e vai crescendo diariamente e como não tenho como determinar até que tamanho irá, nas fórmulas da planilha Cons_mensal como poderia ajustar de modo que fosse de $A$2 até a última célula preenchida da coluna A, de $B2$ até a última célula da coluna B e assim por diante paras as demais colunas  envolvidas.

 

Desde já agradeço.

 

Amigo, posso ajustar, porém  como faz parte de um "sistema" queria evitar manutenções em períodos curtos. A movimentação anual da planilha Mov_ME deve ser da ordem de 10.000 linhas. Pergunto: se colocar 30.000 isto pode afetar o desempenho?

Link para o comentário
Compartilhar em outros sites

Amigo, tentei substituir nas fórmulas da planilha Cons_mensal as referências de linhas =95 por outros valores maiores, inclusive 30000 e deu erro, apareceu #VALOR. Exemplo onde estava $A$2:$A$95 mudei para $A$2:$A$1000. O curioso é que quando substituí por 100 funcionou, mas nenhum outro valor maior. Preciso que seja 30000 em todas as referências. Como disse a planilha Mov_ME vai crescendo a cada dia. Você pode ajustar na planilha de exemplo e me enviar? 

 

Antecipadamente agradeço.

adicionado 24 minutos depois

Amigo, desculpe mais uma vez. Descobri a razão porque estava dando erro. Havia uma sujeira em uma célula distante. Por isso funcionou quando ajustei para 100 e para valores maiores dava erro. Já consegui ajustar todas as referências para 30000 e tudo funcionou perfeitamente. Obrigado por tudo e até a próxima.

Link para o comentário
Compartilhar em outros sites

Amigo, desculpe mais uma vez. Descobri a razão porque estava dando erro. Havia uma sujeira em uma célula distante. Por isso funcionou quando ajustei para 100 e para valores maiores dava erro. Já consegui ajustar todas as referências para 30000 e tudo funcionou perfeitamente. Obrigado por tudo e até a próxima.

 

Amigo, ocorreu um imprevisto. Pensei que estava tudo ok, mas há um problema: a planilha _MOV_ME é alimentada, via código VBA copiando determinados intervalos de outras planilhas  e colando somente valores nela. Por segurança copio, por exemplo um intervalo que compreende 100 linhas, porém as 40 últimas não tem informação, mas quando são coladas na MOV_ME parece que fica algum registro, pois imediatamente a planilha Cons_Mensal apresenta erro nas fórmulas (#VALOR). Aí eu vou na planilha MOV_ME seleciono todas as células vazias a partir da última linha preenchida, DELETO e automaticamente tudo fica OK na planilha Cons_Mensal. Se eu excluir  todas as linhas vazias a partir da última preenchida aí o problema é maior, pois as fórmulas da Cons_Mensal são ajustadas para o total de linhas da MOV_ME, o que NÃO pode acontecer.

 

Pergunto: o que posso fazer para resolver este problema?

 

Link para o comentário
Compartilhar em outros sites

Amigo, segue o arquivo Parte_Codigo_Copia_Informacoes.docx, com a  parte referente ao processo de cópia das informações para a planilha MOV_ME. Par facilitar o entendimento, anexo também o arquivo Calcula_Consumo_Resposta_Final.xlsx com algumas planilhas envolvidas. 

 

No aguardo, antecipadamente agradeço.

Calcula_Consumo_Final.xlsx

Parte_Codigo_Copia_Informacoes.docx

Link para o comentário
Compartilhar em outros sites

Cara nao complica o post esta ai pra isso, o trabalho que você teve pra escrever o docx seria o mesmo que escrever no post. 

Vamos usar os recursos do forum. É de graça!

 

É so colar o codigo que você usa para copiar.

Se quiser postar a planilha poste a planilha com o codigo nela mesmo.

 

É so compactar o arquivo *.zip ou *.rar

Link para o comentário
Compartilhar em outros sites

Cara a planilha tem que ter dados para que se possa testar, você mandou uma planilha sem nenhuma informação para testes, sendo assim experimente este codigo.

 

Eu nao testei.

 

Se nao funcionar poste uma planilha com o codigo e dados. É so compactar o arquivo que o forum aceita.

 

Sub teste()

Dim W As Worksheet
Dim ULinha As Long
Dim Sh As Worksheet


Set W = Sheets("Preencher_RIM")
Set Sh = Sheets("Mov_ME")
    
    
    '  Lança informações da RIM na planilha MOV_ME
    
    ULinha = W.Range("A" & Rows.Count).End(xlUp).Row
    W.Range("A2:A" & ULinha).Copy
    ULinha = Sh.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
    Sh.Cells(ULinha, 1).PasteSpecial Paste:=xlPasteValues
    
    ULinha = W.Range("A" & Rows.Count).End(xlUp).Row
    W.Range("C2:C" & ULinha).Copy
    ULinha = Sh.Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Row
    Sh.Cells(ULinha, 2).PasteSpecial Paste:=xlPasteValues
    
    ULinha = W.Range("A" & Rows.Count).End(xlUp).Row
    W.Range("P2:P" & ULinha).Copy
    ULinha = Sh.Range("C" & Rows.Count).End(xlUp).Offset(1, 0).Row
    Sh.Cells(ULinha, 3).PasteSpecial Paste:=xlPasteValues
    Sh.Cells(ULinha, 10).PasteSpecial Paste:=xlPasteValues
    
    ULinha = W.Range("A" & Rows.Count).End(xlUp).Row
    W.Range("H10:M" & ULinha).Copy
    ULinha = Sh.Range("D" & Rows.Count).End(xlUp).Offset(1, 0).Row
    Sh.Cells(ULinha, 4).PasteSpecial Paste:=xlPasteValues
    
End Sub

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...

Amigo, boa tarde. Estive afastado por motivo de férias e só hoje pude voltar a acessar o fórum. Peço desculpas por não ter inserido dados nas planilhas que são utilizadas para inserir dados na planilha MOV_ME. Vou tentar usar o código que você enviou que, com certeza deve ser a melhor solução. Contudo, como o processo de cópia já está funcionando e que quando, após a cópia eu acesso "manualmente" a planilha MOV_ME, vou para a última célula preenchida e depois a partir da próxima eu seleciono um intervalo  da coluna A até a J de umas 200 linhas e apago (deleto), tudo funciona perfeitamente. Assim sendo, como uma solução adicional poderia ter um código que fizesse isso, ou seja: ir para a última célula preenchida da coluna A da planilha MOV_ME e, a partir da próxima selecionasse um intervalo de 200 linhas de A até J e deletasse? Isso seria mais um aprendizado para mim.

 

Por fim, amigo, gostaria de aproveitar para pedir, caso você possa, uma indicação de um Curso de VBA para Excel, preferencialmente presencial (senão, on line) que abordasse de forma prática, passo a passo todos os procedimentos necessários a um aprendizado consistente da linguagem.

 

No Aguardo, antecipadamente agradeço.

Link para o comentário
Compartilhar em outros sites

Como eu disse o codigo acima provavelmente atende sua necessidade.

 

Qto a um codigo para apagar da ultima linha ate a 200 você pode tentar este

 

sub apagar()

 

range("A" &rows.count).end(xlup).offset(1,0).select

Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select

selection.delete

 

end sub

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Amigo, bom dia. Adaptei o código que você me mandou no dia 06/03 e funcionou perfeitamente, Muito obrigado.

 

Neste momento solicito o seguinte:

 

  1. Preciso inserir em uma célula, o número da última linha preenchida da coluna "A" da planilha MOV_ME, pois preciso fazer o acompanhamento da quantidade de linhas. Tentei usar a função LIN, mas não consegui. Como devo fazer? (não achei necessário encaminhar a planilha);
  2. Você tem alguma indicação de curso de Excel Avançado, incluindo programação VBA para Excel?  Pode ser presencial ou on-line. Caso negativo, sugere algum livro tipo passo-a-passo para programação VBA?

No aguardo, antecipadamente agradeço.

 

Link para o comentário
Compartilhar em outros sites

Não amigo, eu gostaria que fosse identificado o número da linha correspondente à ultima célula preenchida da coluna A. Esta planilha é dinâmica e o número de registros vai aumentando a todo instante. Por isso gostaria de visualizar o número da linha em correspondente à última célula da coluna A, que esteja preenchida.

 

Obrigado pela sugestão do youtube.

Link para o comentário
Compartilhar em outros sites

Neste caso 

 

Pode usar este codigo abaixo 

 

Sub apagar()

Dim Linha as long

Linha = range("A" &rows.count).end(xlup).offset(1,0).row    'Identifica a ultima linha com dados

range("A" &rows.count).end(xlup).offset(1,0).select

Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select

selection.delete

Range("A1").value = Linha ' TROQUE A1 PELA CELULA ONDE você DESEJA QUE APAREÇA O NUMERO DA ULTIMA LINHA COM DADOS.

 

end sub

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