Senhores, boa noite!!!
Gostaria de uma ajudinha (já que atualmente faço isto na mão
)!!!
1) A Macro deve procurar a Matrícula do servidor, que está na célula A2, na Aba cujo nome está em C2
2) Ao encontrar a matrícula na referida Aba, deve relacionar todos seus dados em A4:I30 da Aba CÁLCULO-GERAL (estou dando uma boa margem de dados)
PS: tive que deixar o arquivo com apenas 2 Abas para caber aqui ... mas ele tem umas 24 Abas!!!
PS2: Basicamente seria a fórmula ÍNDICE/CORRESP mas, com ela, acho que o arquivo ficaria muito pesado!!!
Amigo,
Vi agora que a planilha não foi hahaha Não estou conseguindo anexar o arquivo, então segue um link para baixar.
https://www.transfernow.net/dl/20211028bvq5a4Br
Segue a planilha, veja se agora está ok.
Abs.
@jordsdoexcel , melhorou, mas ...
Troquei esta linha ...
'Selecionando uma região p/ depois exlcuir
Sheets("Calculo-Geral").Cells(5, 1).CurrentRegion.Offset(1, 0).Delete
Por esta ...
Sheets("Calculo-Geral").Range("A5:I30").Clear ..... Já que em torno dessa área eu faço cálculos!!
E, quanto a isto, ficou OK.
-----------
Mas cada vez que executo a Macro ela procura a primeira linha vazia e vai colando um abaixo!!!
Gostaria que ela limpasse A5:I30 ... e colasse os novos dados a partir de A5 (e não procurar linha vazia -- esta parte não seu arrumar)!!!
@jscopa10 Mas ela está limpando e depois puxando as informações. Essa linha: Sheets("Calculo-Geral").Cells(5, 1).CurrentRegion.Offset(1, 0).Delete (ou a que você preferiu utilizar), exclui as informações que estão nesse Range, depois procura as informações na aba desejada e puxa pra Calculo Geral.
Segue abaixo o codigo completo:
Option Explicit
Sub procurar_matricula()
'Aceleradores do código
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim aba As String
Dim ultLinha As Long, linhaX As Long, linhaY As Long
'Selecionando uma região p/ depois exlcuir
Sheets("Calculo-Geral").Cells(5, 1).CurrentRegion.Offset(1, 0).Delete
linhaX = Sheets("Calculo-Geral").Cells(Rows.Count, 1).End(xlUp).Row + 1
linhaY = 2
aba = Sheets("Calculo-Geral").Cells(2, 3).Value
ultLinha = Sheets(aba).Cells(Rows.Count, 1).End(xlUp).Row
'Após a exlcusão do Range(A1:I30).Procurando na aba a linha desejada e jogando pra aba desejada
Do Until Sheets(aba).Cells(linhaY, 1).Value = vbNullString
If Sheets("Calculo-Geral").Cells(2, 1).Value = Sheets(aba).Cells(linhaY, 1).Value Then
Sheets(aba).Cells(linhaY, 1).Resize(1, 9).Copy
Sheets("Calculo-Geral").Cells(linhaX, 1).PasteSpecial
linhaX = linhaX + 1
End If
linhaY = linhaY + 1
Loop
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Talvez eu não esteja entendendo exatamente o que você quer, mas se eu tiver entendido corretamente, o código está fazendo exatamente o que você deseja.
@jordsdoexcel , troquei o código lá por esse acima, e continua jogando tudo um abaixo do outro ... é que tenho outros dados abaixo dessa linha 30 e também do lado da coluna I !!!
Mas (como utilizo o entorno de A5:I30) para cálculos, tem como essa procura da última vazia ocorrer somente nesse intervalo de A5:I30???
AAAAAAAAAHHH, eu achei que tivesse ficando doido já hahahaha.
Agora eu entendi perfeitamente.
Certo, o código agora vai procurar em todas as linhas da aba desejada, colocar as linhas corretas na primeira aba, a partir da A5, e vai repetir isso até a linha 30. é Isso que você deseja?
Segue o código:
Option Explicit
Sub procurar_matricula()
'Aceleradores do código
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim aba As String
Dim linhaY As Long
Dim linhaX As Integer
'Selecionando uma região p/ depois exlcuir
Sheets("Calculo-Geral").Cells(5, 1).CurrentRegion.Offset(1, 0).Delete
linhaX = 5
linhaY = 2
aba = Sheets("Calculo-Geral").Cells(2, 3).Value
'Procurando na aba a linha desejada e jogando pra aba desejada
Do Until Sheets(aba).Cells(linhaY, 1).Value = vbNullString
If Sheets("Calculo-Geral").Cells(2, 1).Value = Sheets(aba).Cells(linhaY, 1).Value Then
'Quando a linha for a 31, encerra os calculo.
If linhaX > 30 Then GoTo Pular
Sheets(aba).Cells(linhaY, 1).Resize(1, 9).Copy
Sheets("Calculo-Geral").Cells(linhaX, 1).PasteSpecial
linhaX = linhaX + 1
End If
linhaY = linhaY + 1
Loop
Pular:
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
@jordsdoexcel , Agora siiiimmmmmmm!!! kk ... Fechou!!! ... Valeu!!!
Só troquei a linha do "Delete" por esta "Clear" ... Sheets("Calculo-Geral").Range("A5:I30").Clear