Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por Creuza
#27887
Prezados
Help!

Tenho uma planilha que em uma folha de dados tenho os dados do funcionário, (Nome, matricula, equipe e dia da folga semanal) em outra folha de dados tenho o número da matricula e as formulas que calculam os dias de trabalho e folga.

Preciso gerar um relatório da escala por loja, ( são 2 ) e separado por grupos de setor.

Já tentei por uma consulta, mas a consulta não separa por grupo, e se separa não atualiza caso haja uma exclusão ou alteração

Por VBA sou novata e Não consegui construir um código que atendesse a minha necessidade. pois não consigo pegar o nome, setor, equipe e folga de uma tabela e a escala de outra , e nem pegar informações de colunas não adjacentes, que é o caso.
Pesquisando aqui no forum e no you tube consegui adapatar o seguinte código para pegar as informações
Código: Selecionar todos
CÓDIGO: SELECIONAR TODOS
Sub Escala_Trindade()
        Sheets("EscalaTrindade").Range("a4:at3000").ClearContents

        Ultimalinha = Planilha2.Cells(Rows.Count, "a").End(xlUp).Row
        ultimacoluna = Planilha2.Cells(1, Columns.Count).End(xlToLeft).Column
        linha = 4
    
        For X = 2 To Ultimalinha
                If Planilha2.Cells(X, 3) = "Trindade" And Planilha2.Cells(X, 4) = "Caixa" Then
                For i = 1 To ultimacoluna
                    Planilha5.Cells(linha, i) = Planilha2.Cells(X, i)
                Next
                linha = linha + 1
             End If
         Next
End Sub
Achei que demora muito para preencher a planilha só para a função caixa imagina para preencher todas as outras...

Algum colega poderia me orientar sobre como fazer?

Desde já agradeço a atenção
Creuza Moura
Você não está autorizado a ver ou baixar esse anexo.
#27894
Creuza, eu consegui trazer as matrículas, nomes e turno na planilha EscalaTrindade usando fórmulas. Porém, não sei onde estão os dados das escalas de cada funcionário. A planilha Escalas está cheio de fórmulas, mas só retorna dados para o primeiro funcionário.
Você poderia me indicar onde está, por favor?

Veja se ajuda.
Você não está autorizado a ver ou baixar esse anexo.
#27895
Bom dia!!

Favor ler as regras do fórum!
viewtopic.php?f=5&t=4
Regra nº 11:
Nós preferimos que os membros não façam postagens cruzadas (quando a mesma postagem é feita em diferentes fóruns). Mas quando isso ocorrer, os membros devem deixar claro os links para as postagens cruzadas.
Favor indicar as postagens cruzadas
http://www.planilhando.com.br/forum/vie ... 10&t=26433



Att
Por Creuza
#27962
babdallas escreveu:Creuza, eu consegui trazer as matrículas, nomes e turno na planilha EscalaTrindade usando fórmulas. Porém, não sei onde estão os dados das escalas de cada funcionário. A planilha Escalas está cheio de fórmulas, mas só retorna dados para o primeiro funcionário.
Você poderia me indicar onde está, por favor?

Veja se ajuda.
"babdallas" Muito obrigada pela ajuda, mas não resolve o problema pois o relatório precisa ser separado por loja e depois por setor . como a ideia e que a planilha seja alimentada por quem não entende nada de excel , quanto menos ajustes demandar melhor, no caso da solução sugerida precisaria fazer ajustes a cada adição ou exclusão de funcionário. Mesmo assim muito obrigada pelo seu tempo.

Os dados da escala de cada funcionário está na planilha escala, independente da loja.

