Ir ao conteúdo
  • Cadastre-se

Excel vba (TESTA TODAS POSSIBILIDADES)


Netrox92

Posts recomendados

Ola,

Preciso novamente da ajuda de vocês!

Estou construindo uma planilha para me ajudar a montar minha Grade de Aula na Facul... porém nao faço ideia de qual cod usar.

É o seguinte: Eu posso montar minha grade de aulas podendo assistir cada matéria com alguma turma.

Ex:

Matematica I - Turma A

Sociologia - Turma B

Filosofia - Turma C

assim por diante.

porém quando estou montando minha grade, as vezes as materias entram em conflito, me obrigando a deixar de lado alguma(s) matéria(s).

Eu gostaria de saber algum cód que testa TODAS POSSIBILIDADES de grade, e gravando na "Plan2" somente aquelas grades, onde TODAS MATERIAS estejam presentes.

OBS: Se eu escolher fazer alguma matéria que tenha 2 aulas por semana, as 2 aulas devem ser assistidas na MESMA TURMA!

Ex:

Matemática I = TURMA B

Segunda-feira = 2ª aula- TURMA B

Quinta-Feira = 1ª aula - TURMA B

Minha ideia é o seguinte:

As grades de TODAS TURMAS estão preenchidas na parte de baixo da minha planilha, podendo ter até 20 turmas diferentes.

na parte superior da minha planilha estão escritas as matérias QUE EU PRECISO FAZER!

do lado direito das matérias que eu preciso fazer, tem uma grade de aula, onde será testado os horarios das matérias que eu tenho.

Caso todas matérias estejam presentes no horario feito, esse horario é copiado para "Plan2", e é testado um novo horario. Isso seria feito até todas possibilidades de Grade de Aula serem testadas.

Segue abaixo um exemplo da planilha:

http://www.4shared.com/file/5SA9lHi7/NOVA_GRADE.html?

http://www.sendspace.com/file/2fb0ta

Obrigado,

Abraços

Link para o comentário
Compartilhar em outros sites

Não sei se fui bem claro, portanto estou complementando aqui.

Conforme a planilha que coloquei a disposição:

Seria mais ou menos assim a rotina:

Ao escolher que a minha 1ª AULA na Segunda-feira é Microeconomia-TURMA B

OBRIGATORIAMENTE ( por se tratar de uma materia que tenho 2 aulas por semana)

A minha segunda aula de Microeconomia vai ser na TURMA B. Sendo essa na 2ª AULA na Terça-feira

Sendo assim, NÃO POSSO mais escolher nenhuma materia que as aulas sejam na Segunda-feira (1ª aula)

nem na Terça-feira (2ª aula)

Conforme vai fazendo isso, chega uma hora, que a minha grade está quase lotada, faltando apenas algumas matérias.

porém os horarios dessas matérias que faltam ser incluidas acabam entrando em conflito com as que já estão inclusas.(me obrigando a não faze-la nesse semestre)

Minha intenção é eu visualizar TODAS GRADES onde TODAS MATÉRIAS estejam inclusas. (para que eu não precise deixar nenhuma matéria para ser feita depois, podendo escolher aquela que seja melhor para mim)

E aquelas grades onde os horarios entram em conflito NÃO PRECISAM ser visualizadas.

Espero ter sido mais claro.

Caso tenha ficado alguma duvida, por favor me avise!

Obrigado mais uma vez!

Abraços

Link para o comentário
Compartilhar em outros sites

Olá Netrox.

Podemos sim te ajudar, pois seu problema é simples porém a solução se torna longa.

Você já programa em VBA?

Vamos começar do início? Faça perguntas mais objetivas! Tente desenvolver o código e postar seus erros e acertos, assim você aprende e nos ajuda a te ajudar.

Acho que voce precisa primeiramente declarar constantes para carregar o total de aulas que você precisa.

Ex:


Option Explicit

Const SociologiaGeral = 3
[Etc...]

Depois da uma olhada aqui mesmo nos outros tópicos, alguns exemplo de loop.

Veja isso:

http://www.juliobattisti.com.br/artigos/office/vba_access_p9.asp

Ficando no aguardo dos exemplos dos seus erros e/ou acertos,

Leno Mota.

Link para o comentário
Compartilhar em outros sites

Ola leno mota,

Muito obrigado pela resposta!

Eu sei programar em VBA, porém sei muito pouco, pois aprendi sozinho com o auxilio de vocês aqui do forum. porém quando se trata de loop eu nao sei praticamente nada.

porém estou lendo o link que voce me passou.

Eu fiz algumas alterações na planilha pra ver se melhora na construção do cod.

Os horarios que a facul disponibiliza, está organizado por matéria.

