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:

  1. 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.
  2. 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 ;).
  3. 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 com Date + 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:

  1. Cabeçalho com logo, data, nome do técnico, veículo, jornada estimada.
  2. Tabela de roteiro: colunas Seq, HoraEstimada, Endereco, Tipo, Prioridade, Obs.
  3. Mapa esquemático: retângulos representando a base e cada chamado, conectados por linhas retas coloridas por prioridade (vermelho=1, laranja=2, verde=3).
  4. 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:

  1. Exporte chamados reais do sistema de CRM.
  2. Execute o agendador em modo Debug.Print (sem gerar páginas).
  3. Compare TecnicoAlocado gerado vs. real histórico.
  4. 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

0 de 9 concluídos

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.