Agendador noturno de equipes de desentupimento na capital paulista com VBA
Automatize o agendamento noturno de equipes de desentupimento em São Paulo usando VBA no CorelDRAW. Reduza erros, ganhe tempo e organize escalas com eficiência.
Imagine a cena: são 22h30, a central de chamados de uma empresa de desentupimento na zona leste de São Paulo recebe 37 solicitações para o dia seguinte. O coordenador abre uma planilha com abas coloridas, tenta encaixar técnicos por região, prioridade e tipo de equipamento, mas percebe que dois profissionais estão de folga, um veículo está na manutenção e três chamados são emergenciais. O resultado? Uma escala frágil, impressa às pressas, que vai gerar retrabalho às 6h da manhã.
Essa rotina caótica é realidade para muitas operações que ainda dependem de processos manuais ou semi-automatizados. A boa notícia é que o CorelDRAW, ferramenta já presente no setor gráfico e de sinalização, pode se tornar o motor de um agendador noturno robusto, visual e integrado — tudo via VBA.
Neste artigo, você verá como transformar o CorelDRAW em uma central de despacho noturno, desde a estrutura de dados até a geração de PDFs prontos para a equipe de campo, passando por validações de jornada, conflitos de rota e contingências de última hora.
Estrutura de dados: a fundação do agendador
Antes de escrever uma linha de código, o segredo está na planilha fonte. Crie um arquivo Excel (ou CSV) com as seguintes abas padronizadas:
- Chamados — colunas:
ID,EnderecoCompleto,Bairro,CEP,TipoServico(hidrojateamento, desentupimento simples, caixa de gordura, caça-vazamento),Prioridade(1=emergência, 2=urgente, 3=programado),Status(aberto, agendado, em_andamento, concluido),DataSolicitacao,JanelaPreferencial. - Tecnicos — colunas:
Matricula,Nome,Habilidades(lista separada por;),Veiculo(próprio/empresa/placa),RegiaoBase(zona norte, sul, leste, oeste, centro),JornadaMaxMinutos,Folgas(datas separadas por;). - Parametros — linhas-chave:
TempoMedioAtendimentoMin,TempoDeslocamentoPadraoMin,MargemSegurancaMin,HoraInicioNoturno,HoraFimNoturno,MaxChamadosPorTecnico.
Essa padronização permite que o VBA leia tudo via ADO (Provider=Microsoft.ACE.OLEDB.12.0) sem abrir o Excel, ganhando velocidade e estabilidade. O mesmo arquivo serve de entrada e saída: a macro escreve na aba Chamados a coluna TecnicoAlocado e SequenciaRota.
Formulário no CorelDRAW: interface do coordenador
No CorelDRAW, crie um UserForm chamado frmAgendadorNoturno com os seguintes controles:
txtCaminhoPlanilha(TextBox) +btnProcurar(CommandButton) para selecionar o arquivo.cmbDataAlvo(ComboBox) preenchido automaticamente comDate + 1(próximo dia útil).chkIncluirEmergencias,chkRespeitarFolgas,chkOtimizarRota(CheckBox) para regras de negócio.lstLog(ListBox) para mostrar passos da execução em tempo real.btnExecutar,btnCancelar,btnExportarPDF.
O código do btnExecutar_Click chama a rotina principal ProcessarAgendamentoNoturno(caminhoPlanilha, dataAlvo, opcoes). O segredo da usabilidade está em desabilitar controles durante a execução e usar DoEvents para manter a interface responsiva, escrevendo no lstLog a cada 50 registros processados.
Algoritmo de alocação: guloso com backtracking leve
O coração do sistema é a função AlocarChamadosTecnicos(chamados, tecnicos, parametros). O pseudocódigo:
Function AlocarChamadosTecnicos(ByRef chamados As Collection, ByRef tecnicos As Collection, params As Parametros) As Boolean
' Ordena chamados por prioridade (1 primeiro) e proximidade da base do técnico
Call OrdenarPorPrioridadeEProximidade(chamados, tecnicos)
Dim i As Long, j As Long, alocado As Boolean
For i = 1 To chamados.Count
alocado = False
For j = 1 To tecnicos.Count
If TecnicoPodeAtender(tecnicos(j), chamados(i), params) Then
If TentarInserirNaRota(tecnicos(j), chamados(i), params) Then
chamados(i).TecnicoAlocado = tecnicos(j).Matricula
alocado = True
Exit For
End If
End If
Next j
If Not alocado Then
' Backtracking leve: tenta realocar um chamado de menor prioridade já alocado
If Not TentarRealocarMenorPrioridade(chamados, tecnicos, i, params) Then
RegistrarNaoAlocado chamados(i)
End If
End If
Next i
AlocarChamadosTecnicos = True
End Function
A função TecnicoPodeAtender verifica: habilidade compatível, folga na data, jornada não estourada (soma de TempoMedioAtendimento + Deslocamento ≤ JornadaMaxMinutos), veículo disponível. TentarInserirNaRota usa heurística de vizinho mais próximo para manter a rota coesa.
Geração visual no CorelDRAW: escalas que a equipe entende
Após a alocação, a macro cria uma nova página por técnico no documento ativo:
- Cabeçalho com logo, data, nome do técnico, veículo, jornada estimada.
- Tabela de roteiro: colunas
Seq,HoraEstimada,Endereco,Tipo,Prioridade,Obs. - Mapa esquemático: retângulos representando a base e cada chamado, conectados por linhas retas coloridas por prioridade (vermelho=1, laranja=2, verde=3).
- Legenda fixa no rodapé.
O código usa ActiveDocument.Pages.Add, CreateTable, CreateRectangle, CreateCurve e TextRange.InsertAfter. Cores são definidas via CreateCMYKColor. O resultado é um documento .cdr que pode ser salvo como PDF multipágina com ExportEx (cdrPDF, cdrAllPages).
Contingências: emergências após o fechamento da escala
A realidade impõe mudanças. Para isso, o formulário tem o botão btnReprocessarParcial. Ele lê apenas os chamados com Status = "aberto" e DataSolicitacao > DataFechamentoAnterior, roda a alocação apenas para eles preservando TecnicoAlocado dos já definidos, e insere nas rotas nos melhores espaços (menor acréscimo de deslocamento). Se não houver espaço, marca Status = "pendente_reagendamento" e dispara e-mail via CDO.Message para o coordenador.
Essa abordagem evita refazer tudo e mantém a rastreabilidade. O log de alterações fica em aba HistoricoAlocacoes com colunas DataHora, ChamadoID, Acao (alocado, realocado, pendente), TecnicoAntigo, TecnicoNovo, Motivo.
Integração com rotinas existentes e automação total
O agendador noturno não vive isolado. Ele se conecta a outros fluxos já documentados aqui no blog: o alerta automático para escalonamento de equipes 24 horas na Grande São Paulo que monitora SLA de resposta, a automação no CorelDRAW que melhora fluxo de atendimento no Bom Retiro para geração de ordens de serviço gráficas, e o dashboard de tempo de resposta para emergências de esgoto vasos e pias que consome os dados de HistoricoAlocacoes.
Para rodar sozinho todas as noites, crie uma tarefa no Agendador de Tarefas do Windows:
- Programa:
"C:\Program Files\Corel\CorelDRAW Graphics Suite X8\Programs64\CorelDRW.exe" - Argumentos:
"C:\Automacao\AgendadorNoturno.cdr" /automation "RunAgendadorNoturno" - Horário: 22h00, apenas dias úteis.
A macro RunAgendadorNoturno (em módulo padrão) abre o formulário, preenche txtCaminhoPlanilha com caminho fixo da rede, define cmbDataAlvo = DateAdd("d", 1, Date) pulando finais de semana, marca todos os checkboxes e executa btnExecutar_Click programaticamente, salvando o PDF em \\servidor\escalas\YYYY-MM-DD_EscalaNoturna.pdf.
Validação de campo: teste real antes de confiar
Antes de colocar em produção, rode uma simulação com dados dos últimos 30 dias:
- Exporte chamados reais do sistema de CRM.
- Execute o agendador em modo
Debug.Print(sem gerar páginas). - Compare
TecnicoAlocadogerado vs. real histórico. - Métricas alvo: ≥ 92% chamados alocados, ≤ 8% tempo ocioso, zero violação de jornada.
Ajuste pesos em Parametros até atingir as metas. Documente cada versão do arquivo de parâmetros com data e responsável.
Com o agendador noturno rodando, a equipe chega às 6h com a escala no celular, rotas otimizadas, prioridades claras e zero improvisação. O CorelDRAW deixa de ser apenas ferramenta de arte-final e passa a ser peça-chave da operação logística. Para aprofundar a integração com atendimento de emergência, veja também como desentupir cano de esgoto em São Paulo e região.
Pronto para implementar? Baixe o template base no repositório do Bonus630, adapte as colunas ao seu CRM e agende a primeira execução para esta noite. O ganho de controle e a redução de chamados perdidos aparecem na primeira semana.
Checklist prático
Perguntas frequentes
Como o VBA no CorelDRAW pode ajudar no agendamento de equipes externas?
O VBA permite criar formulários e rotinas que leem planilhas de chamados, cruzam disponibilidade de técnicos e geram escalas visuais diretamente no CorelDRAW, eliminando planilhas manuais e reduzindo conflitos de horário.
É possível integrar o agendador com planilhas Excel ou bancos de dados?
Sim. O VBA acessa arquivos Excel via ADO ou automação OLE, lendo dados de chamados, endereços e status, e escreve de volta as escalas definidas, mantendo tudo sincronizado sem sair do ambiente gráfico.
O agendador noturno funciona para plantões 24 horas e feriados?
A lógica de programação contempla regras de negócio para turnos noturnos, finais de semana e feriados, aplicando pesos de prioridade e restrições de jornada conforme a legislação e acordos internos.
Preciso de conhecimento avançado em programação para implementar?
O tutorial apresenta o código modularizado e comentado. Conhecimentos básicos de VBA e CorelDRAW são suficientes para adaptar variáveis, ranges e regras de alocação à sua realidade operacional.
Como garantir que a escala gerada seja visualmente clara para a equipe?
O script cria objetos gráficos no CorelDRAW — retângulos coloridos por turno, textos com nomes e endereços, conectores entre bases e pontos de atendimento —, permitindo exportar PDF pronto para impressão ou WhatsApp.
O que fazer se houver chamado de emergência após o agendamento noturno?
O sistema prevê botão de reexecução parcial: basta inserir a nova ocorrência na planilha fonte e rodar a macro novamente; ela preserva alocações já feitas e insere o urgente no melhor encaixe disponível.