Nas colunas dos dias da semana os horarios estão organizados por 3 números (n° 1, n°2 e n°3)

n°1 equivale a 1ª aula referente aquele dia da semana

n°2 equivale a 2ª aula

n°3 equivale a 3ª aula

Eu tenho apenas 3 aulas por dia.

Adicionei tambem uma coluna onde fala a quantidade de vezes por semana que eu tenho em cada materia. (acredito que era isso que voce quis dizer com declarar constantes para carregar o total de aulas)

Bom, é o seguinte, sinceramente eu nao faço ideia de qual cod começar usando, porém eu sei mais ou menos como vai ter que funcionar.

Como eu vou ter que testar todas as possibilidades, acredito que o primeiro teste começe com todas as matérias da TURMA A

Sociologia Geral -------------------- TURMA A

Comunicação e Expressão --------- TURMA A

Filosofia ----------------------------- TURMA A

Matemática I ------------------------ TURMA A

Teoria Básica da Administração----- TURMA A

Microeconomia ---------------------- TURMA A

NESSE CASO, nenhuma matéria entra em conflito, pois está todas na TURMA A

Depois o segundo teste seria:

Sociologia Geral -------------------- TURMA B

Comunicação e Expressão --------- TURMA A

Filosofia ----------------------------- TURMA A

Matemática I ------------------------ TURMA A

Teoria Básica da Administração----- TURMA A

Microeconomia ---------------------- TURMA A

O terceiro seria:

Sociologia Geral -------------------- TURMA A

Comunicação e Expressão --------- TURMA B

Filosofia ----------------------------- TURMA A

Matemática I ------------------------ TURMA A

Teoria Básica da Administração----- TURMA A

Microeconomia ---------------------- TURMA A

O quarto teste seria:

Sociologia Geral -------------------- TURMA A

Comunicação e Expressão --------- TURMA A

Filosofia ----------------------------- TURMA B

Matemática I ------------------------ TURMA A

Teoria Básica da Administração----- TURMA A

Microeconomia ---------------------- TURMA A

E assim por diante, até efetuar todos os testes possiveis.

Não sei se isso ajudou muito, mas se ja der para descobrir qual cod. começar usando ja ajuda.

Eu adicionei um outro botão la na planilha, com outro exemplo. (o cód está só exemplificando, pois nao sei como começar mesmo.) :wacko:

Segue abaixo planilha nova:

http://www.4shared.com/file/wS2kE-3p/NOVA_GRADE_2.html?

http://www.sendspace.com/file/rbos2i

OBS: No exemplo que está na planilha, parei no teste 2 porque to no trabalho e tenho que ir para a casa. Caso ache necessário eu coloco mais testes.

Obrigado mais uma vez

Abraços

Link para o comentário
Compartilhar em outros sites

Somente mais uma pergunta. Quantas vezes voce vai precisar usar esse código?

Vamos fazer uma análise lógica.

O loop é uma repetição que acontece "n" vezes.

Quantas vezes voce quer que o código seja repetido?

Até que alguma carga horária seja atingida? Que as alguma célula seja "atingida"?

No aguardo,

Leno Mota

Link para o comentário
Compartilhar em outros sites

Ola,

então, eu deixei espaço para 10 grades de horarios que a facul disponibiliza.

No caso desse exemplo, eu só preenchi 3 das 10 grades. (pois esse semestre só disponibilizaram 3) mas no proximo o número vai no minimo dobrar.

o Loop aconteceria até testar todas as possibilidades. No caso do meu exemplo, ele aconteceria até testar todas possibilidades de grade misturando os horarios da TURMA A, TURMA B e TURMA C.

podendo ficar até assim:

Sociologia Geral -------------------- TURMA B

Comunicação e Expressão --------- TURMA A

Filosofia ----------------------------- TURMA C

Matemática I ------------------------ TURMA A

Teoria Básica da Administração----- TURMA C

Microeconomia ---------------------- TURMA B

Como tem espaço para 10 grades, cada grade que a facul disponibiliza PODE TER até 11 matérias. São 111 matérias (porém as matérias podem ou não se repitir)

no caso do exemplo que coloquei, nas 3 grades, as matérias se repetem.

porém o número total de testes que deve ser feito eu nao sei, tentei fazer uma conta aqui mas acho que fiz a conta errada pois deu um número absurdo.

Vou até colocar aqui, mas nao precisa nem considerar. (3.943.664.897.925.675,52)

Estou tentando descobrir que conta faz para obter esse número.

a conta acima eu fiz utilizando formula de combinação simples

não sei se era essa informação que voce queria.

Obrigado mais uma vez, e desculpe caso eu não esteja conseguindo entender.

Abraços

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!