Até onde vai meu entendimento teríamos que pegar a matricula que é comum as duas planilhas ( funcionário e escala, separar por loja e função ( estas informações estão na planilha funcionário). para então pegar as demais informações, ( setor, Equipe e folga - da planilha funcionário, e, a escala da planilha escala para montar o relatório)
Mas não sei fazer isso nem por formula e nem por vba.

Continuo tentando uma hora eu consigo

Mais uma vez muito obrigada pela atenção.
%%%%%%%%%%%
"alexandrevba" Boa tarde.

Eu li as regras do fórum. obrigada pela lembrança, ainda assim gostaria de justificar.

O outro tópico está fechado como resolvido e não sei como reabrir. por isso abri um tópico novo mas se olhar bem este é um novo problema... parecido com o anterior mas é outro.

De qualquer forma me desculpe pelo inconveniente não se repetirá.
%%%%%%%%%%%
Creuza Moura
#27974
Bom dia!!

Uma ideia seria filtrar(filtros são mais rápidos que loops) colunas não adjacentes, seria...
Código: Selecionar todos
Sub AleVBA()
Dim lr As Integer
Dim b As Range
Dim d As Range
Dim f As Range
Dim strInput As String

    lr = Range("A" & Rows.Count).End(xlUp).Row
    Set b = Range("B2:B" & lr)
    Set d = Range("D2:D" & lr)
    Set f = Range("F2:F" & lr)
    
    Worksheets("Funcionario").Select
    
    strInput = InputBox("Digite a Matricula")
    
    If strInput <> "" Then
        ActiveSheet.ListObjects("tabFuncionario").Range.AutoFilter 1, strInput
        Application.Union(b, d, f).Copy
'Crie uma guia com o nome AleVBA, ou outro nome
        Sheets("AleVBA").Range("A1").PasteSpecial xlPasteValues
        ActiveSheet.ListObjects("tabFuncionario").AutoFilter.ShowAllData
    End If
End Sub
Agora é só adaptar a sua necessidade.
A ideia é a mesmo para pegar a guia escala e por junto na guia AleVBA, depois de juntar os dados, faça como preferi (cria PDF, modificar o LayOut da guia para ficar mais apresentável etc)


Att
Por Creuza
#28114
Ainda na saga deste bendito relatório , consegui evoluir e ja consegui trazer as informações na ordem que quero com cabeçalho e linha de total do critério. Mas, ( sempre tem um mas!) so consigo faer acontecer para 1 critério e tenho 19! ( são 19 setores) como eu deveria escrever para terminado de trazer o cabeçalho, as informações deverá repetir o procedimento para o setor fiscal, e depois boca de caixa e assim por diante?
HELP!

o código que consegui fazer é
Código: Selecionar todos
Sub relatorio_Revisado()
    
    Sheets("Apoio").Range("z1:BI2").Copy
    Sheets("Rel1").Range("o3:ax4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("Rel1").Range("o3:ax4").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("Rel1").Cells(3, 15).Value = "Setor:Caixa"
    Sheets("Rel1").Range("A6:az50000").ClearContents
    ultimaLinha = Planilha4.Cells(Rows.Count, "a").End(xlUp).Row
    ultimaColuna = Planilha4.Cells(1, Columns.Count).End(xlToLeft).Column
    linha = 5
    
     For x = 5 To ultimaLinha
        If Planilha4.Cells(x, 12) = "Trindade" And Planilha4.Cells(x, 13) = "Caixa" Then
            For i = 15 To ultimaColuna
                Planilha3.Cells(linha, i) = Planilha4.Cells(x, i)
            Next
            linha = linha + 1
        End If
  Next
Range("o1048576").End(xlUp).Offset(1, 0).Select
ActiveCell.Value = "Total Caixa"
ActiveCell.Offset(0, 2) = WorksheetFunction.CountIfs(Planilha4.Range("m7:m3000"), "Caixa", Planilha4.Range("l7:l3000"), "Trindade")
ActiveSheet.Cells(ActiveCell.Row + 2, ActiveCell.Column).Select
End Sub
Por Creuza
#28285
Olá
voltei para contar como resolvi meu problema.
Vou postar o código para que , no futuro se alguém com um caso parecido precisar de ajuda, talvez encontra a solução ou um norte para a resolução.

Código: Selecionar todos
Sub ImprimirRelatorioParaiso()
Dim linha As Long
Dim ultimaLinha As Long
Dim j As Long
Dim total As Long
Dim qtdeRegistros As Long
    Sheets(NomeRelatorio).Range("A1:az50000").ClearContents
    Sheets(NomeRelatorio).Range("A1:az50000").Delete
    Sheets(NomeRelatorio).Range("A1:az50000").Clear
    
    linha = 4
    listaSetores = pegarListaSetoresParaiso
    qtdeSetores = UBound(listaSetores)
    For i = 0 To qtdeSetores
        linha = linha + 1
        Sheets("Apoio").Range("z1:BI2").Copy
        Sheets(NomeRelatorio).Cells(linha, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Sheets(NomeRelatorio).Cells(linha, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Sheets(NomeRelatorio).Cells(linha, 1).Value = "Setor : " & UCase(listaSetores(i))
        linha = linha + 2
        For j = 6 To 50000
            If UCase(Sheets("Escala").Cells(j, 12).Value) = UCase("PARAISO") And UCase(Sheets("Escala").Cells(j, 13).Value) = UCase(listaSetores(i)) Then
                Sheets("Escala").Range("O" & j & ":AX" & j).Copy
                Sheets(NomeRelatorio).Cells(linha, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                Sheets(NomeRelatorio).Cells(linha, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                linha = linha + 1
                ultimaLinha = linha
                total = total + 1
            End If
        Next
        
        Sheets(NomeRelatorio).Cells(linha, 1).Value = "Total " & total
        linha = linha + 1
        total = 0
    Next

           
End Sub
Código: Selecionar todos
Function pegarListaSetoresParaiso()
    Dim setores() As String
    Dim qtdeSetores As Integer
    Dim ordenacao() As Integer
    
    For x = 0 To 1000
        If Sheets("Apoio").Cells(x + 2, 1).Value = "" Then
            Exit For
        End If
        qtdeSetores = qtdeSetores + 1
    Next
    
    ReDim setores(qtdeSetores)
    ReDim ordenacao(qtdeSetores)
    
    For x = 0 To qtdeSetores
        If Sheets("Apoio").Cells(x + 2, 1).Value = "" Then
            Exit For
        End If
        setores(x) = Sheets("Apoio").Cells(x + 2, 1).Value
        ordenacao(x) = CInt(Sheets("Apoio").Cells(x + 2, 2).Value)
    Next
     
   Dim listaSetoresOrdenadas() As String
   ReDim listaSetoresOrdenadas(qtdeSetores)
   
   For x = 0 To qtdeSetores
     For y = 0 To qtdeSetores
        If ordenacao(y) = x + 1 Then
            listaSetoresOrdenadas(x) = setores(y)
        End If
     Next
   Next

    pegarListaSetoresParaiso = listaSetoresOrdenadas
End Function
Desde lá agradeço a atenção de todos que colaboram neste post
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord