Tópicos relacionados a códigos VBA, gravação de macros, etc.
#60399
Fala Galera, alguém pode ajudar?

Tenho uma pasta de trabalho com duas planilhas

Na plan1 eu uso 7 colunas (A:G)

Sendo que a coluna B é formato de data (m/d/aaaa h:mm:ss AM/PM) e será usada como fonte do critério a ser validado

Eu preciso copiar, através de um comando de macro, o Intervalo (AX:GY) e inserir em plan2.

X = primeira linha com conteúdo contendo dados do minuto passado { Now - TimeVallue(“00:01:00”) }

Y = última linha com conteúdo do minuto passado

Após este comando de selecionar o intervalo com os dados do minuto passado (que estou pedindo a vocês) eu queria usar este código abaixo para inserir antes dos outros dados em plan2:

Sheets(“Plan2”).Select
Range(“A1”).Select
Selection.Insert Shift:=xlDown
ActiveSheet.Paste
Application.CutCopyMode = False

Obrigado
#60435
Bom dia,

Eu estava relendo minha postagem e percebi que uma orientação que dei não está correta.

A instrução { Now - TimeVallue(“00:01:00”) } não representa o que eu quero buscar.

Exemplo: Se agora= 07:48:26, então o intervalo que será calculado será o que estiver entre 07:47:26 até NOW

Não é isso que eu quero. O resultado que eu quero é o que está entre 07:47:00 e 07:47:59

Busco o resultado do minuto anterior “completo” (do 00 seg até os 59 segundos)
#60437
Sugestão: disponibilize diretamente aqui no fórum uma amostra do seu arquivo Excel com alguns dados (máximo de 10 linhas) e coloque na própria planilha dois ou três exemplos do resultado desejado.
rafadeggau agradeceu por isso
#60492
Poderia ser um módulo contendo uma macro que seria chamada manualmente por um botão.

O intervalo analisado seria A:G da Plan1 até a última linha com dados (se ficar mais fácil, pode limitar até a linha 5000, neste caso A1:G5000) lembrando que a primeira linha é um cabeçalho, então A2:G5000

A coluna com o tempo a ser procurado sempre será a B em Plan1

Os dados são dispostos em ordem decrescente de tempo e sempre ordenados, isto é, o mais recente na primeira linha e o mais antigo na última linha. Por isso os extremos do intervalo alvo sempre serão 00 segundos (em baixo) e 59 segundos (em cima)

Após selecionar este intervalo (do minuto anterior ao clique no botão que aciona a macro) preciso que seja inserida uma cópia desta seleção na célula A1 da Plan2 deslocando os dados existentes para baixo.
#60513
O código abaixo serve somente para testes na planilha que você disponibilizou. Ele adota o horário que está em J7 para a formação do critério. Antes de fazer os testes adicione PM ao horário daquela célula para ficar compatível com os horários da coluna B que são todos PM. Deverá ficar assim 03:19:37 PM.
Sem qualquer outra alteração na planilha você poderá testar também após alterar J7 para 03:18:xx PM e 03:20:xx PM (xx ~~~> qualquer valor entre 0 e 59).
Se o resultado for o desejado então teste e utilize o segundo código abaixo.
Código: Selecionar todos
'este código considera hora e minuto de J7
'(acrescentar PM naquela célula antes de testar)
Sub ReplicaDados_HoraJ7()
 Dim DHi As Double, DHf As Double
  Application.ScreenUpdating = False
  ActiveSheet.AutoFilterMode = False
  DHi = DateSerial(Year([B2]), Month([B2]), Day([B2])) + _
   TimeSerial(Hour([J7]), Minute([J7]) - 2, 59)
  DHf = DateSerial(Year([B2]), Month([B2]), Day([B2])) + _
   TimeSerial(Hour([J7]), Minute([J7]) - 1, 59)
  If Evaluate("SUMPRODUCT((B2:B" & Cells(Rows.Count, 2).End(3).Row & ">" & Replace(DHi, ",", ".") & _
    ")*(B2:B" & Cells(Rows.Count, 2).End(3).Row & "<=" & Replace(DHf, ",", ".") & "))") = 0 Then Exit Sub
  Range("A1:G1").AutoFilter Field:=2, Criteria1:=">" & Replace(DHi, ",", "."), Operator:=xlAnd, _
    Criteria2:="<=" & Replace(DHf, ",", ".")
  Range("A2:G" & Cells(Rows.Count, 1).End(3).Row).Copy
  Sheets("Plan2").Range("A2").Rows("1:1").Insert Shift:=xlDown
  ActiveSheet.AutoFilterMode = False
