Notifications
Clear all

Macro copiar e colar extrato de controle de pontos

16 Posts
4 Usuários
0 Reactions
3,890 Visualizações
(@kayomaster)
Posts: 0
New Member
Topic starter
 

Olá novamente pessoal, estou precisando de mais uma ajuda de vocês pra finalizar meu controle de pontos.

Preciso de uma macro que quando apertar no botão, passe por todas as abas de 100 a 120 e veja se a celula E3 e E5 possui alguma informação, se tiver ela vai copiar essas informações e vai colando abaixo um do outro a partir da coluna E, linha 10. alem dessas células ele precisa copiar a descrição da informacao copiada que fica nas celulas D3 e D5 respectivamente para a coluna D e copiar a data atual que fica na célula D1 e colar na coluna F para cada item copiado. Quando não houver nada ele não fará nada, quando houver apenas uma informação ele vai copiar apenas a unica informacao que tiver e se tiver mais de uma ele colocara as duas informacoes sempre abaixo um do outro sem apagar o que ja foi escrito antes, em cada aba que tiver a informação. Cada aba tem seus pontos a macro vai fazer a colagem na propria planilha que possuir as informações. Se não tiver nada não vai copiar nem fazer nada. O botão ficará na aba CONSOLIDADO.

Estou deixando o link do drive e a planilha em anexo para vocês vizualizarem o exemplo que fiz a mão, conseguimos ver nas abas: 104, 108, 115.
Acredito que não seja muito dificil.

https://drive.google.com/open?id=1A2Hi4 ... meorifROpc

E agradeço desde já ajuda de vocês.
Acredito que com isso o sisteminha de controle de pontos esta concluído. :D

 
Postado : 07/02/2018 10:35 pm
(@klarc28)
Posts: 0
New Member
 

-----

 
Postado : 08/02/2018 4:38 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

kayo, em sua postagem anterior viewtopic.php?f=10&t=27274&start=20 que deu como resolvido, é só pegar aquela rotina e fazer os ajustes, procure entender as instruções da mesma acompanhado passo a passo a forma que ela trabalha, abra a tela do VBE e na rotina, utilize a tecla "F8" e verá linha por linha sendo executada.

Nos ajustes, de inicio, teria de trocar o primeiro For que percorre as linha pelo que percorre cada sheet e capta o nome :

    Dim sSheet
    
    For Each sSheet In ThisWorkbook.Worksheets
    
        MsgBox sSheet.Name
        
    Next

[]s

 
Postado : 08/02/2018 5:32 am
(@kayomaster)
Posts: 0
New Member
Topic starter
 

Olá, quanto a pagar eu ja falei que se quizer que eu pague não há problema algum pra eu pagar. Quando ao script anterior que foi resolvido ele tirava da consolidado e colava em cada planilha. esse ele vai copiar e colar na mesma planilha. Eu tava querendo fazer um curso de vba presencial mas nao tem em minha cidade esses vídeos eu olho não saio do canto. quando foi executar da erro faço as mudancas mas nao consigo mas se é código que voces querem vou fazer aqui mesmo sabendo que nao vai dar certo.

Eis o código que tentei e não deu certo:

