Rotina para calcular frequência ideal de manutenção hidráulica em edifícios com VBA
Aprenda a criar rotinas VBA no CorelDRAW para calcular a frequência ideal de manutenção hidráulica predial. Automatize planilhas e evite paradas.
Como transformar o histórico caótico de vazamentos e entupimentos em um cronograma confiável de manutenção preventiva sem depender de planilhas manuais que ninguém atualiza?
A resposta está em automatizar o cálculo da frequência ideal usando VBA no CorelDRAW. Ao cruzar dados de ocorrências, características construtivas e criticidade de cada trecho da rede, a rotina gera relatórios visuais prontos para apresentação em assembleias ou para o plano de manutenção da administradora. O ganho imediato é a redução de chamados de emergência e a previsibilidade de custos.
Muitos gestores de facilities e síndicos profissionais já usam o CorelDRAW para criar plantas humanizadas e sinalização predial. Estender esse ambiente para processar dados técnicos elimina a troca de arquivos entre softwares e mantém a informação visual e técnica no mesmo ecossistema.
Por que calcular a frequência com VBA no CorelDRAW
O CorelDRAW possui um modelo de objetos robusto (Application, Document, Page, Shape, TextRange) e o VBA nativo acessa bibliotecas externas como ADODB para ler Excel, Access ou CSV. Isso permite:
- Ler a planilha de ocorrências mantida pela portaria ou pela empresa de manutenção.
- Aplicar fórmulas de engenharia de confiabilidade (MTBF ajustado por criticidade).
- Gerar shapes coloridos na planta do edifício indicando prioridade (vermelho = inspecionar já, amarelo = próximo mês, verde = ok).
- Exportar PDF do cronograma ou atualizar uma página mestra de controle.
A alternativa manual — filtrar no Excel, calcular fórmulas, colorir células, copiar para o CorelDRAW — consome horas todo mês e introduz erros de transcrição. A macro executa em segundos.
Estrutura de dados necessária
Antes de codificar, organize as fontes. A tabela a seguir resume os campos mínimos que a rotina espera encontrar na planilha “Ocorrencias.xlsx” (aba “Dados”):
| Coluna | Tipo | Descrição |
|---|---|---|
| ID_Ocorrencia | Texto | Chave única (ex: OC-2024-001) |
| Data | Data | Data do evento |
| Tipo | Texto | Vazamento, Entupimento, Ruído, Baixa Pressão |
| Bloco | Texto | A, B, C ou Torre Única |
| Andar | Inteiro | Número do andar |
| Unidade | Texto | Apartamento ou sala |
| Tubulacao | Texto | Alimentação, Esgoto, Pluvial, Recalque |
| Material | Texto | PVC, Ferro Galvanizado, Cobre, PEX |
| Diametro_mm | Inteiro | Diâmetro nominal |
| Ano_Instalacao | Inteiro | Ano da instalação original |
| Criticidade | Inteiro | 1=Baixa, 2=Média, 3=Alta, 4=Crítica |
| Custo_Emergencial | Moeda | Gasto real com reparo de urgência |
| Tempo_Parada_Horas | Numérico | Tempo que a unidade/bloco ficou sem água |
Além disso, mantenha uma aba “Cadastro_Trechos” com um registro por trecho de tubulação (chave: Bloco+Andar+Tubulacao) contendo comprimento, número de juntas, acessibilidade e última inspeção.
Passo a passo da rotina VBA
- Abrir conexão ADO com a planilha usando string de conexão
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Facilities\Ocorrencias.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES"; - Carregar ocorrências dos últimos 24 meses em um Recordset filtrado por
Data >= DateAdd("m", -24, Date). - Agrupar por trecho (Bloco, Andar, Tubulacao) calculando: contagem de eventos, MTBF médio (dias entre eventos), custo total emergencial, tempo total de parada.
- Ler cadastro de trechos e fazer join em memória (Dictionary/Collection) para enriquecer com idade, material, diâmetro, acessibilidade.
- Aplicar fórmula de frequência sugerida (dias):
Fator_Idade = (Year(Date) - Ano_Instalacao) / Vida_Util_Estimada_Material Fator_Historico = 1 / (MTBF + 1) ' +1 evita divisão por zero Fator_Criticidade = Criticidade / 4 Frequencia_Base = 365 ' anual Frequencia_Sugerida = Round(Frequencia_Base / (1 + Fator_Idade + Fator_Historico + Fator_Criticidade)) If Frequencia_Sugerida < 30 Then Frequencia_Sugerida = 30 ' piso mensal If Frequencia_Sugerida > 730 Then Frequencia_Sugerida = 730 ' teto bienal - Gravar resultado na aba “Cronograma” (Trecho, Proxima_Inspecao = Date + Frequencia_Sugerida, Prioridade, Observacoes).
- Atualizar visual no CorelDRAW: abrir o documento “Planta_Edificio.cdr”, localizar shapes nomeados com o padrão
TRECHO_Bloco_Andar_Tubulacao, alterarFill.UniformColorconforme prioridade (RGB: Crítico=255,0,0; Alto=255,165,0; Médio=255,255,0; Baixo=0,200,0). - Atualizar caixas de texto na página “Resumo” com totais por prioridade e data de geração.
- Exportar PDF em
C:\Facilities\Relatorios\Cronograma_Manutencao_YYYYMMDD.pdf. - Registrar log de execução em arquivo texto para auditoria.
Exemplo de código principal
Sub GerarCronogramaManutencao()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim dictTrechos As New Scripting.Dictionary
Dim doc As CorelDRAW.Document
Dim shp As CorelDRAW.Shape
Dim sql As String, chave As String
Dim freqSugerida As Long, prioridade As String
' 1. Conexão
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Facilities\Ocorrencias.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=YES\";"
' 2. Ocorrências 24 meses
sql = "SELECT Bloco, Andar, Tubulacao, Count(*) as Qtde, " _
& "Avg(DateDiff('d', Data, (SELECT MIN(Data) FROM [Dados$] d2 " _
& "WHERE d2.Bloco=[Dados$].Bloco AND d2.Andar=[Dados$].Andar " _
& "AND d2.Tubulacao=[Dados$].Tubulacao AND d2.Data > [Dados$].Data))) as MTBF_Medio, " _
& "Sum(Custo_Emergencial) as Custo_Total, Sum(Tempo_Parada_Horas) as Parada_Total " _
& "FROM [Dados$] WHERE Data >= DateAdd('m', -24, Date()) " _
& "GROUP BY Bloco, Andar, Tubulacao"
rs.Open sql, conn, adOpenStatic, adLockReadOnly
' 3. Carregar cadastro de trechos
Dim rsCad As New ADODB.Recordset
rsCad.Open "SELECT * FROM [Cadastro_Trechos$]", conn, adOpenStatic, adLockReadOnly
Do Until rsCad.EOF
chave = rsCad("Bloco") & "_" & rsCad("Andar") & "_" & rsCad("Tubulacao")
dictTrechos.Add chave, Array(rsCad("Material"), rsCad("Diametro_mm"), _
rsCad("Ano_Instalacao"), rsCad("Criticidade"), rsCad("Vida_Util"), _
rsCad("Acessibilidade"), rsCad("Ultima_Insp"))
rsCad.MoveNext
Loop
rsCad.Close
' 4. Processar cada trecho com histórico
Dim arrTrecho As Variant
Dim vidaUtil As Long, idade As Long, fatorIdade As Double, fatorHist As Double, fatorCrit As Double
Dim mtbf As Double, criticidade As Long
Do Until rs.EOF
chave = rs("Bloco") & "_" & rs("Andar") & "_" & rs("Tubulacao")
If dictTrechos.Exists(chave) Then
arrTrecho = dictTrechos(chave)
vidaUtil = arrTrecho(4)
idade = Year(Date) - arrTrecho(2)
fatorIdade = idade / vidaUtil
mtbf = IIf(IsNull(rs("MTBF_Medio")), 999, rs("MTBF_Medio"))
fatorHist = 1 / (mtbf + 1)
criticidade = arrTrecho(3)
fatorCrit = criticidade / 4
freqSugerida = Round(365 / (1 + fatorIdade + fatorHist + fatorCrit))
If freqSugerida < 30 Then freqSugerida = 30
If freqSugerida > 730 Then freqSugerida = 730
' Gravar no Excel (aba Cronograma) - omitido por brevidade
' 5. Atualizar visual no CorelDRAW
Set doc = CorelDRAW.Application.Documents.Open("C:\Facilities\Planta_Edificio.cdr")
On Error Resume Next
Set shp = doc.Pages("Planta").Shapes("TRECHO_" & Replace(chave, "_", "_"))
On Error GoTo 0
If Not shp Is Nothing Then
Select Case True
Case freqSugerida <= 60: shp.Fill.UniformColor.RGBAssign 255, 0, 0: prioridade = "Crítica"
Case freqSugerida <= 120: shp.Fill.UniformColor.RGBAssign 255, 165, 0: prioridade = "Alta"
Case freqSugerida <= 270: shp.Fill.UniformColor.RGBAssign 255, 255, 0: prioridade = "Média"
Case Else: shp.Fill.UniformColor.RGBAssign 0, 200, 0: prioridade = "Baixa"
End Select
shp.Name = "TRECHO_" & chave & "_" & Format(Date, "yyyymmdd")
End If
doc.Save
doc.Close
End If
rs.MoveNext
Loop
rs.Close
conn.Close
' 6. Atualizar resumo e exportar PDF (código omitido)
MsgBox "Cronograma gerado com sucesso!", vbInformation
End Sub
Integração com fluxo de trabalho da administradora
A rotina não substitui o julgamento do engenheiro ou do síndico; ela fornece base quantitativa. O fluxo recomendado:
- Mensal: macro roda automaticamente (agendador do Windows) às 06h do primeiro dia útil.
- Validação: zelador recebe PDF por e-mail, confere in loco trechos “Críticos” e “Altos”, anota observações na planilha (aba “Validacao”).
- Ajuste: engenheiro revisa pesos da fórmula trimestralmente (ex: aumentar peso de criticidade se houver muitos falsos positivos).
- Assembleia: página “Resumo” do CorelDRAW vira slide da apresentação de prestação de contas.
Essa integração foi detalhada no artigo sobre automação no CorelDRAW melhora fluxo de atendimento no Bom Retiro, onde mostramos como padronizar templates visuais para diferentes stakeholders.
Armadilhas comuns e como evitá-las
- Dados sujos: ocorrências duplicadas, datas futuras, trechos sem cadastro. Solução: rotina de limpeza (
DELETE FROM [Dados$] WHERE ID_Ocorrencia IN (SELECT ID_Ocorrencia FROM ... GROUP BY ... HAVING COUNT(*) > 1)) antes do cálculo. - Vida útil errada: usar tabela genérica de fabricante sem considerar água agressiva ou obra mal executada. Solução: calibrar
Vida_Utilpor bloco comparando idade real vs. primeira ocorrência grave. - Criticidade subjetiva: cada técnico classifica diferente. Solução: matriz de decisão objetiva (ex: Criticidade 4 = atinge mais de 4 unidades OU risco de contaminação OU parada de elevador).
- Macro quebrada após atualização do Office: referências ADO/Scripting Runtime falham. Solução: usar Late Binding (
CreateObject("ADODB.Connection")) e checarErr.Numberem cada bloco.
Escalando para múltiplos edifícios
Quando a administradora gerencia dezenas de condomínios, a estrutura muda pouco:
- Adicionar campo
Condominio_IDem todas as tabelas. - Loop externo na macro iterando sobre lista de condomínios ativos.
- Um documento CorelDRAW mestre por condomínio (padrão de nome:
Planta_[Condominio_ID].cdr). - Consolidar relatórios em um dashboard único (Power BI ou outra aba Excel) para visão de portfólio.
O artigo automação VBA aplicada à criação de ativos visuais para projetos mostra como parametrizar templates para geração em lote, técnica diretamente aplicável aqui.
Conclusão prática
Automatizar o cálculo da frequência de manutenção hidráulica com VBA no CorelDRAW transforma dados dispersos em decisões visuais rastreáveis. Comece com um bloco-piloto, valide os pesos da fórmula com a equipe de campo e evolua para o portfólio completo. O investimento em horas de programação retorna em poucas semanas na forma de menos emergências, custos previsíveis e relatórios prontos para assembleia. Para suporte especializado em emergências hidráulicas, conte com a Dez Jato equipe de plantão São Paulo.
Checklist prático
Perguntas frequentes
Como o VBA no CorelDRAW ajuda a calcular a frequência de manutenção hidráulica?
O VBA permite criar macros que leem dados de planilhas ou bancos de dados com o histórico de ocorrências, aplicam fórmulas de confiabilidade (como MTBF/MTTR) e geram automaticamente cronogramas visuais ou relatórios técnicos no CorelDRAW, eliminando cálculos manuais propensos a erro.
Quais variáveis devo considerar na rotina de cálculo?
As principais variáveis são: idade da tubulação, material (PVC, ferro galvanizado, cobre), histórico de vazamentos e entupimentos por andar, pressão da rede, tipo de uso (residencial/comercial) e sazonalidade. A rotina deve ponderar esses fatores para sugerir intervalos dinâmicos.
É possível integrar essa rotina com planilhas de controle de condomínios?
Sim. O VBA acessa arquivos Excel via ADO ou automação OLE, lendo abas de ocorrências e escrevendo as datas sugeridas para próxima inspeção. Isso mantém a planilha do síndico ou administradora sempre atualizada sem digitação manual.
Como validar se a frequência calculada está adequada na prática?
Acompanhe por 3 a 6 meses os indicadores: redução de chamados de emergência, custo com reparos corretivos vs. preventivos e tempo de inatividade dos sistemas. Ajuste os pesos das variáveis na macro conforme a realidade observada.
Preciso de conhecimentos avançados de programação para implementar?
Conhecimentos intermediários de VBA (loops, manipulação de arrays, acesso a Excel, objetos do CorelDRAW) são suficientes. O artigo apresenta um passo a passo comentado que pode ser adaptado copiando e ajustando as variáveis do seu edifício.