Comunidade DATAB

Seja bem vindo ao fórum oficial da DATAB | Sua dose diária de Power BI e Excel

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
#69112
Senhores precisaria da ajuda dos experts em macro para resolver o seguinte problema:

Na pasta de trabalho anexa estão exibidas 5 planilhas sendo:

"Dados", "RPDE", "BRPDE", "VRPDE" e "Arquivo final"


A ideia é que uma macro faça o seguinte:

Copie as informações inseridas de RPDE, BRPDE e VRPDE para a planilha "Arquivo final".

Contudo a copia deve respeitar a seguinte lógica:

Na planilha "Arquivo final" deve ser inserida as informações nas linhas respeitando a seguinte ordem:

1º RPDE, 2º BRPDE e 3º VRPDE

Por exemplo na linha 1 da planilha "arquivo final" deve constar a informação da linha 1 de "RPDE", na linha 2 a informação da linha 1 de BRPDE e na linha 3 a informação da linha 1 de VRPDE.

Mas essa cópia precisa ser feito de todas as linhas inseridas nas planilhas RPDE, BRPDE e VRPDE. Imagine que poderia ter 2000linhas, então tudo deveria ser copiado para a planilha "Arquivo final" na ordem indicada.

E por último precisaria que as informações da planilha "Arquivo final" sejam exportadas para um bloco de notas com delimitador pipe.

Contudo o delimitador deve respeitar o limite de informações inseridas nas linhas.

Por exemplo, na linha 1 da planilha "Arquivo final" terá a informação de RDE que possui apenas uma informação, na linha 2 a informação de BRPDE com 17 informações e na linha 3 VRPDE com 7 informações.

Anexo planilha.
#69113
Olá, @Pegorini .

O arquivo que você enviou foi abduzido no trajeto. :D
#69123
Olá Pegorini,

veja se assim está bom, devo salientar que sou iniciante em vba, fiz as seguintes alterações no seu arquivo:
renomei o codename das planilhas:
Planilha4 para wsRPDE
Planilha5 para wsBRPDE
Planilha6 para wsVRPDE
Planilha7 para wsFinal
isso no VBE, não mudou nada o nome das planilhas, continuou o mesmo, isso foi uma boa prática que aprendi com o Mestre Rodrigo Aiosa
Você não está autorizado a ver ou baixar esse anexo.
Pegorini agradeceu por isso
#69125
Se o resultado do código abaixo for o esperado, e com vistas à elaboração do segundo código, coloque ao menos as 3 primeiras linhas no Bloco de Notas da forma que você deseja que seja feito, notadamente com as células vazias.
Código: Selecionar todos
Sub ReplicaDadosIntercalados()
 Dim ws As Worksheet, k As Long, x As Long
  Application.ScreenUpdating = False
  Sheets("Arquivo final").Cells = ""
  For k = 1 To Sheets("RPDE").Cells(Rows.Count, 1).End(3).Row
   For Each ws In Worksheets(Array("RPDE", "BRPDE", "VRPDE"))
    ws.Range(ws.Cells(k, 1), ws.Cells(k, Columns.Count).End(1)).Copy
    Sheets("Arquivo final").Cells(x + 1, 1).PasteSpecial xlValues: x = x + 1
   Next ws
  Next k
End Sub
JCabral, Pegorini agradeceu por isso
#69129
Boa Tarde Osvaldo/Luiz

Primeiramente muito obrigado pelo retorno. O copia a cola funcionou, contudo, se não for pedir demais a uma segunda parte que eu realmente não sei nem como começar por isso recorro aos senhores.

Com os resultados na planilha "Arquivo final" é possível que uma macro gere a informação em um bloco de notas, cujas informações sejam delimitados por pipe? O demilitador deve ser inserido nos mesmos números da informação de cada linha.

Anexo apresento como gostaria que ficasse o resultado final. No arquivo que apresento o delimitador é ;, mas precisaria do delimitador pipe |



