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 Micsterminador
Posts
#48600
Bom dia,

Utilizo uma Macro do Excel para tratar alguns dados de licitações da minha empresa.
Na aba "Colar e-mail", colo as informações que recebo via e-mail, sem formatação. Depois na aba resumo, utilizo a Macro "Converter Conciliação" para trazer as informações em um formato mais fácil de entender. Gostaria de que a macro não trouxesse informações repetidas, podendo utilizar como parâmetro a informação da coluna "A" "Nº Conlicitação".

Em resumo, ao executar a macro, gostaria que ela não trouxesse licitações às quais já estão na planilha, pois é retrabalho analisar a mesma licitação duas vezes.

Agradeço a atenção.
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por Jimmy
Avatar
#48607
Olá Mics,

Olhei a macro mas não entendi muito bem o que fazer.

Algumas perguntas:

- Me concentrei na sub ConverterConlicitacao porque deduzi que é dela que estamos tratando. Deduzi corretamente?

- Quando for encontrada um número de Conlicitacao, onde está o histórico dos números já processados no passado, onde pode feita a consulta?

- Imaginei que a planilha Resumo fosse esse histórico, mas abandonei a ideia quando ví que os dados processados são colador nas primeiras linhas da planilha Resumo, por cima do que já tem lá. Se Resumo é um histórico, os dados deveriam ir pra parte de baixo, a partir da primeira linha branca, por exemplo. Se é uma planilha auxiliar onde os dados da planilha "Colar e-mails" são jogados para análise, não seria melhor limpar essa planilha antes da colocar os novos valores?

- Poderia me explicar o ojbetivo do final da macro (FOR FOR IF)? Pode ser que a falta de entendimento meu dessa parte é que tenha gerado as demais dúvidas.

Durante a análise da SUB, não resisti e alterei algumas coisas, mas sem alterar a funcionalidade. A macro abaixo faz o mesmo que a original, porém acho que é um pouco mais simples.
Código: Selecionar todos
Sub ConverterConlicitacao()
With Colar

    cls = .UsedRange.Columns.Count
    rws = .UsedRange.Rows.Count
    
    x = 0: ReDim Preserve Rol(18, x)
    Rol(0, x) = "Nº ConLicitação"
    Rol(1, x) = "Unidade Licitante"
    Rol(2, x) = "Cidade"
    Rol(3, x) = "Objeto"
    Rol(4, x) = "Homepage"
    Rol(5, x) = "Observação"
    Rol(6, x) = "Edital"
    Rol(7, x) = "Datas"
    Rol(8, x) = "Endereço"
    Rol(9, x) = "Telefone"
    Rol(10, x) = "Processo"
    Rol(11, x) = "Edital Online"
    
    For r = 1 To rws
        For c = 1 To cls
            Select Case .Cells(r, c).Value
                Case Is = "Objeto:":
                    x = x + 1
                    ReDim Preserve Rol(18, x)
                    Rol(3, x) = .Cells(r, c + 1).Value
                    Rol(11, x) = "Não"
                Case Is = "Nº ConLicitação:":     Rol(0, x) = .Cells(r, c + 1).Value
                Case Is = "Nº ConLicitação :":    Rol(0, x) = .Cells(r, c + 1).Value
                Case Is = "Unidade Licitante:":   Rol(1, x) = .Cells(r, c + 1).Value
                Case Is = "Unid. Licitante:":     Rol(1, x) = .Cells(r, c + 1).Value
                Case Is = "Cidade:":              Rol(2, x) = .Cells(r, c + 1).Value
                Case Is = "Homepage:":            Rol(4, x) = .Cells(r, c + 1).Value
                Case Is = "Observação:":          Rol(5, x) = .Cells(r, c + 1).Value
                Case Is = "Edital:":              Rol(6, x) = .Cells(r, c + 1).Value
                Case Is = "Datas:":               Rol(7, x) = .Cells(r, c + 1).Value
                Case Is = "Endereço:":            Rol(8, x) = .Cells(r, c + 1).Value
                Case Is = "Fone:":                Rol(9, x) = .Cells(r, c + 1).Value
                Case Is = "Processo:":            Rol(10, x) = .Cells(r, c + 1).Value
                Case Is = "Processo :":           Rol(10, x) = .Cells(r, c + 1).Value
                Case Is = "Edital on-line:":      Rol(11, x) = "Sim"
            End Select
        Next
    Next
   
    x = x + 1
End With
    
