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.
Por SandroLima
#37612
Boa noite, pessoal

Preciso novamente da ajuda de vocês.

Tenho um formulário através do qual pretendo alimentar os dados em duas tabelas: "CLIENTES" e "FORNECEDORES"

Tenho um código simples dos botões Cadastrar e Cancelar que precisava que fossem incrementados.

Preciso de ajuda para que os dados adicionados na tabela "CLIENTES" e na tabela "FORNECEDORES" depois sejam juntos e ordenados em uma terceira tabela chamada "CADASTRO GERAL" que me servirá como banco de dados.

Na planilha tenho outras observações que gostaria que fossem implementadas... se puderem dar uma olhada fiz as anotações em cada local a ser feita a implementação.

Agradeço muito se puderem ajudar.
Você não está autorizado a ver ou baixar esse anexo.
Por babdallas
#37619
Pode usar PowerQuery ou precisa ser via VBA?
Por SandroLima
#37622
Bom dia.

Aceito qualquer alternativa, pois sou um estudante e curioso em excel.

Mas minha experiência em Power Query é absolutamente zero... estou mais habituado ao VBA.

Muito obrigado pela disposição em ajudar.
Por babdallas
#37645
Veja se é o que deseja.
Você não está autorizado a ver ou baixar esse anexo.
Por SandroLima
#37647
Boa tarde, babdallas

Muito obrigado pela atenção. Vi que ficou por enquanto no 1º passo do processo... e já agradeço demais... já me deu uma luz.

É quase isso... preciso só de uma adaptação no módulo de classificação da tabela.
Fiz as observações na própria tabela.
Tentei replicar seu módulo também com as devidas alterações mas apresentou um erro que sinceramente não vi porque.
Também coloquei logo abaixo da tabela um modelo com o resultado esperado.

Já me foi dado uma grande ajuda. O seu código de cadastro ficou bem mais rápido que o meu anterior.
Na minha planilha definitiva os códigos da classificação estão dentro do próprio código do botão cadastrar.

O fato de vc ter criado um módulo é que deixou a execução mais rápida? Pq optou por criar o módulo?

Desculpe esse perguntar, perguntar... é que tenho muita vontade de aprender.
Você não está autorizado a ver ou baixar esse anexo.
Por babdallas
#37648
Sandro, criei um módulo ,de classificação dos dados para economizar código, já que este código é usado tanto no código de cadastrar Clientes quanto no código de cadastrar Fornecedores. Quanto a ser mais rápido, não analisei seu código anterior para comparar.

Fiz algumas alterações na classificação dos dados. Veja se agora atende a sua necessidade.

Quanto a juntar as tabelas em uma só, fiz no PowerQuery. Mas para funcionar você precisa ter o PowerQuery instalado. Se você possui Excel 2010 ou superior, basta baixar o suplemento PowerQuery da Microsoft e instalar. Caso tenha Office 2016 ou Office 365, o PowerQuery já se tornou nativo na guia Dados, grupo Obter e Transformar.
Agora se você possui Excel 2007 ou inferior, aí não vai funcionar mesmo, devendo ser feito no VBA.

Link parabaixar o Powerquery na versão 2010/2013:
https://www.microsoft.com/pt-BR/downloa ... x?id=39379
Você não está autorizado a ver ou baixar esse anexo.
Por SandroLima
#37653
Boa tarde, babdallas.

Ficou como eu queria agora.

Em relação à questão de juntar as tabelas em uma só com o Power Query, realmente ainda não tenho instalado mas vou deixar isso mais para frente... ainda estou aprendendo e uma coisa de cada vez.

De qualquer forma muito obrigado mesmo... me deu uma grande luz aqui na escrita de códigos.

Antes de finalizar o tópico gostaria só de tirar umas dúvidas:

Essa linha de comando:
Código: Selecionar todos
ClassificaDados lojTabela:=Tabela
1) Como ela poderia ser comentada para o meu aprendizado? Seria como ela renomeasse ou substituísse o lojTabela pela variável Tabela? (lojTabela foi atribuída a variável ListObjects no módulo ClassificaDados)
2) lojTabela... "loj" seria uma abreviação de que??? (gosto de entender, fazer a leitura do código na integra rsrs)

E o comando:
Código: Selecionar todos
For Each cControle In Me.Controls
        If TypeOf cControle Is MSForms.TextBox Then cControle = vbNullString
    Next cControle
1) Serve somente para TextBox? Pergunto pq ainda não testei ele na planilha que estou fazendo e lá tenho Combobox, OptionButton entre outas ferramentas.
2) cControle... "c" abreviação para??? (olha eu curioso de novo)

Grato demais pela ajuda :)
Por babdallas
#37667
Sandro,

loj é uma abreviação que usei para saber que é uma variável ListObject. A subrotina ClassificaDados tem um parâmetro chamado lojTabela, que é do tipo Listobject. Assim, quando chamo a subrotina, preciso passar este argumento para ela, que é a variável Tabela que criei no evento click do botão Cadastrar.

Controls é uma coleção de controle de formulário (Ex: listbox, textbox, combobox, etc). Então faço um loop pelos controles dos seu formulário. Se for do tipo Textbox (para isso uso o operador TypeOf), então apago o conteúdo do textbox. Assim reduzo o número de linhas de código.
O c da variável cControle (na verdade costumo usar ctr ==> abreviação de Control), é para eu saber que é uma variável de controle de userform.
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