RPDE;
BRPDE;2;255;45-2649521;N;N;;JOÃO;110;RUA 123;1;;;12;MIAMI 123;FLORIDA;123456;
VRPDE;20210502;9412;110;455433,68;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 124;2;;;13;MIAMI 124;CHINA;123456
VRPDE;20210502;9412;110;524048,35;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;ANÃO;;RUA 125;3;;;14;MIAMI 125;CHINA;123456;
VRPDE;20210502;9412;110;331122,26;;42;
RPDE;
BRPDE;2;611;20507205781;N;N;;TIÃO;;RUA 126;4;;;15;MIAMI 126;Lima;123456;
VRPDE;20210502;9412;110;5401,4;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 127;5;;;16;MIAMI 127;CHINA;123456;
VRPDE;20210502;9412;110;493507,61;;42;
RPDE;
BRPDE;2;255;45-2649521;N;N;;TIÃO;;RUA 128;6;;;17;MIAMI 128;FLORIDA;123456;
VRPDE;20210502;9412;110;133262,79;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 129;7;;;18;MIAMI 129;CHINA;123456;
VRPDE;20210502;9412;110;186228,08;;42;
RPDE;
BRPDE;2;255;45-2649521;N;N;;TIÃO;;RUA 130;8;;;19;MIAMI 130;FLORIDA;123456;
VRPDE;20210502;9412;110;92385,49;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 131;9;;;20;MIAMI 131;CHINA;123456;
VRPDE;20210502;9412;110;121381,62;;42;;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 132;10;;;21;MIAMI 132;CHINA;123456;
VRPDE;20210502;9412;110;258885,11;;42;;
RPDE;
BRPDE;2;603;1154719-7;N;N;;TIÃO;;RUA 133;11;;;22;MIAMI 133;Sindh;123456;
VRPDE;20210502;9412;110;2296,97;;42;
RPDE;
BRPDE;2;399;00698060126;N;N;;TIÃO;;RUA 134;12;;;23;MIAMI 134;Varese;123456;
VRPDE;20210502;9412;110;5940,66;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 135;13;;;24;MIAMI 135;CHINA;123456;
VRPDE;20210502;9412;110;58782,19;;42;
RPDE;
BRPDE;2;670;GB209531421;N;N;;TIÃO;;RUA 136;14;;;25;MIAMI 136;Inglaterra;123456;
VRPDE;20210502;9412;110;46266,63;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 137;15;;;26;MIAMI 137;CHINA;123456;
VRPDE;20210502;9412;110;42855,73;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 138;16;;;27;MIAMI 138;CHINA;123456;
VRPDE;20210502;9412;110;161517,14;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 139;17;;;28;MIAMI 139;CHINA;123456;
VRPDE;20210502;9412;110;283700,41;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 140;18;;;29;MIAMI 140;CHINA;123456;
VRPDE;20210502;9412;110;710213,04;;42;
RPDE;
BRPDE;2;255;45-2649521;N;N;;TIÃO;;RUA 141;19;;;30;MIAMI 141;FLORIDA;123456;
VRPDE;20210502;9412;110;402347,84;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 142;20;;;31;MIAMI 142;CHINA;123456;
VRPDE;20210502;9412;110;576787,02;;42;
RPDE;
BRPDE;2;255;45-2649521;N;N;;TIÃO;;RUA 143;21;;;32;MIAMI 143;FLORIDA;123456;
VRPDE;20210502;9412;110;1219217,8;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 144;22;;;33;MIAMI 144;CHINA;123456;
VRPDE;20210502;9412;110;112869,23;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 145;23;;;34;MIAMI 145;CHINA;123456;
VRPDE;20210502;9412;110;300238,83;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 146;24;;;35;MIAMI 146;CHINA;123456;
VRPDE;20210502;9412;110;456228,39;;42;
RPDE;
BRPDE;2;255;45-2649521;N;N;;TIÃO;;RUA 147;25;;;36;MIAMI 147;FLORIDA;123456;
VRPDE;20210502;9412;110;395379,71;;42;
RPDE;
BRPDE;2;255;45-2649521;N;N;;TIÃO;;RUA 148;26;;;37;MIAMI 148;FLORIDA;123456;
VRPDE;20210502;9412;110;573386,66;;42;;
RPDE;
BRPDE;2;255;45-2649521;N;N;;TIÃO;;RUA 149;27;;;38;MIAMI 149;FLORIDA;123456;
VRPDE;20210502;9412;110;1393498,69;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 150;28;;;39;MIAMI 150;CHINA;123456;
VRPDE;20210502;9412;110;205834,95;;42;
RPDE;
BRPDE;2;670;GB209531421;N;N;;TIÃO;;RUA 151;29;;;40;MIAMI 151;Inglaterra;123456;
VRPDE;20210502;9412;110;5567,67;;42;
RPDE;
BRPDE;2;255;45-2649521;N;N;;TIÃO;;RUA 152;30;;;41;MIAMI 152;FLORIDA;123456
VRPDE;20210502;9412;110;49902,93;;42;
RPDE;
BRPDE;2;163;91370202718032140E;N;N;;TIÃO;;RUA 153;31;;;42;MIAMI 153;CHINA;123456;
VRPDE;20210502;9412;110;55710,47;;42;
RPDE;
BRPDE;2;0;0;N;N;;0;;0;0;;;0;0;0;0;
VRPDE;0;9412;110;0;;42;
Você não está autorizado a ver ou baixar esse anexo.
#69130
Pegorini escreveu: 10 Fev 2022 às 12:40 Anexo apresento como gostaria que ficasse o resultado final.
Como você disponibilizou a planilha inteira convertida e não apenas algumas linhas, então me parece que você tem familiaridade em Salvar Como csv/txt.

