Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
#138
Boa tarde

Estou trabalhando na planilha em anexo onde tenho diversas informações. Criei o código abaixo para extrair as informações da Plan2 (que é a planilha base) para a Plan1 (onde será gerado o relatório). Porém ao executar o código apenas consigo copiar os dados se na coluna F estiverem na mesma ordem (algo que ao fazer o relatório semanalmente não acontecerá), caso a ordem da Plan1 não seja a mesma que a Plan2 o código para.

Gostaria da ajuda dos colegas para que mesmo que a ordem da coluna F das duas folhas não seja a mesma a Plan1 seja preenchida.

Abaixo o código que estou usando:

Sub teste()

ultimacelula = Plan2.Cells(Rows.Count, 6).End(xlUp).Row
lin = 2

For i = 2 To ultimacelula
If Plan2.Cells(i, 6) = Plan1.Cells(lin, 6) Then
Plan1.Cells(lin, 2) = Plan2.Cells(i, 2)
Plan1.Cells(lin, 3) = Plan2.Cells(i, 3)
Plan1.Cells(lin, 7) = Plan2.Cells(i, 7)
Plan1.Cells(lin, 8) = Plan2.Cells(i, 8)
Plan1.Cells(lin, 9) = Plan2.Cells(i, 9)
lin = lin + 1
Else
MsgBox "Cota não encontrada " & Plan1.Cells(lin, 6).Value
lin = lin + 1
End If
Next

End Sub

A linha amarela na Plan1 não possui a cota na Plan2. A linha em azul na Plan1 a cota existe mas o código não busca as informações.
Você não está autorizado a ver ou baixar esse anexo.
#139
Boa tarde!!

Eu não sei se entendi...
Veja se é isso
Código: Selecionar todos
Sub teste()

ultimacelula = Plan2.Cells(Rows.Count, 6).End(xlUp).Row
lin = 2

For i = 2 To ultimacelula
    If Plan2.Cells(i, 6) = Plan1.Cells(i, 6) Then 'linha alterada
        Plan1.Cells(lin, 2) = Plan2.Cells(i, 2)
        Plan1.Cells(lin, 3) = Plan2.Cells(i, 3)
        Plan1.Cells(lin, 7) = Plan2.Cells(i, 7)
        Plan1.Cells(lin, 8) = Plan2.Cells(i, 8)
        Plan1.Cells(lin, 9) = Plan2.Cells(i, 9)
        lin = lin + 1
    Else
        'MsgBox "Cota não encontrada " & Plan1.Cells(lin, 6).Value
        lin = lin + 1
    End If
Next

End Sub
Att
#140
Boa tarde,

Obrigado pelo retorno, mas infelizmente não deu certo. Se executar o código irá parar na linha 56, pois o código não encontra a cota 1134. O que preciso nesse caso é quando não encontrar a cota na planilha base o código continue a procura para as demais cotas da coluna, porém ele esta parando na cota não encontrada e não executa mais.

Att
#147
Bom dia,

Infelizmente não deu certo, quando o código roda e chega na cota 1134 a mensagem de cota não atendida aparece, ao clicar em OK para o código continuar ele informa que a cota 8522 também não foi encontrada, porém se olhar na Plan2 existe essa cota com as informações, mas o código não trás as informações para a Plan1 como deveria.
#148
Você pode anexar a sua planilha? Assim fica mais fácil ajudar.
#151
Não tinha visto que já tinha anexado a planilha no início do tópico. Tem que ser por macro o que você quer? Se entendi bem, não é só fazer uma busca do que está na plan2 e jogar na plan1? Dá pra fazer utilizando ÍNDICE e CORRESP por exemplo.
#154
Na verdade precisa ter macro. Esse é um relatório em arquivo txt que faço a formatação toda através de macro. Possuo outras macros antes dessa onde faço a formação do arquivo txt para o Excel. Para continuar a formatação do relatório preciso buscar algumas informações em uma planilha padrão. Esse é um relatório txt semanal gerado em um programa da empresa onde trabalho que preciso acrescentar outras informações e quero automatizar esse relatório devido o trabalho que é fazer tudo manualmente toda semana, perco muito tempo realizando a tarefa.
#159
Boa tarde!!

Tem como dar mais detalhes?
seu objetivo é verificar quais dados da coluna F da guia Plan1 e se são iguais
a coluna F da guia Plan2, caso sim, popular as colunas B:C e G:I da guia Plan1 ?

Seria isso?

Att
#160
Isso mesmo. Só que com o código abaixo que postei apenas consigo fazer até a cota (coluna F) da Plan1 1134, quando o código passa para a cota 8522 ele compara e informa que não existe essa cota na Plan2, porém ela existe.
Código: Selecionar todos
Sub teste()

