Notifications
Clear all

Definindo Range de Seleção atraves de Outra Celula

9 Posts
1 Usuários
0 Reactions
1,256 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal, boa tarde!

Estou tentando fazer uma macro de seleção no Excel, mas não estou tendo muito exito, o que de fato acontece.
Tenho uma Sheet com formulas da A1:A100, essa Sheet se chama Txt_Titulos.
Nessa celulas, algumas retornam com valores e outras vazias, devido a uma base de dados variavel.
Eu preciso que a macro selecione somente as células que não estejam vazias.

O que eu fiz até o momento foi,

Criei uma macro através do recorder, que selecione todas as linhas da planilha (mesmo em branco), copia, e cola numa nova plan em branco.
Eu preciso delimitar que essa seleção seja feita com base nos campos preenchidos. Podem me ajudar?

offtopic: Eu coloquei uma formula (contarvalores) em uma outra célula que me ajuda a definir esse range, por exemplo, Range = 62. Mas não sei se isso ajuda.

Sub Selecionar()
'
' Selecionar Macro
'

'
    ActiveWorkbook.Save
    Sheets("Txt Titulos").Select
    Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("Transformer v1.0.xlsm").Activate
    Sheets("Txt Fornecedor").Select
    Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
 
Postado : 25/06/2014 2:23 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Crema, ajudaria mais ainda se colocasse um pequeno exemplo de como estão dispostos os dados e uma aba de como quer que fique o resultado, ainda mais que só comentou:
Eu preciso delimitar que essa seleção seja feita com base nos campos preenchidos.

[]s

 
Postado : 25/06/2014 4:14 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro,

Segue,

https://onedrive.live.com/redir?resid=B ... 221A%21236

A planilha está pesada ainda, porque quando comecei a desenvolver, não tinha muito conhecimento em excel, ainda vou mexer nas formulas para diminuir esse tamanho.

Veja que na sheet "Header" estão a maioria dos controles.
A nova macro que estou desenvolvendo chama "Selecionar"

Abraços.

 
Postado : 26/06/2014 6:53 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Crema, no serviço não temos como baixar arquivos de Drive virtuais, mais tarde em casa dou uma olhada se até lá não tiver nenhuma solução de outros colaboradores.

[]s

 
Postado : 26/06/2014 8:23 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Sem problemas,

Obrigado pela ajuda, infelizmente não consigo colocar no forum devido ao tamanho.

 
Postado : 26/06/2014 3:21 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Crema, se entendi corretamente, na aba "Txt Titulos" e "Txt Fornecedores" nas colunas "A" você tem o resultado das formulas e alguns resultados são "NULOS", então quer copiar somente as Celulas com resultado desconsiderando os resultados NULOS, e as celulas copiadas colar somente os valores em duas outras Pastas diferentes criadas na rotina.

Pelo menos foi o que entendi analisando sua rotina, se for isto, troque a sua macro pela a abaixo e faça os testes se estamos no caminho certo, lembrando que pelo modelo que disponibilizou e o nome do arquivo em sua rotina esta diferente do anexo. "Transformer v1.0_planilhando.xlsm" e não "Transformer v1.0.xlsm".

Copiar desconsiderando os resultados NULOS das Formulas

Sub SelecionarCopiarMauro()

    Dim WshTitulos As Excel.Worksheet
    Set WshTitulos = ThisWorkbook.Worksheets("Txt Titulos")
    
    Dim WshFornecedor As Excel.Worksheet
    Set WshFornecedor = ThisWorkbook.Worksheets("Txt Fornecedor")
    
    Dim iLastRow As Long
    
    ActiveWorkbook.Save
    
'Primeira Parte = Txt Titulos
    WshTitulos.Activate
    Range("A1").Select

    'Captura a Ultima Linha Preenchida com valor resultante da formula
    iLastRow = WshTitulos.Cells.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    
    Range("A1:A" & iLastRow).Copy 'Não precisa Slecionar Copiamos direto
    
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Windows("Transformer v1.0_planilhando.xlsm").Activate
    
'Segunda Parte = Txt Fornecedor
    WshFornecedor.Activate
    Range("A1").Select
    
    'Captura a Ultima Linha Preenchida com valor resultante da formula
    iLastRow = WshFornecedor.Cells.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    
    Range("A1:A" & iLastRow).Copy 'Não precisa Slecionar Copiamos direto
    
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Application.CutCopyMode = False
    
End Sub

[]s

 
Postado : 26/06/2014 7:20 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro,

Ficou perfeito, muito obrigado.
A questão da diferença dos nomes, é devido a eu ter criado uma planilha com dados fictícios para disponibilizar na internet.

Só preciso de uma nova ajuda, acredito que esta seja mais simples, estou incrementando o comando salvar como txt em cada uma dessas sheets que foram copiadas.
A questão é, o nome do arquivo, ainda está na planilha Transformer, na Sheet "Header", como eu faço para que eu consiga buscar o nome do arquivo em outro workbook.
Olha como minha formula está até agora...

