Página 1 de 1

Colar dados em uma linha variável usando macro

Enviado: 19 Jun 2017 às 12:49
por paulovitor2011
Olá pessoal do fórum, sou novo por aqui e gostaria de uma ajuda.
Não entendo muito (quase nada) de VBA, mas estou usando o recurso de gravar macro e encontrei um problema.
Tenho uma planilha do Excel e na aba EST uma tabela com dados de estoque (código, nome de produto, quantidade, marca, fornecedor, etc).
A macro que gravei filtra a tabela que mencionei acima de acordo com o valor inserido na célula L8 da aba ATP, por exemplo, se em L8 eu tiver digitado o valor 7, ele filtra a tabela da EST, coluna "Código", valor 7. O problema é que na mesma macro eu copio uma linha da aba ATP e quero colar ela na linha filtrada com o valor variável da célula L8 da ATP.
Acontece que o Excel não entende que é pra colar na linha do código definido por L8. Ele cola na referência direta, por exemplo, na linha 7:7 da EST, ou seja, fica sempre colando na mesma linha que gravei a macro. Vou colocar um trecho do código.
Se alguém puder me ajudar ficarei muito grato.
Código: Selecionar todos
Sub filtra_estoque()
'
' filtra_estoque Macro
'
'
    ActiveSheet.Range("$B$3:$R$14").AutoFilter Field:=1, Criteria1:=Sheets("ATP").Range("L8").Value  (aqui ela filtra de acordo com o valor digitado em L8)
    ActiveWorkbook.Save
End Sub
Sub atualiza_prod()
'
' atualiza_prod Macro
'
'
    ActiveWindow.DisplayHeadings = True
    ActiveSheet.Unprotect
    Sheets("EST").Select
    ActiveWindow.DisplayHeadings = True
    ActiveSheet.Unprotect
    ActiveWorkbook.Save
    Application.Run "'Fluxo de Caixa e Controle de Estoque.xlsm'!filtra_estoque"
    ActiveWorkbook.Save
    Sheets("ATP").Select
    ActiveWindow.SmallScroll Down:=39
    Rows("52:52").Select
    Selection.Copy
    Rows("54:54").Select (aqui eu copio a linha 54 da aba ATP)
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("54:54").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("EST").Select
    ActiveWindow.SmallScroll Down:=-12
    Rows("7:7").Select (aqui está o problema. Ele cola na linha 7 da aba EST, sempre na linha 7. Preciso que cole na linha definida pelo código digitado em L8 da aba ATP)
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("B7").Select
    ActiveSheet.Range("$B$3:$R$14").AutoFilter Field:=1
    Range("F4").Select
    Application.CutCopyMode = False
    Selection.AutoFill Destination:=Range("F4:F6")
    Range("F4:F6").Select
    Selection.AutoFill Destination:=Range("F4:F7")
    Range("F4:F7").Select
    Selection.AutoFill Destination:=Range("F4:F3219")
    Range("F4:F3219").Select
    Range("F8").Select
    Sheets("ATP").Select
    ActiveWindow.SmallScroll Down:=-63
    Range("L13").Select
    Selection.ClearContents
    Range("L15:M15").Select
    Selection.ClearContents
    Range("L17:M17").Select
    Selection.ClearContents
    Range("L19:N19").Select
    Selection.ClearContents
    Range("L21").Select
    Selection.ClearContents
    Range("L23").Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=6
    Range("L25").Select
    Selection.ClearContents
    Range("L27").Select
    Selection.ClearContents
    Range("L29:M29").Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=6
    Range("L31:N32").Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-30
    Range("L8").Select
    ActiveWindow.SmallScroll Down:=-9
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFiltering:=True
    ActiveWindow.DisplayHeadings = False
    Sheets("EST").Select
    Range("B4").Select
    ActiveWindow.DisplayHeadings = False
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFiltering:=True
    Sheets("ATP").Select
    ActiveWorkbook.Save
End Sub

Re: Colar dados em uma linha variável usando macro

Enviado: 21 Jun 2017 às 13:55
por alexandrevba
Boa tarde!!

Você poderia postar seu arquivo modelo?

Att

Re: Colar dados em uma linha variável usando macro

Enviado: 09 Jul 2017 às 05:44
por Niel7000
Bom, como o companheiro acima disse, para entender melhor seria preciso um modelo mas se eu entendi correto, o número da linha que os dados devem ser colados estão em L8.
Se for isso vc poderia fazer algo do tipo:

Dim linha As Integer
linha = Range("L8").Value
Range(Cells(linha, 1), Cells(linha, 200)).Select

Esse trecho seleciona o lugar onde devem ser colados os dados. Perceba que eu defini a linha como sendo o valor de uma célula, assim o valor que estiver na célula em questão será o número da linha selecionado. No último trecho, os números 1 e 200 se referem às colunas e vc tbm pode modificar de acordo com suas necessidades.
Dessa forma vc poderá tornar dinâmico o lugar onde os dados devem ser colados. Mas atenção, este trecho deve ser colado no ponto do código onde é feita a seleção das células em que vão ser colados os dados.

Espero ter contribuído.