Notifications
Clear all

Exportar dados de uma planilha para outra

3 Posts
3 Usuários
0 Reactions
721 Visualizações
(@jrerzinger)
Posts: 1
New Member
Topic starter
 

Meu caros! Tenho um desafio a ser cumprido. Eu já tinha essa macro feita, porém era bem extensa e cheias de copy paste porém a perdi em um backup mal feito. Gostaria da ajuda dos senhores para tentar resolver o meu problema.
Em um documento tenho 3 planilhas, Menu, Agenda_Semanal e Dados
Eu preciso preencher a planilha a partir das informações da planilha dados na planilha agenda semanal por empreiteiro. A listagem de empreiteiros está a partir da celúla B3 da planilha Menu. Estas mesmas empreiteiras se encontra em ordem aleatória na coluna K da planilha dados. Além disso, eu preciso somente das atividades que não estão em negrito na planilha Dados para que sejam inseridas nas coluna B a partir da linha 10 da agenda semanal.

Espero que tenha sido claro e conto com a ajuda dos senhores. Eu tenho pronto até aqui, está errado uma parte.

Ah... a parte de salvar a planilha está correto já.

Sub Gerar_Relatorios()
'Coleta nomes de sites
Sheets("Menu").Select
colunaComDados = 2 'B
If Range("P13") = "" Then
MsgBox "FAVOR INSERIR A DATA DE INÍCIO DOS RELATÓRIOS"
GoTo 2
End If
If Range("r13") = "" Then
MsgBox "FAVOR INSERIR A DATA DE FIM DOS RELATÓRIOS"
GoTo 2
End If

StrIni = Range("T13").Value
StrFim = Range("V13").Value
StrDatarelatorio = Range("S15").Value
linhaINI = 13
linha = linhaINI
Do Until Cells(linha, colunaComDados) = ""
linha = linha + 1
Loop

ReDim sites(linha - linhaINI, 1 To 2) 'Alterado 20071214

For itemSel = 1 To UBound(sites)
sites(itemSel, 1) = Cells(itemSel + linhaINI - 1, colunaComDados) 'linhas da coluna B 'Alterado 20071214
sites(itemSel, 2) = CStr(Cells(itemSel + linhaINI - 1, 4)) 'linhas da coluna D - fase de expansao 'Alterado 20071214
Next itemSel

numSitesSelec = UBound(sites)

str_Path_Relat = Range("I9")

If (str_Path_Relat = "") Then
MsgBox "Arquivos faltando. Favor preencher todos os campos"
Exit Sub
End If

str_WinMacro = ActiveWorkbook.Name

'Linha de Status Bar:-----------------------
str_StatusINI = Application.StatusBar
Application.ScreenUpdating = False

For itemSel = 1 To numSitesSelec
'Abre o modelo e gera relatórios dados

'Preencher os dados

empID = sites(itemSel, 1) 'Determina qual é a empresa que irá ser analisado o relatório

'Inserindo dados do Cabeçalho do Relatório
Sheets("AGENDA_SEMANAL").Select
Range("b3") = empID
Range("F4") = StrIni
Range("F5") = StrFim
Range("L5") = StrDatarelatorio
'Seleciona a planilha que serão localizados os dados

Sheets("DADOS").Select
Final = Cells(65536, 1).End(xlUp).Row
For i = 6 To Final

If Cells(i, 1).Font.Bold = True Then
GoTo 1
End If

If Cells(i, 11) <> empID Then
GoTo 1
End If

SrtTarefa = Cells(i, 2).Value
SrtPavimento = Cells(i, 3).Value
SrtInicio = Cells(i, 3).Value
SrtFinal = Cells(i, 3).Value

Sheets("AGENDA_SEMANAL").Select
linhafinal = Cells(157, 2).End(xlUp).Row + 1

Range("b" & j) = StrTarefa
Range("F" & j) = StrPavimento
Range("N" & j) = SrtInicio
Range("O" & j) = SrtFinal
'Next j

1
Next i

'str_Arq_modelo = ActiveWorkbook.Name
Sheets("AGENDA_SEMANAL").Select
Sheets("AGENDA_SEMANAL").Copy

ActiveWorkbook.SaveAs str_Path_Relat & " " & empID & ".xls"

relatWinTitle = ActiveWorkbook.Name

Next itemSel

'Linha de Status Bar:----------------------------------
Application.StatusBar = str_StatusINI
Application.ScreenUpdating = True

'Fecha o arquivo de dados
' Workbooks(str_Arq_Dados).Close SaveChanges:=False

2
End Sub

 
Postado : 28/11/2013 6:32 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

jrerzinger,

Entendo que não é o ideal mas como sou garoto novo em macros, deixo uma alternativa via fórmulas para a distribuição dos dados nas colunas B e F (não negritos listados).

