Olá, Marcelo, tudo bem?
Em meu entendimento, o primeiro código só é mais apropriado se for usado um número limitado de vezes, usando rapidamente o gravador de macros, por exemplo, para uma situação específica.
Se for um procedimento mais rotineiro ou se o código tiver tendência a crescer ou tiver que ser editado, ele estará muito mais sujeito a situações imprevistas e também é mais difícil de ler, documentar e fazer manutenção, além de geralmente ser mais lento, devido ao maior número de chamadas desnecessárias (selects, activates, etc.).
Mesmo sem considerar performance, analisando situações como no loop Do While ActiveCell <> "", o uso de ActiveCell onde dentro do loop tem vários Selects que mudam a célula ativa podem resultar em complicações (loop infinito, por exemplo) pois a cada select/activate a célula ativa muda de endereço, o que não seria recomendado em um código mais complexo.
Quanto ao segundo código, o Reinaldo "enxugou" bastante o código, como vc desejava. Veja que ele eliminou as variáveis intermediárias (e desnecessárias) ORG, CID, NOM, CARG, FUN, VIN, SIT, LOT, VEN.
Mas se ainda assim vc quiser enxugar mais um pouco, poderá atribuir todo o intervalo com uma só expressão, o que fica facilitado principalmente pq em seu caso o intervalo é de colunas adjacentes o que facilita a escrita. Nesse caso, aproveitando o código do Reinaldo, onde tem
WG.Cells(WGLin, 2).Value = WR.Cells(Lin, 2).Value 'ORG
WG.Cells(WGLin, 3).Value = WR.Cells(Lin, 3).Value 'CID
WG.Cells(WGLin, 4).Value = WR.Cells(Lin, 4).Value 'NOM
WG.Cells(WGLin, 5).Value = WR.Cells(Lin, 5).Value 'CARG
WG.Cells(WGLin, 6).Value = WR.Cells(Lin, 6).Value 'FUN
WG.Cells(WGLin, 7).Value = WR.Cells(Lin, 7).Value 'VIN
WG.Cells(WGLin, 8).Value = WR.Cells(Lin, 8).Value 'SIT
WG.Cells(WGLin, 9).Value = WR.Cells(Lin, 9).Value 'LOT
WG.Cells(WGLin, 10).Value = WR.Cells(Lin, 10).Value 'VEN
Pode-se substituir por:
WG.Range(Cells(WGLin,2),Cells(WGLin,10)).Value = WR.Range(Cells(Lin,2),Cells(Lin,10)).Value
Ou seja, isso atribui, de uma só vez todo o conteúdo do intervalo referente às colunas B a J da planilha WG, linha WGLin ao intervalo correspondente na planilha WR, linha "Lin", colunas também B a J. Logicamente nesse caso vc percorreu linha por linha, mas, como vc deve ter imaginado, pode-se pegar um intervalo inteiro de várias linhas e colunas de uma só vez e atribuir a outro intervalo, desde que tenham mesmo tamanho.
Entretanto, como o Reinaldo fez tem a vantagem de ficar mais documentado dentro do código, pois cada linha diz a qual variável se refere, dando maior clareza.
De qualquer forma, eu sempre escolheria o segundo código, pois além de ser mais profissional, tem-se a certeza que foi feito por alguém com algum conhecimento no assunto, não pelo gravador, portanto passa mais confiança.
Obs.: como vc não anexou seu modelo, também não testei e poderá haver erros nas linhas acima.
Postado : 26/01/2016 8:57 pm