With Resumo
    .Range("A1:L" & x).Value = Application.Transpose(Rol)
    
    For r1 = 2 To x
        For r2 = 2 To KW.UsedRange.Rows.Count
            s = UCase(KW.Cells(r2, 1).Value)
            If InStr(UCase(.Cells(r1, 2).Value), s) > 0 Or _
                InStr(UCase(.Cells(r1, 4).Value), s) > 0 Or _
                InStr(UCase(.Cells(r1, 7).Value), s) > 0 Then
                
                .Cells(r1, 13).Value = .Cells(r1, 13).Value & KW.Cells(r2, 2).Value & " | "
                .Cells(r1, 14).Value = .Cells(r1, 14).Value & KW.Cells(r2, 3).Value & " | "
            End If
        Next r2
    Next r1
End With

End Sub
Encontrei um erro na tua macro:
Após o select, as linhas
Rol(5, x) = Dts
Rol(6, x) = Obs
Rol(7, x) = Edi

deveriam ser
Rol(5, x) = Obs
Rol(6, x) = Edi
Rol(7, x) = Dts


Vamos esclarecer as dúvidas acima pra partir pra verificação que você pediu inicialmente.

Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.

Jimmy San Juan
Por babdallas
#48608
Veja se esta subrotina ajuda a remover os duplicados. Chame ela nas outras subrotinas antes de executar a conciliação dos dados.
Código: Selecionar todos
Sub RemoverDuplicados()
    Dim lngUltLinOrig   As Long, lngUltLinFim As Long, lngUltCol As Long
    Dim vrtDados As Variant
    
    With Resumo
        lngUltLinOrig = .Cells(.Rows.Count, 1).End(xlUp).Row
        lngUltCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    
        .Range(.Cells(1, 1), .Cells(lngUltLinOrig, lngUltCol)).AdvancedFilter Action:=xlFilterCopy, Unique:=True, CopyToRange:=.Range("AA1")
        lngUltLinFim = .Cells(.Rows.Count, 27).End(xlUp).Row
        
        vrtDados = .Range(.Cells(2, 27), .Cells(lngUltLinFim, 27 + lngUltCol)).Value2
        .Range(.Cells(1, 27), .Cells(lngUltLinFim, 27 + lngUltCol)).Clear
        .Range(.Cells(2, 1), .Cells(lngUltLinOrig, lngUltCol)).ClearContents
        .Range(.Cells(2, 1), .Cells(lngUltLinFim, lngUltCol)).Value = vrtDados
    End With
End Sub
Por Micsterminador
Posts
#48650
Boa tarde Jimmy,

- Me concentrei na sub ConverterConlicitacao porque deduzi que é dela que estamos tratando. Deduzi corretamente?
R: Isso mesmo, esta é a macro que queremos alterar.

-Quando for encontrada um número de Conlicitacao, onde está o histórico dos números já processados no passado, onde pode feita a consulta?
R: Estava considerando a aba Resumo para a consulta, mas pela sua afirmação abaixo, parece que isso terá que ser alterado.

- Imaginei que a planilha Resumo fosse esse histórico, mas abandonei a ideia quando ví que os dados processados são colador nas primeiras linhas da planilha Resumo, por cima do que já tem lá. Se Resumo é um histórico, os dados deveriam ir pra parte de baixo, a partir da primeira linha branca, por exemplo. Se é uma planilha auxiliar onde os dados da planilha "Colar e-mails" são jogados para análise, não seria melhor limpar essa planilha antes da colocar os novos valores?
R: Realmente, a planilha Resumo deveria ser. Desda forma, tenho duas sugestões:

a) Utilizar a própria aba Resumo como um histórico, separando os resultados da consulta por uma linha em branco, e ignorando resultados que já apareceram neste histório.

b)Criar uma nova aba para o histórico, e a aba Resumo é limpa a cada nova consulta, ignorando os resultados que já apareceram anteriormente no histórico.

- Poderia me explicar o ojbetivo do final da macro (FOR FOR IF)? Pode ser que a falta de entendimento meu dessa parte é que tenha gerado as demais dúvidas.
R: Diariamente eu recebo vários emails com licitações abertas em todo o brasil. A macro foi desenvolvida para que eu possa colar o email na aba "Colar Email", e as informações ficam organizadas na aba resumo, onde é possível filtrar as informações. Porém, a mesma licitação aparece no email hoje, outro amanhã, outro semana que vem, e etc, e desta forma é retrabalho visto que eu analiso a mesma licitação várias vezes. Por isso a necessidade da atualização da macro, para que a licitação que já foi analisada, não seja analisada novamente.

Agradeço a atenção.
Abraços,
Michael F. Day
Por Micsterminador
Posts
#48651
Boa tarde Babdallas,

Utilizei a sub que você escreveu, porém ainda estão aparecendo licitações repetidas, a única coisa que mudou foi a coluna A está trazendo dados em branco.
Anexei a planilha novamente, poderia verificar se usei a sub no lugar correto?

Agradeço a atenção.
Abs,
Michael F. Day
Você não está autorizado a ver ou baixar esse anexo.
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