Sub consolidar()
    Dim Linha As Long
    Dim sLinSheets As Long
    Dim sRG As Range
    Dim sCodigo
    Dim sRow As Long
    Dim sSht As Worksheet
    Dim ShtCONSOLIDADO As Worksheet
    Dim sRgColunas
    Dim sRotulo
    Dim iLinRotulo
    Dim Col As String
    
    Dim wb As Workbook
    Set wb = ThisWorkbook
    
    Set ShtCONSOLIDADO = wb.Sheets("100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119 120")
    
    Linha = ShtCONSOLIDADO.Range("100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119 120").End(xlDown).Row
    
    Set sRG = ShtCONSOLIDADO.Range("D9:" & "D" & Linha)
    
        For Each x In sRG
            sRow = x.Row

            Set sRgColunas = ShtCONSOLIDADO.Range("E3" & sRow & ", E5" & sRow & ",D1" & sRow)
                
                For Each i In sRgCélula
                    iLinRotulo = 2 'Linha do Cabeçalho
                    
                    'Verificamos se o avlor é nulo
                    If i.Value <> "" Then
                        'Montamos a Letra das Colunas
                        Col = Split(i.Address(1, 0), "$")(0)
                        
                        'Linha dos Rotulos (Cabeçalho)
                        sRotulo = Range(Col & iLinRotulo).Address(0, 0)
                        'Capturamos o codigo
                        sCodigo = x.Value
                        sRow = i.Row
                        
                        'Montamos o nome da aba como o sCodigo
                        Set sSht = wb.Sheets(CStr(sCodigo))
                        sLinSheets = sSht.Range("D9").End(xlDown).Row + 1
                        
                        'Copiamos para as abas
                        ShtCONSOLIDADO.Range(sRotulo).Copy Destination:=sSht.Range("d3" & sLinSheets)
                        ShtCONSOLIDADO.Range(i.Address).Copy Destination:=sSht.Range("d5" & sLinSheets)
                        'Na instrução abaixo estou supondo que a data que comentou seria da Coluna L -DATA ENVIO
                        'Se não for, é só ajustar
                        ShtCONSOLIDADO.Range("D1" & sRow).Copy Destination:=sSht.Range("F9" & sLinSheets)
                     End If
                     
                 Next i
        Next

End Sub

na verdade eu gostaria muito de não precisar de ninguém pra criar os códigos, mas assim é a vida né, cada um tem seus dons. Se não puder fazer não há problema, porém nunca me neguei a pagar caso quizece inclusive deixei até meu telefone, e vou deixar aqui também (84) 996270227, pela internet procurei por um vba freelancer e não consegui, apenas golpistas e gente que não trabalhava de verdade na área, não sendo muito caro, não sou rico nem muito menos com esssa inteligencia que muitos possuem, mas antes de pedir tento varias vezes mas não consigo entender.

Peço desculpas pelo incomodo.

 
Postado : 08/02/2018 6:20 am
(@klarc28)
Posts: 0
New Member
 

-----

 
Postado : 08/02/2018 6:55 am
(@klarc28)
Posts: 0
New Member
 

-----

 
Postado : 08/02/2018 7:17 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Kayo, entenda que os Foruns como o Planilhando são para justamente ajudar quando possível as solicitações, e toda a ajuda é realizada por voluntários e gratuita, conforme o tempo disponivel de cada um.
Eu quando iniciei em VBA, tambem nunca fiz um curso, e fui aprendendo com as ajudas dos Foruns e videos na net, ainda não sei tudo, tenho muito que aprender ainda, e tambem ainda solicito ajuda em questões que não consigo resolver, e pela minha experiência pelos Foruns que passei e passo, tenho em mente que a idéia de procurar ensinar como pescar e não dar o peixe pronto, por isto sempre que possível coloco comentários nas instruções para facilitar o entendimento, e veja o que fez agora, postou uma rotina que mesmo que reconheça que ela tenha erros, já é um indicio que está procurando entender e aprender, ficando claro seu esforço e não simplesmente querendo o código já pronto, e fica mais fácil procurar indicar onde tem de ajustar e com isto irá com o tempo nas próximas macros que for criar já ter mais noções, eu vejo isto como ponto positivo, continue sempre procurando entender o que cada instrução faz, e se não entender é só perguntar no Forum, aqui você pode estar perguntando o que faz determinada instrução ou macro só para aprender, não precisa ser para um caso especifico.
Quando algum usuário precisa de uma assitencia de urgencia ou queira que seja criado do zero arquivos mais complexos e está disposto a pagar, temos um Tópico especifico para isto que é o "OPORTUNIDADES" - viewforum.php?f=19, onde pode estar solicitando e combinando valores.

Veja, quanto a usa solicitação, procure sempre antes de colocar, analisar o que quer e os resultados, por exemplo, quando solicita "veja se a celula E3 e E5 possui alguma informação, se tiver ela vai copiar essas informações e vai colando abaixo um do outro a partir da coluna E", veja só nesta linha, o ideal seria ser mais detalhado, pois temos uma palavrinha mágica na frase que é o "SE" que representa uma condição, ou seja, temos de copiar "SE" um dos dois ranges tiver informação ? "OU" (seria outra condição) se somente nos dois tiver informação ? alem disto, analisar que em "E3" você tem uma formula, que mesmo sem dados resulta no Valor "0" zero, alias o mesmo irá acontecer com qq outra celula que tenha formula.