ultimacelula = Plan2.Cells(Rows.Count, 6).End(xlUp).Row
lin = 2

For i = 2 To ultimacelula
    If Plan2.Cells(i, 6) = Plan1.Cells(lin, 6) Then
        Plan1.Cells(lin, 2) = Plan2.Cells(i, 2)
        Plan1.Cells(lin, 3) = Plan2.Cells(i, 3)
        Plan1.Cells(lin, 7) = Plan2.Cells(i, 7)
        Plan1.Cells(lin, 8) = Plan2.Cells(i, 8)
        Plan1.Cells(lin, 9) = Plan2.Cells(i, 9)
        lin = lin + 1
    Else
        MsgBox "Cota não encontrada " & Plan1.Cells(lin, 6).Value
        lin = lin + 1
    End If
Next

End Sub
#161
Boa tarde!!

Isso porque essa linha só vai contar o que ver na guia "Plan2", que neste caso é 690 linhas!!!
Código: Selecionar todos
Sub TestandoLinhas()
   ultimacelula = Plan2.Cells(Rows.Count, 6).End(xlUp).Row
   MsgBox "tem " & ultimacelula & " linhas na guia Plan2"
End Sub
O seu loop vai gira em torno das 690 linhas
Código: Selecionar todos
For i = 2 To ultimacelula
Att
#166
Boa tarde!!

Eu disse, que seu loop vai percorrer uma quantidade de linhas baseado na quantidade de dados na coluna F da guia Plan1.

Ex:
Se na coluna F da guia Plan1, tem 10 linhas, o loop vai percorrer (para comparar), 10 vezes!

Se na comparação uma guia tem mais linha que a outra, ou você define um número fixo (grande), ou usa a guia que terá mais linhas que a outra.

Att
#172
Bom dia!!

Orfeu, eu sinto em lhe informa que eu creio não poder lhe ajudar :(

Eu consigo verificar via VBA quais dados da coluna F tem em uma guia que não tem na outra, eu consigo compara e inserir os dados que você deseja que seja feito, o problema está na falta de padrão para que isso ocorra.

Você tem dados (colunas vazias B:C, G:I), na guia Plan1, e referente a coluna F, onde há dados duplicados, me faz entender que esses dados devem receber da guia Plan2, caso os dados da coluna F, sejam iguais, mas o problema é que seus dados da guia Plan1, estão com "lacunas" onde é composto por dados preenchidos (em uma parte) e vazios (em outra), isso nas colunas (B:C, G:I) .

Acontece que devido a esse fato, eu não consigo perceber um padrão logico, se eu classificar esses dados (para os preenchidos ficarem juntos de todos preenchidos), me leva crer que os dados repetidos ou não faz sentido te-los na guia, ou não podem ser classificados (mudar suas posições).
:? :?


Att
#174
Bom dia!!

Talvez se você conseguisse explicar de uma forma bem manual (imagina que você está fazendo passo-a-passo, tudo na mão), ou gravasse uma macro, somente então talvez eu poderia lhe ajuda.

Já tentou Gravar uma Macro

Att
#175
O que estou tentando fazer é como se fosse um PROCV da Plan1 com as informações da Plan2, ou seja, procurar o valor da coluna F em Plan1 na Plan2 e trazer as informações.

Porque não faço um PROCV? Devido o arquivo ser um relatório txt, ele não vem no formato da Plan1, possuo outras macros que já fazem essa formatação. O que preciso agora é buscar as informações das colunas B:C e G:I da Plan1 na Plan2, pois as demais colunas já vem preenchidas quando o relatório txt é gerado.

Pensei em fazer através do método Find mas infelizmente não consegui estruturar o código a busca não retorna nada ou aparece alguma mensagem de erro.

Att.
#181
Agora eu acho que eu entendi. Veja se funciona.
Código: Selecionar todos
Sub PreencheDados()

ultimacelula = Plan1.Cells(Rows.Count, 6).End(xlUp).Row
Set Rng = Plan2.Range("F:F") ' Coluna de Cotas

lin = 2

For i = 2 To ultimacelula
    
    On Error Resume Next
    indice = Application.WorksheetFunction.Match(Plan1.Cells(i, 6), Rng, 0)
    
    If Err > 0 Then
        'valor não encontrado
        Err.Clear
    Else
        'tranfere os dados
        Plan1.Cells(i, 2) = Plan2.Cells(indice, 2)
        Plan1.Cells(i, 3) = Plan2.Cells(indice, 3)
        Plan1.Cells(i, 7) = Plan2.Cells(indice, 7)
        Plan1.Cells(i, 8) = Plan2.Cells(indice, 8)
        Plan1.Cells(i, 9) = Plan2.Cells(indice, 9)
    End If
    
Next

End Sub
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord