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 dgomedeiros
Posts
#6310
Boa noite!

Pessoal, estou aprendendo agora a mexer no VBA e estou apanhando bastante! Gostaria da ajuda de vocês com um programa que estou fazendo.

O que eu preciso fazer é o seguinte:
Criar uma combobox (cmd_responsavel) que surge a partir dos resultados de uma busca (em todas as colunas da primeira linha de uma pasta de trabalho) pelo valor igual ao de uma combobox (cmb_servico) e quando achar o valor igual ele tem que me trazer todos os valores daquela mesma coluna, porém a partir da linha 5, por exemplo.

Exemplificado...
Há uma planilha com um monte de serviços na primeira linha (LIMPEZA, ARRUMAÇÃO ARMÁRIOS, BANHEIRO, ETC.) estes são os serviços. Abaixo deles tem uma série de nomes (JOAO, PAULO, PEDRO, IGOR, ETC.), mas da 5ª linha em diante.
Então, digamos que na cmb_serviço esteja o nome LIMPEZA e que este nome esteja na célula J1 da pasta de trabalho, daí ele deve identificar o nome LIMPEZA na célula J1, mas só vai trazer pra a cmb_responsavel o que estiver na J5 pra baixo até encontrar uma célula vazia.

Entenderam??

Conto com a ajuda de vocês.
Você não está autorizado a ver ou baixar esse anexo.
Editado pela última vez por dgomedeiros em 12 Jan 2016 às 14:08, em um total de 1 vez.
Por mkenji
Posts
#6312
Bom dia, dgomedeiros!

Primeiro, por experiência própria, eu colocaria sua listagem na vertical: transformaria sua primeira linha em coluna e sua quinta linha em coluna também (seu J5 seria E8).

Nas propriedades do ComboBox existe o 'RowSource'. Você preenche este campo, por exemplo, 'Plan1!A1:A8' e ele carrega os dados desse Range ao rodar o VBA. Mas na horizontal o ComboBox carrega apelas o primeiro dado, o que torna inviável de usar esse recurso com lista na horizontal.

Acho que já é um bom começo :)
Avatar do usuário
Por Reinaldo
Avatar
#6321
Segue uma possibilidade, veja se consegue adaptar a sua realidade
Você não está autorizado a ver ou baixar esse anexo.
Por dgomedeiros
Posts
#6324
Bom dia!

mkenji, não tem como eu colocar na vertical, pois são várias planilhas diferentes que ele tem que buscar esses valores. Na opção limpeza, por exemplo, cada responsável tem dias e horas para executar tal tarefa, o mesmo ocorre para os outros serviços, ou seja, eu tenho pelo menos 14 planilhas dentro de uma pasta de trabalho.

Reinaldo, ainda estou olhando seu código para ver se consigo tirar alguma coisa dele, pois tem algumas funções lógicas que eu não conhecia, mas acredito que seu raciocínio foi o mesmo do mkenji.
Por mkenji
Posts
#6329
Muito boa a solução do Reinaldo.

Para o seu caso dgomedeiros, poderia usar o mesmo código mas trocando as linhas pelas colunas do código mostrado.

Exemplo:

' Do While .Cells(C, lColCidade) <> ""
cboCidades.AddItem .Cells(C, lColCidade).Value
C = C + 1
Loop '

para

' Do While .Cells( lColCidade,C) <> ""
cboCidades.AddItem .Cells(lColCidade, C).Value
C = C + 1
Loop'


Claro que há necessidade de mais algumas adaptações. Mas desse modo, a varredura do laço será na horizontal!
Avatar do usuário
Por Reinaldo
Avatar
#6330
Creio que há uma discrepância entre meu entendimento e o do colega Kenji vs seu ultimo post
"não tem como eu colocar na vertical, pois são várias planilhas diferentes que ele tem que buscar esses valores".
A proposta procura somente em uma unica planilha. Caso não consiga adaptar a sua realidade disponibilize o modelo de sua planilha, bem como informando manualmente como e e como gostaria que fosse
Por dgomedeiros
Posts
#6336
Reinaldo anexei a planilha exemplo na mensagem original. Fiz o código para ela da seguinte maneira...

Private Sub UserForm_Initialize()

Dim coluna As Long
coluna = 1
With Sheets("Plan1").Range("A:Z")
Do While .Cells(1, coluna) <> ""
ComboBox1.AddItem .Cells(1, coluna).Value
coluna = coluna + 1
Loop
End With

End Sub

Está retornando apenas o valor limpeza, que é aquele que está na A1.
Por mkenji
Posts
#6339
Você está com a referência na primeira linha. Utilize esse:


Private Sub UserForm_Initialize()

Dim coluna As Long
coluna = 1
With Sheets("Plan1").Range("A:Z")
Do While .Cells(2, coluna) <> ""
ComboBox1.AddItem .Cells(2, coluna).Value
coluna = coluna + 1
Loop
End With

End Sub
Por dgomedeiros
Posts
#6354
Pessoal estive olhando e mesmo com o sub que me encaminhou ele ainda não puxa todas as células, fui pesquisar a fundo e vi uma coisa relacionada com a função COLUMN COUNT. Como que eu faço para configurar ela para puxar tudo.
Tive também um problema em uma listbox que não puxa duas colunas.
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