Diante disto, e como já está començandop a ter uma noção e vonbtade de aprender, a rotina abaixo percorremos todas as abas e capturamos os nomes e valores que estão nas celulas que comentou, facilitando a inserção das condições "SE - IF" para copiar e colar, veja se consegue entender e ajustar e vá solicitando ajuda sempre que precisar.

Sub Percorre_Sheets()

    Dim sSheet
    
    'Para cada aba no arquivo
    For Each sSheet In ThisWorkbook.Worksheets
        'Se os nomes forem diferentes das abas a serem ignoradas
        If sSheet.Name <> "REFERENCIA" And sSheet.Name <> "CONSOLIDADO" Then
            'Capturamos o nome e os valores das celulas
            MsgBox "Os Valores na aba :- " & sSheet.Name & " - são: "
            MsgBox sSheet.Range("E3").Value
            MsgBox sSheet.Range("E5").Value
            MsgBox sSheet.Range("D3").Value
            MsgBox sSheet.Range("D5").Value
            MsgBox sSheet.Range("D1").Value
        End If
    Next
    
End Sub

[]s

 
Postado : 08/02/2018 7:41 am
(@kayomaster)
Posts: 0
New Member
Topic starter
 

Olá mauro, o código que me disponibilizou nao funcionou ele ficou me dando informacoes em caixa de diálogo e não saia disso chegou a travar.
Quanto ao fato de aprender eu não sei se vou conseguir por essas video aulas da internet eu não consigo aprender muito nessas aulas a distancia. ja tenho essa experiencia da faculdade onde acabei optando em aulas presenciais, já tentei muito e também meu foco não é esse, eu não trabalho com isso, apenas tenho um pequeno comércio e faço o controle de minhas coisas estoque custos etc pelo excel. Inclusive tive coisas que fiz que nem me lembro mais como fiz exatamente por não estar mexendo com isso todo dia. Eu faço uma vez e ele fazendo o que preciso vou só alimentando as informações. Aí inventei de fazer esse programa de pontos pra estimular as vendas e com isso, como eu não sei mexer muito em VBA acabo recorrendo aqui para alguém me salvar, passo horas tentando fazer essas coisas mas nao sai do canto. as vezes tento reutilizar alguma macro ja existente, quando é só uma questao de troca de célula as vezes eu ainda mexendo consigo fazer, mas quando muda o comando e etc aí já vai ficando muito dificil porque é difícil de achar algo que não é muito comum das pessoas fazerem.

Além disso tenho esse pequeno comércio e trabalho ainda num call center, tenho filho aí meu tempo é bem resumido o pouco tempo que me sobra eu fico aqui quebrando as vezes a cabeça tentando distrinchar essas planilhas que inventei de fazer. O ideal seria um sistema mesmo automatizado, mas como o recurso financeiro é baixo não compensa.

Quando ao tópico oportunidades eu não sabia da existencia do mesmo, pois se soubesse eu já teria feito muita coisa por la inclusive abri um tópico sem solucao exatamente porque seria algo mais complexo e por lá me recomendaram procurar um vba free lancer no qual procurei no google e só achei pessoas falsas que nao fazia o serviço e trabalhavam com outras coisas. Mas é otimo saber pois depois irei levar a minha outra planilha pra ver quanto custaria fazer o que tava precisando para facilitar meu trabalho.

Quanto ao código que voce me mandou ele aparece várias mensagens de erro quando aperto o botão e não faz o que eu gostaria que ele fizece. Mas fico agradecido mais uma vez por estar aqui tentando ajudar.

Deus abencoe a todos nós.

 
Postado : 08/02/2018 2:27 pm
(@mprudencio)
Posts: 0
New Member
 

Salvo a polemica, acho que vc esta complicando o simples.

Qual a minha sugestão :

Centralizar os dados de cada guia em uma unica, isso vai facilitar tudo, totais e todos os possiveis relatorios que vc quiser.

Pense em centralizar os dados e veja como vai facilitar obter as informações.

 
Postado : 08/02/2018 2:54 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