End Sub
@@@
@@@

O código abaixo adota o horário do SO da máquina, conforme o seu pedido, então obviamente os horários da coluna B da planilha devem ser compatíveis com a hora atual.
O resultado é igual ao resultado do código acima.
Código: Selecionar todos
'este código considera hora e minuto da máquina (SO)
Sub ReplicaDados_HoraSistema()
 Dim DHi As Double, DHf As Double
  Application.ScreenUpdating = False
  ActiveSheet.AutoFilterMode = False
  DHi = DateSerial(Year([B2]), Month([B2]), Day([B2])) + _
   TimeSerial(Hour(Now), Minute(Now) - 2, 59)
  DHf = DateSerial(Year([B2]), Month([B2]), Day([B2])) + _
   TimeSerial(Hour(Now), Minute(Now) - 1, 59)
  If Evaluate("SUMPRODUCT((B2:B" & Cells(Rows.Count, 2).End(3).Row & ">" & Replace(DHi, ",", ".") & _
    ")*(B2:B" & Cells(Rows.Count, 2).End(3).Row & "<=" & Replace(DHf, ",", ".") & "))") = 0 Then Exit Sub
  Range("A1:G1").AutoFilter Field:=2, Criteria1:=">" & Replace(DHi, ",", "."), Operator:=xlAnd, _
    Criteria2:="<=" & Replace(DHf, ",", ".")
  Range("A2:G" & Cells(Rows.Count, 1).End(3).Row).Copy
  Sheets("Plan2").Range("A2").Rows("1:1").Insert Shift:=xlDown
  ActiveSheet.AutoFilterMode = False
End Sub
Kledison agradeceu por isso
#60527
Amigo osvaldomp, estou sem palavras para poder te agradecer.

Além de fornecer o código que funciona com a hora real ainda fez um de teste.

Que Deus te proteja e ilumine sempre teu caminho.

Confesso que espalhei esta solicitação em outros fóruns, quero saber se você autoriza a divulgação desta solução nestes locais com a informação da fonte? Assim eu encerro o tópico por lá.

Penso que ajudará outras pessoas e pode atrair mais inscritos para o site.

Um grande abraço.
Kledison, osvaldomp agradeceu por isso
#60529
Olá, Rafa.
Grato pelas suas palavras. Ficamos contentes em saber que a sua demanda foi resolvida.

Fique à vontade para publicar os códigos onde desejar pois isso poderá ajudar outras pessoas no futuro já que as postagens ficam disponíveis para as pesquisas na WEB.

God bless you too.
rafadeggau agradeceu por isso

Coloque o número 1 em A1 e em A2 cole uma c[…]

Boa noite. Sou novo no VBA, veja se resolve o seu […]

Top, asism ficou bem melhor, Muito Obrigado

Erro em tempo de Execução...

Bom dia amigos, neste código abaixo esta da[…]

Boa tarde. Segue uma opção. At&ea[…]

Leitura de planilha fechada

Consegui explicar :) :shock: :?: :?: N&at[…]

Bom-dia! Numa pasta do servidor [ D:\Server\BemVi[…]

Enviando email outlook

Boa tarde! Estou usando o codigo abaixo e esta fun[…]