E para alterar o delimitador de ponto e vírgula atual para pipe basta alterar na configuração regional do Windows.
Veja o caminho abaixo. Testaí. Se ainda assim você quiser uma solução via macro retorne, é facinho.

Windows | Painel de Controle | Relógio e Região | Região | Configurações adicionais... | na caixa Separador de lista substitua o ponto e vírgula pelo pipe | OK | OK
#69131
Oi Osvaldo

Eu sei gerar o arquivo csv em txt com delitador por vírgula e entendi sua explicação sobre a configuração para pipe, contudo se eu fizer manual o excel vai gerar delimitador pipe ou ponto e vírgula para 17 células em todas as linhas, entretanto em algumas linhas há apenas uma informação, então deveria gerar apenas um delimitador.

se a linha tiver 17 informações em células deve gerar 17 delimitadores, se 5, apenas 5 delimitadores.

No arquivo que apresentei está certinho, pois apaguei alguns delimitadores manualmente para apresentar como gostaria que ficasse.
#69141
Olá, @Pegorini .

Experimente o código abaixo.
Se necessário altere o Drive, o nome da MinhaPasta e do MeuArquivo.
Lembrando que este código poderá ser executado via chamada a partir do código que passei antes.
Código: Selecionar todos
Sub ExcelParaBlocoDeNotas()
 Dim i As Long, j As Long
 Open "C:\MinhaPasta\MeuArquivo.txt" For Output As #1
 With Sheets("Arquivo final")
  For i = 1 To .Cells(Rows.Count, 1).End(3).Row
   For j = 1 To .Cells(i, Columns.Count).End(1).Column - 1
    Print #1, .Cells(i, j).Text; "|";
   Next j
   Print #1, .Cells(i, .Cells(i, Columns.Count).End(1).Column) & "|"
  Next i
 End With
 Close #1
 MsgBox "CONCLUÍDO"
 End Sub

Boa tarde. Veja se era isso. Até Foxtri […]

Boa tarde, Pessoal preciso consultar os abastecim[…]

Filtro do Drill-through

Estou tendo um problema na aplicação[…]

Boa Tarde Prezado osvaldomp! Obrigado Pela Paci&e[…]

Fixar Fórmulas

Olá, @Maiquel . Uma possibilidade &eac[…]

ANTONIOTST, Bom Dia. Confere se é desta fo[…]

Boa noite, alguém poderia me ajudar como fa[…]

Vínculo tabela dinâmica

Olá, Tenho uma tabela com diversos dados, […]