kayo, no meu serviço tambem só utilizo o excel para fazer as planilhas que preciso, porque nem sempre a prefeitura tem soft para o que precisamos, e por isso fui aprendendo aos poucos da forma que já comentei, questão de tempo ? isto acabamos dando um jeito, se ver em uma das minhas postagem em seu tópico anterior, eram 03h da manhã, afazeres apos sair do serviço, tenho muitos, pois trabalho em casa ainda com manutenção de pc e agora comecei a fazer peças de artesanato e tambem tenho familia para dar atenção, e veja que fiz 60 anos ano passado, então procure arrumar alguns minutos por dia para ao menos ir estudando um pouco, uma vez que tem empresa é imprescindível conhecer excel e word.
Quanto a rotina que passei, de fato a única coisa que ela faz é mostrar as mensagens, com o nome das abas e os valores que tem em cada celula da aba encontrada, era para você procurar entender e aprender um pouco mais de como podemos trabalhar e montar o que está querendo, ou seja no lugar das mensagens teriamos de utilizar as instruções de capturar a ultima linha preenchida e copiar e colar.
No momento estou um pouco ocupado e assim que possível vou montando a rotina que quer, mas antes tem de dar detalhes sobre as observações que fiz na postagem anterior, senão vamos ficar igual ao outro tópico, depois e montar uma rotina o que você queria era outra coisa que demandou de alterar, então para não ficarmos em suposição, analise e detalhe de que forma temos de montar a rotina.

[]s

 
Postado : 08/02/2018 6:24 pm
(@kayomaster)
Posts: 0
New Member
Topic starter
 

Pois bem, possuo problemas de saúde que acredito que não cabe ficar aqui falando da vida pessoal de ninguém, na verdade estou achando isso desnecessario e humilhante, se não puder fazer basta não falar nada, como acontece as vezes. Falando sobre o problema em questao que é a macro, a informação não é importante pois eu vou disponibilizar pros meus clientes o link do drive da planilha espelhada dessa planilha principal para que eles vejam separadamente as infomracoes das abas deles. e com isso como todo mes a celula pontos acumulados vai aumentado esse novo botao em questao deixaria todo mes o registro do saldo mensal. era isso. mas se nao puder fazer não há problema irei levar a questao para o topíco oportunidades, não fiz antes pois desconhecia. De fato achei extranho o código que você colocou porém por você ter um conhecimento bem maior que o meu testei pra ver o que dava, só consegui fechar pelo ctrl + alt + del. se tiver alguem que possa fazer com o codigo que mandei, se não consegui fazer é porque tive dificuldades, afinal fiz toda a planilha sozinho exceto as macros. Quando a macro é coisa simples se só trocar ou acrescentar uma celula ou informacao eu ainda consigo fazer sozinho.

Obrigado.

 
Postado : 08/02/2018 8:24 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Kayo, não me entenda mal, meu comentário foi somente porque você falou sobre a falta de tempo e pensei que estava interessado em aprender já que postou uma rotina que estava construindo, e meu jovem não sei porque da revolta, em momento algum foi recusado alguma ajuda, e algumas postagens ficam sem respostas muitas vezes por falta de detalhes.
Quanto a informação que acha que não é importante, voce tem de ter em mente que desconhecemos o seu projeto e uso, e para nós que vamos criar, cada detalhe é importante, pelo visto você não entendeu quando eu questionei sobre a condição que citou "SE a celula E3 e E5 possui alguma informação, se tiver ela vai copiar essas informações e vai colando abaixo um do outro a partir da coluna E", de acordo com seu modelo, em "E3" tem uma formula, então para o VBA ela nunca estará vazia, ao passo que em "E5" se não digitar nada obviamente estará vazia, então não tem como utilizar a condição "SE" em "E3", e como quem utiliza o programa é você e para evitar de ficarmos em suposições, perguntamos para ver se conseguimos de primeira fazer a rotina correta, se relembrar de seu tópico anterior, criei uma rotina da maneira que entendi, e no fim não era aquilo que você queria, tive de perguntar algumas vezes até conseguirmos finalizar.
Mas fica a seu critério, se quer partir para um freelancer, fique a vontade.

[]s

 
Postado : 08/02/2018 10:36 pm
(@kayomaster)
Posts: 0
New Member
Topic starter
 

Tudo bem mauro, peço desculpas por algo, mas no caso se a condicao SE ao invés de vazio for o numero diferente de Zero não daria certo? para a célula E3, porque essa célula ela faz a soma da coluna B que é os pontos todos que o cliente possui, aí se ele nao tem nada vai ficar zero mas se tem ai ele vai somando, e ela é uma célula importante.