Sub SelecionarCopiarMauro()

    Dim WshTitulos As Excel.Worksheet
    Set WshTitulos = ThisWorkbook.Worksheets("Txt Titulos")
    
    Dim WshFornecedor As Excel.Worksheet
    Set WshFornecedor = ThisWorkbook.Worksheets("Txt Fornecedor")
    
    Dim iLastRow As Long
    
    ActiveWorkbook.Save
    
'Primeira Parte = Txt Titulos
    WshTitulos.Activate
    Range("A1").Select

    'Captura a Ultima Linha Preenchida com valor resultante da formula
    iLastRow = WshTitulos.Cells.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    
    Range("A1:A" & iLastRow).Copy 'Não precisa Slecionar Copiamos direto
    
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWorkbook.SaveAs Filename:= _
        "M:TransformerArquivos" & Sheets("Header").Range("L2") & ".txt" _
        , FileFormat:=xlTextMSDOS, CreateBackup:=False
    Windows("Transformer v1.0.xlsm").Activate
    
'Segunda Parte = Txt Fornecedor
    WshFornecedor.Activate
    Range("A1").Select
    
    'Captura a Ultima Linha Preenchida com valor resultante da formula
    iLastRow = WshFornecedor.Cells.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    
    Range("A1:A" & iLastRow).Copy 'Não precisa Slecionar Copiamos direto
    
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
 ActiveWorkbook.SaveAs Filename:= _
        "M:TransformerArquivos" & Sheets("Header").Range("L3") & ".txt" _
        , FileFormat:=xlTextMSDOS, CreateBackup:=False
    
    Application.CutCopyMode = False
    
End Sub

Consegue entender?

 
Postado : 27/06/2014 8:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Crema, a principio a lógica é semelhante a que lhe foi passada no tópico abaixo :
Macro Salvar Como (txt) Nome do arquivo pré determinado [Resolvido]
viewtopic.php?f=10&t=11479

O que diferencia é que devemos capturar antes os nomes nos Renges definidos "L2" e "L3" em uma Variável e depois ajustar na rotina conforme abaixo :

Sub SelecionarCopiarSalvarMauro()

    Dim WshTitulos As Excel.Worksheet
    Set WshTitulos = ThisWorkbook.Worksheets("Txt Titulos")
    
    Dim WshFornecedor As Excel.Worksheet
    Set WshFornecedor = ThisWorkbook.Worksheets("Txt Fornecedor")
    
    Dim iLastRow As Long
    
    Dim sNomeArq_1 As String
    Dim sNomeArq_2 As String
    
    sNomeArq_1 = Worksheets("Header").Range("L2") 'Nome do em L2
    sNomeArq_2 = Worksheets("Header").Range("L3") 'Nome do em L3
    
    ActiveWorkbook.Save
    
'Primeira Parte = Txt Titulos
    WshTitulos.Activate
    Range("A1").Select

    'Captura a Ultima Linha Preenchida com valor resultante da formula
    iLastRow = WshTitulos.Cells.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    
    Range("A1:A" & iLastRow).Copy 'Não precisa Slecionar Copiamos direto
    
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
    'Salva com o Nome do em L2 - Variavel sNomeArq_1
    ActiveWorkbook.SaveAs Filename:= _
        "M:TransformerArquivos" & sNomeArq_1 & ".txt" _
        , FileFormat:=xlTextMSDOS, CreateBackup:=False
    
    Windows("Transformer v1.0.xlsm").Activate
    
'Segunda Parte = Txt Fornecedor
    WshFornecedor.Activate
    Range("A1").Select
    
    'Captura a Ultima Linha Preenchida com valor resultante da formula
    iLastRow = WshFornecedor.Cells.Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    
    Range("A1:A" & iLastRow).Copy 'Não precisa Slecionar Copiamos direto
    
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Salva com o Nome do em L3 - Variavel sNomeArq_2
    ActiveWorkbook.SaveAs Filename:= _
        "M:TransformerArquivos" & sNomeArq_2 & ".txt" _
        , FileFormat:=xlTextMSDOS, CreateBackup:=False
        
    Application.CutCopyMode = False
    
End Sub

Uma obs, não cheguei a fazer nenhum teste, depois pesquiso sobre isto, ou talvez algum outro colaborador já tenha algo a respeito,seria, se quer salvar como Arquivo Texto, acredito que não precisaria criar novos WorkBooks, colar e Salvar, acho que da para criar um arquivo Texto diretamente e colar no mesmo. Isto fica para outra oportunidade, vou pesquisar a respeito, por hora veja se a rotina acima já ajuda.

[]s

 
Postado : 27/06/2014 5:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Acredita que estava aqui dando mexendo no computador e pensei exatamente na solução que você lançou acima.
Muito bom, agradeço muito pela ajuda Mauro...

Vou continuar pesquisando e tentando aprimorar ainda mais essa planilha, ela é cria minha, e foi quem me deu os passos básicos para criação de macros.
Obrigado pelo pronto-atendimento e pelas explicações.

Grande abraço

 
Postado : 28/06/2014 12:35 am