Respondi com comentários no próprio código.
Creio que seja um tanto complexo entender dessa forma, até porque são 3 loops. Uma dica que pode ajudar é vc executar o código linha por linha e ver o que acontece, assim: entre no editor, entre na sub e pressione F8 para executar uma linha, passe o mouse sobre a linah executada e vc vai ver os valores sendo atualizados.
Sub actualizar()
'codigo por gtsalikis em 19/11/2013 via planilhando
Dim ws As Worksheet, i, j, MSE As Integer, cliente As String ' define as variáveis : ws é a planilha (comumente chamada de "aba"), i, j, MSE são números inteiros, por isso integer, cliente é texto, por isso string
i = 2 'define que o valor de i é 2, pois vai ser usado para a segunda linha da planilha
Do Until IsEmpty(Sheets("Folha a Actualizar").Cells(i, 1)) = True ' "Do" é o comando para fazer um loop, corre cada linha da coluna 1 da planilha "folha a atualizar" até que encontre uma linha vazia - note que Cells(i, 1) identifica a linha i, que no caso é 2, e a coluna 1, ou seja, A)
cliente = Sheets("Folha a Actualizar").Cells(i, 1).Value ' define o valor da variável cliente com o que encontrar na celula linha i, coluna 1
MSE = Sheets("Folha a Actualizar").Cells(i, 2).Value ' define o valor da variável MSE com o que encontrar na celula linha i, coluna 2
For Each ws In ActiveWorkbook.Worksheets inicia um outro loop, dentro do primeiro, correndo cada planilha, e executa o seguinte:
j = 2 'define que o valor de j será 2 (segunda linha da planilha)
Do Until IsEmpty(Sheets(ws.Name).Cells(j, 2)) = True ' idem o caso acima, mas agora, uso o comando "ws.Name", que pega o nome da planilha na qual está trabalhando, esse nome vai mudar quando recomeçar o loop com outra planilha
If Sheets(ws.Name).Cells(j, 2).Value = cliente Then Sheets(ws.Name).Cells(j, 1).Value = MSE ' se o valor da célula linha j, coluna 2 for igual ao que já tem atribuído no valor cliente, vai colocar na mesma linha (identificada por j), só que na coluna 1, o valor que ele possui em MSE
j = j + 1 'aumenta o valor de j em mais 1, o que vai fazer com que execute o loop na linha de baixo da planilha
Loop ' recomeça a partir de "Do until...", executando os mesmos procedimentos, mas agora o valor de j é maior, então corre a linha de baixo
Next ' quando acabar o loop "do until", recomela o loop "for each...", ou seja, passa para a próxima planilha e faz tudo de novo"
i = i + 1 ' aumenta o valor de i
Loop ' quando terminar de correr todas as planilhas, vai recomeçar o primeiro loop, descendo uma linha da planilha que tem os dados a serem buscados nas demais planilhas.
End Sub
Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.
Gilmar
Postado : 25/11/2013 7:13 am