No excel normal eu consigo fazer isso pondo entre aspas o valor, nao sei se macro reconheceria.

 
Postado : 08/02/2018 10:46 pm
(@kayomaster)
Posts: 0
New Member
Topic starter
 

Eu pedi ajuda de vocês porque essa rotina ela é diferente das que foram feitas e das que possuo porque as macros que possuo ou copiam de uma aba e cola em cada aba separado, ou virce versa, ela passa em todas as abas e colam numa outra aba tudo junto. Nesse caso dessa macro desse tópico ele vai passar por todas as abas de 100 a 120 porem eles vao colar dentro de cada aba as informacoes separadamente um abaixo do outro nas celulas que eu informei no inicio desse topico. para tipo gerar um extrato mes a mes quando eu lancar os pontos eu aperto esse botao e ele lancaria pra cada aba, ai depois eu zerava consolidado alimentaria o mes seguinte e apertaria nesse botao denovo assim o cliente consegue acompanhar mes a mes as movimentacoes até porque quando os pontos forem trocados eu depois vou apagar aquele historico maior e o extrato ficaria la informando quantos pontos ele tinha quantos ele trocou ficaria um historico bem organizado.

Eu estou pedindo ajuda porque realmente eu não possuo esse codigo e nao consegui fazer de jeito nenhum com que desse certo. Todos temos nossos dons e limitações. Assim é a vida...

 
Postado : 08/02/2018 11:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

kaio, conforme o modelo disponibilizado, se os layouts estiverem todos iguais, faça o teste com a rotina abaixo, fiquei ainda com algumas duvidas, mas vou aguardar um retorno seu se é isto mesmo ou precisa alguma alteração :

Veja que deixei proposital as Variáveis referentes aos ranges fixos a serem verificados para uma melhor compreensão.

Sub Verifica_Valores_Em_Cada_Aba()
    Dim sD1 As Date
    Dim sSht As Worksheet
    Dim wb As Workbook
    Set wb = ThisWorkbook

    'Para cada aba no arquivo
    For Each sSht In ThisWorkbook.Worksheets
        
        'Descartamos as 02 abas iniciais com a Condição SE (IF)
        'se o nome for diferente de "REFERENCIA" e "CONSOLIDADO"
        If sSht.Name <> "REFERENCIA" And sSht.Name <> "CONSOLIDADO" Then
            
            'Definimos o nome de cada aba na Variável sSht no Loop
            Set sSht = wb.Sheets(CStr(sSht.Name))
            
            'Uma vez que a data é atraves de formula e independe
            'de atender as condições armazenamos no inicio
            sD1 = sSht.Range("D1").Value 'Data
            
            'Capturamos a ultima linha vazia na coluna E
            sLinSheets = sSht.Range("E1048576").End(xlUp).Row + 1
        
            'Verificamos em cada aba se E3 atende a condição
            If sSht.Range("E3").Value <> 0 Then
                'Se sim, armazenamos os valores nas variaveis
                sE3 = sSht.Range("E3").Value
                sD3 = sSht.Range("E3").Offset(0, -1).Value
                    'Lançamos os Valores
                    sSht.Range("E" & sLinSheets).Value = sE3
                    sSht.Range("D" & sLinSheets).Value = sD3
                    sSht.Range("F" & sLinSheets).Value = sD1
                
                'Depois Verificamos em cada aba se E5 atende a condição
                If sSht.Range("E5").Value <> 0 Then
                    'Se sim, armazenamos os valores nas variaveis
                    sE5 = sSht.Range("E5").Value
                    sD5 = sSht.Range("E5").Offset(0, -1).Value
                        
                        'Incrementamos + 1 a variável sLinSheets para proxima linha em branco
                        sLinSheets = sLinSheets + 1
                        
                        'Lançamos os Valores
                        sSht.Range("E" & sLinSheets).Value = sE5
                        sSht.Range("D" & sLinSheets).Value = sD5
                        sSht.Range("F" & sLinSheets).Value = sD1
            
                End If
            End If
        End If
    Next
    
End Sub

[]s

 
Postado : 09/02/2018 8:15 am
Página 1 / 2