Algum fera em VBA provavelmente vai "fechar o caixão" com relação ao resto.

Se não avançar avise.

Abs,

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 28/11/2013 7:19 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Dei uma mexida a partir de onde deu erro e deixei uns comentários. Veja se ajuda

Dim str_Arq_modelo, str_Arq_Dados As String
Dim sites() As String 'Lista de sites que terao relatório feito

Sub Gerar_Relatorios()
'Coleta nomes de sites
    Sheets("Menu").Select
    colunaComDados = 2 'B
    If Range("P13") = "" Then
    MsgBox "FAVOR INSERIR A DATA DE INÍCIO DOS RELATÓRIOS"
    GoTo 2
    End If
    If Range("r13") = "" Then
    MsgBox "FAVOR INSERIR A DATA DE FIM DOS RELATÓRIOS"
    GoTo 2
    End If
    
    StrIni = Range("T13").Value
    StrFim = Range("V13").Value
    StrDatarelatorio = Range("S15").Value
    linhaINI = 13
    linha = linhaINI
    Do Until Cells(linha, colunaComDados) = ""
        linha = linha + 1
    Loop
    
    ReDim sites(linha - linhaINI, 1 To 2) 'Alterado 20071214
    
    For itemSel = 1 To UBound(sites)
        sites(itemSel, 1) = Cells(itemSel + linhaINI - 1, colunaComDados) 'linhas da coluna B 'Alterado 20071214
        sites(itemSel, 2) = CStr(Cells(itemSel + linhaINI - 1, 4)) 'linhas da coluna D - fase de expansao 'Alterado 20071214
    Next itemSel
    
    numSitesSelec = UBound(sites)

    str_Path_Relat = Range("I9")
    
    If (str_Path_Relat = "") Then
        MsgBox "Arquivos faltando. Favor preencher todos os campos"
        Exit Sub
    End If
    
    str_WinMacro = ActiveWorkbook.Name

    'Linha de Status Bar:-----------------------
    str_StatusINI = Application.StatusBar
    Application.ScreenUpdating = False
        
    For itemSel = 1 To numSitesSelec
     'Abre o modelo e gera relatórios dados
     
        'Preencher os dados
     
        empID = sites(itemSel, 1) 'Determina qual é a empresa que irá ser analisado o relatório
              

        'Inserindo dados do Cabeçalho do Relatório
        Sheets("AGENDA_SEMANAL").Select
        Range("b3") = empID
        Range("F4") = StrIni
        Range("F5") = StrFim
        Range("L5") = StrDatarelatorio
        'Seleciona a planilha que serão localizados os dados
        
        Sheets("DADOS").Select
        Final = Cells(65536, 1).End(xlUp).Row
        
        j = 10 'faltou definir o valor de j, por isso estava dando erro
        
            For i = 6 To Final
                
        Sheets("DADOS").Select 'vc estava selecionando a planilha DADOS antes de começar o loop, depois ele selecionava outra planilha e não voltava
                If Cells(i, 1).Font.Bold = True Then
                    GoTo 1
                End If
                           
                If Cells(i, 11) <> empID Then
                    GoTo 1
                End If
                
                    SrtTarefa = Cells(i, 2).Value
                    SrtPavimento = Cells(i, 3).Value
                    SrtInicio = Cells(i, 7).Value 'estava com a coluna 3, eu alterei
                    SrtFinal = Cells(i, 9).Value 'estava com a coluna 3, eu alterei
                
                Sheets("AGENDA_SEMANAL").Select
                linhafinal = Cells(157, 2).End(xlUp).Row + 1
                
                
                
                    Range("b" & j).Value = SrtTarefa 'aqui estava com erro de grafia Str...
                    Range("F" & j).Value = SrtPavimento 'aqui estava com erro de grafia Str...
                    Range("N" & j).Value = SrtInicio
                    Range("O" & j).Value = SrtFinal
                'Next j
                
                j = j + 2 'coloquei esse contador para atualizar ir para uma linha vazia na planilha
1
            Next i
            
        
        'str_Arq_modelo = ActiveWorkbook.Name
            Sheets("AGENDA_SEMANAL").Select
            Sheets("AGENDA_SEMANAL").Copy
            
        
        ActiveWorkbook.SaveAs str_Path_Relat & " " & empID & ".xls"
        
        relatWinTitle = ActiveWorkbook.Name

    Next itemSel
    
    
'Linha de Status Bar:----------------------------------
    Application.StatusBar = str_StatusINI
    Application.ScreenUpdating = True
    
    'Fecha o arquivo de dados
'    Workbooks(str_Arq_Dados).Close SaveChanges:=False

2
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 : 28/11/2013 9:20 pm