Meniu
Optimizare procese Excel: Power Query sursă dinamică, VBA generare PDF, email Outlook, Power Automate

Optimizarea proceselor cu Excel: Power Query, VBA și automatizare completă

Articolul acesta arată cum se optimizează un proces cap-coadă, pe un exemplu real de firmă: cartografiere, import automat, rapoarte, e-mail, monitorizare. Dacă întrebarea ta e încă de ce merită și cu ce încep, citește întâi de ce este importantă automatizarea proceselor în afacerea ta.

Optimizarea unui proces de business în Excel înseamnă eliminarea pașilor manuali, reducerea erorilor și creșterea vitezei de procesare. Combinația Power Query + VBA + Power Automate acoperă întreg ciclul: import date → transformare → calcul → raportare → distribuție. Iată cum se implementează fiecare etapă.

1. Cartografierea procesului — identificarea punctelor de automatizat

Înainte de automatizare, documentează fiecare pas manual și estimează timpul consumat. Pașii cu durată mare și frecvență ridicată sunt prioritari.

Pas manualTimp estimatFrecvențăInstrument automatizare
Import CSV din sistem15 minZilnicPower Query
Curățare și transformare date30 minZilnicPower Query pași
Calcule și formule20 minZilnicTabele structurate
Generare raport PDF10 minSăptămânalVBA macro
Trimitere email cu raport5 minSăptămânalVBA + Outlook

2. Automatizarea importului și transformării cu Power Query

// Configurare sursă dinamică — calea fișierului din o celulă Excel:
// În foaia "Config", celula B1 conține calea fișierului CSV

// Cod M pentru sursă dinamică:
let
    CaleFisier = Excel.CurrentWorkbook(){[Name="tbl_Config"]}[Content]{0}[Cale],
    Sursa = Csv.Document(File.Contents(CaleFisier),
        [Delimiter=";", Encoding=65001, QuoteStyle=QuoteStyle.None]),
    AnteturiPromovate = Table.PromoteHeaders(Sursa),
    TipuriSchimbate = Table.TransformColumnTypes(AnteturiPromovate,{
        {"Data", type date},
        {"Valoare", type number},
        {"CodClient", type text}
    }),
    RanduriGoaleEliminate = Table.SelectRows(TipuriSchimbate,
        each ([CodClient] <> null and [CodClient] <> "")),
    DuplicateEliminate = Table.Distinct(RanduriGoaleEliminate, {"ID_Tranzactie"})
in
    DuplicateEliminate

// Actualizare trigger din VBA:
Sub ActualizeazaDate()
    ActiveWorkbook.RefreshAll
    Application.Wait Now + TimeValue("00:00:05") ' Aștepți finalizarea
    Call GenerareRaport ' Continuă cu generarea raportului
End Sub

3. Macro VBA pentru generarea rapoartelor

Sub GenerareRaportLunar()
    Dim ws As Worksheet
    Dim wsPivot As Worksheet
    Dim ptCache As PivotCache
    Dim pt As PivotTable
    Dim DataRaport As String

    DataRaport = Format(Date, "YYYY-MM")
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    ' 1. Refresh Pivot Tables
    For Each pt In ActiveWorkbook.PivotTables
        pt.RefreshTable
    Next pt

    ' 2. Copiaza foaia Dashboard intr-un fisier nou
    Set ws = Sheets("Dashboard")
    ws.Copy

    ' 3. Salveaza ca PDF
    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:="C:\Rapoarte\Raport_" & DataRaport & ".pdf", _
        Quality:=xlQualityStandard, _
        OpenAfterPublish:=False

    ' 4. Inchide fisierul temporar fara sa salveze
    ActiveWorkbook.Close SaveChanges:=False

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

    MsgBox "Raport generat: Raport_" & DataRaport & ".pdf", vbInformation
End Sub

4. Trimitere automată email cu Outlook VBA

Sub TrimiteRaportEmail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim DataRaport As String
    Dim CalePDF As String

    DataRaport = Format(Date, "YYYY-MM")
    CalePDF = "C:\Rapoarte\Raport_" & DataRaport & ".pdf"

    ' Verifica daca fisierul PDF exista
    If Dir(CalePDF) = "" Then
        MsgBox "PDF-ul nu a fost generat inca!", vbExclamation
        Exit Sub
    End If

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = "[email protected]"
        .CC = "[email protected]"
        .Subject = "Raport lunar " & DataRaport
        .Body = "Buna ziua," & vbNewLine & vbNewLine & _
                "Atasez raportul lunar pentru " & DataRaport & "." & vbNewLine & _
                "Generat automat din sistemul Excel."
        .Attachments.Add CalePDF
        .Send ' Sau .Display pentru preview inainte de trimitere
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

5. Automatizare cu Power Automate (fără VBA)

Power Automate (fostul Microsoft Flow) permite automatizarea fără cod VBA, folosind conectori vizuali. Se integrează nativ cu Excel Online pe SharePoint/OneDrive.

// Flow tipic de automatizare raport săptămânal:

// DECLANȘATOR: Recurrence → Every 1 Week → Monday at 08:00

// PAS 1: Get file content (Excel din SharePoint)
//   Site: https://companie.sharepoint.com/sites/Date
//   File: /Shared Documents/Date_Vanzari.xlsx

// PAS 2: Run script (Office Scripts în Excel Online)
//   Script: "ActualizeazaDate" → refresh conexiuni

// PAS 3: Get file content (Excel actualizat)
//   Același fișier după refresh

// PAS 4: Create PDF (Convert to PDF)
//   Input: conținut Excel

// PAS 5: Send email
//   To: @{variables('EmailManagement')}
//   Attachment: PDF generat
//   Subject: Raport săptămânal @{formatDateTime(utcNow(),'yyyy-MM-dd')}

// Office Scripts echivalent VBA (TypeScript):
function main(workbook: ExcelScript.Workbook) {
    workbook.refreshAllDataConnections();
    let sheet = workbook.getWorksheet("Dashboard");
    let range = sheet.getUsedRange();
    // procesare ulterioară...
}

6. Monitorizarea performanței fișierelor automatizate

' Măsurarea timpului de execuție pentru optimizare:
Sub MasuraTimpExecutie()
    Dim StartTime As Double
    StartTime = Timer

    ' Codul de optimizat:
    Call ActualizeazaDate

    Debug.Print "Timp executie: " & Format(Timer - StartTime, "0.00") & " secunde"
End Sub

' Optimizare viteză VBA — setări obligatorii la început:
Sub OptimizatViteza()
    With Application
        .ScreenUpdating = False    ' Nu redesena ecranul
        .Calculation = xlManual    ' Nu recalcula automat
        .EnableEvents = False      ' Nu declanșa evenimente
        .DisplayAlerts = False     ' Nu afișa alerte
    End With

    ' *** CODUL TĂU AICI ***

    With Application
        .ScreenUpdating = True
        .Calculation = xlAutomatic
        .EnableEvents = True
        .DisplayAlerts = True
    End With
End Sub

Implementarea completă a automatizărilor de proces — de la audit la livrare — este serviciul principal oferit de Excel Group MD. Proiectele includ documentație și training pentru echipa internă.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *