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

  1. 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";
  2. Carregar ocorrências dos últimos 24 meses em um Recordset filtrado por Data >= DateAdd("m", -24, Date).
  3. Agrupar por trecho (Bloco, Andar, Tubulacao) calculando: contagem de eventos, MTBF médio (dias entre eventos), custo total emergencial, tempo total de parada.
  4. Ler cadastro de trechos e fazer join em memória (Dictionary/Collection) para enriquecer com idade, material, diâmetro, acessibilidade.
  5. 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
    
  6. Gravar resultado na aba “Cronograma” (Trecho, Proxima_Inspecao = Date + Frequencia_Sugerida, Prioridade, Observacoes).
  7. Atualizar visual no CorelDRAW: abrir o documento “Planta_Edificio.cdr”, localizar shapes nomeados com o padrão TRECHO_Bloco_Andar_Tubulacao, alterar Fill.UniformColor conforme prioridade (RGB: Crítico=255,0,0; Alto=255,165,0; Médio=255,255,0; Baixo=0,200,0).
  8. Atualizar caixas de texto na página “Resumo” com totais por prioridade e data de geração.
  9. Exportar PDF em C:\Facilities\Relatorios\Cronograma_Manutencao_YYYYMMDD.pdf.
  10. 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:

  1. Mensal: macro roda automaticamente (agendador do Windows) às 06h do primeiro dia útil.
  2. Validação: zelador recebe PDF por e-mail, confere in loco trechos “Críticos” e “Altos”, anota observações na planilha (aba “Validacao”).
  3. Ajuste: engenheiro revisa pesos da fórmula trimestralmente (ex: aumentar peso de criticidade se houver muitos falsos positivos).
  4. 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_Util por 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 checar Err.Number em cada bloco.

Escalando para múltiplos edifícios

Quando a administradora gerencia dezenas de condomínios, a estrutura muda pouco:

  • Adicionar campo Condominio_ID em 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

0 de 9 concluídos

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.