Aceasta este o copie de probă. Site-ul adevărat este excel-group.ro.
Meniu
Sistem facturare automată Excel — dropdown client, completare automată, numerotare și salvare PDF cu VBA

Facturare automată în Excel: generezi și salvezi facturi cu un singur click

Dacă emiti 20-100 de facturi pe lună și le creezi manual una câte una, pierzi 2-5 ore pe lună cu muncă ce poate fi complet automatizată.

Un sistem de facturare în Excel bine construit generează factura din câteva selecții, o salvează automat ca PDF cu numărul corect și o arhivează — totul cu un singur click pe un buton.


Ce poate face un sistem de facturare în Excel

  • Selectezi clientul din dropdown → datele se completează automat (adresă, CUI, cont bancar)
  • Selectezi produsele/serviciile → prețurile se completează din nomenclator
  • Calculul TVA, total și scadența — automate
  • Numerotarea facturii — automată (nu poți emite același număr de două ori)
  • Salvare automată PDF cu numele corect (Factura_2026_0047_ClientSRL.pdf)
  • Înregistrarea automată în jurnalul de facturi

Arhitectura: 4 foi esențiale

Foaia „Nomenclator_Clienti”

ID Denumire CUI Nr_Reg_Com Adresa Localitate Județ Cont_IBAN Banca

Foaia „Nomenclator_Produse”

Cod Denumire UM Pret_Unitar Cota_TVA Cont_Contabil

Foaia „Template_Factura”

Factura vizuală, cu design profesional, care se completează automat.

Foaia „Jurnal_Facturi”

Registrul tuturor facturilor emise — sursa de date pentru rapoarte.


Template-ul facturii: completare automată din dropdown

Selecția clientului

Celula B5 (Client): validare date → dropdown → sursă: =Nomenclator_Clienti[Denumire]

Completare automată a datelor clientului:

// CUI
B6: =XLOOKUP(B5; Nomenclator_Clienti[Denumire]; Nomenclator_Clienti[CUI]; "")

// Adresa completă
B7: =XLOOKUP(B5; Nomenclator_Clienti[Denumire]; Nomenclator_Clienti[Adresa])

// Localitate + Județ
B8: =XLOOKUP(B5; Nomenclator_Clienti[Denumire]; Nomenclator_Clienti[Localitate]) & ", " &
    XLOOKUP(B5; Nomenclator_Clienti[Denumire]; Nomenclator_Clienti[Judet])

// IBAN + Bancă
B9: =XLOOKUP(B5; Nomenclator_Clienti[Denumire]; Nomenclator_Clienti[Cont_IBAN]) & " - " &
    XLOOKUP(B5; Nomenclator_Clienti[Denumire]; Nomenclator_Clienti[Banca])

Numerotarea automată a facturii

// Numărul facturii = ultimul număr din jurnal + 1
Nr_Factura: =MAX(Jurnal_Facturi[Nr_Factura]) + 1

// Formatat cu zerouri: 0047
Nr_Formatat: =TEXT(Nr_Factura; "0000")

// Seria + numărul (ex: ABC-0047)
Serie_Nr: ="ABC-" & Nr_Formatat

Data și scadența

Data_Factura: =AZI()
Scadenta: =AZI() + XLOOKUP(B5; Nomenclator_Clienti[Denumire]; Nomenclator_Clienti[Termen_Plata]; 30)
// Termenul de plată e configurat per client în nomenclator

Tabelul de produse al facturii

10-15 rânduri pentru liniile de factură (poți extinde cu macro):

Nr Cod Denumire UM Cant Pret_Unit Val_Fara_TVA TVA% TVA Total

Autocompletarea din nomenclator de produse:

// Coloana Denumire: din dropdown cu cod selectat
D12: =XLOOKUP(C12; Nomenclator_Produse[Cod]; Nomenclator_Produse[Denumire]; "")

// Prețul unitar
F12: =XLOOKUP(C12; Nomenclator_Produse[Cod]; Nomenclator_Produse[Pret_Unitar]; 0)

// UM
E12: =XLOOKUP(C12; Nomenclator_Produse[Cod]; Nomenclator_Produse[UM]; "")

// Cota TVA
H12: =XLOOKUP(C12; Nomenclator_Produse[Cod]; Nomenclator_Produse[Cota_TVA]; 19%)

// Valoarea fără TVA
G12: =IF(C12=""; 0; E12 * F12)

// TVA
I12: =G12 * H12

// Total cu TVA
J12: =G12 + I12

Totaluri pe factură:

Total_Fara_TVA: =SUM(G12:G26)
Total_TVA_19:   =SUMIF(H12:H26; 19%; I12:I26)
Total_TVA_9:    =SUMIF(H12:H26; 9%; I12:I26)
Total_TVA_5:    =SUMIF(H12:H26; 5%; I12:I26)
Total_De_Plata: =SUM(J12:J26)

// Suma în litere (pentru factura legală)
// Nu există funcție natată — implementezi cu VBA sau Named Function LET

Macrou de emitere a facturii (un singur click)

Sub EmiteFactura()
    Dim ws As Worksheet
    Dim wsJurnal As Worksheet
    Dim nrFactura As Long
    Dim client As String
    Dim dataFactura As Date
    Dim calePDF As String
    
    Set ws = ThisWorkbook.Sheets("Template_Factura")
    Set wsJurnal = ThisWorkbook.Sheets("Jurnal_Facturi")
    
    ' Validare: clientul e selectat?
    client = ws.Range("B5").Value
    If client = "" Then
        MsgBox "Selectați clientul înainte de emitere!", vbExclamation
        Exit Sub
    End If
    
    ' Validare: există cel puțin o linie de produse?
    If ws.Range("G12").Value = 0 And ws.Range("G13").Value = 0 Then
        MsgBox "Adăugați cel puțin un produs pe factură!", vbExclamation
        Exit Sub
    End If
    
    ' Calculăm numărul facturii
    nrFactura = Application.WorksheetFunction.Max(wsJurnal.Columns(1)) + 1
    dataFactura = ws.Range("G5").Value  ' Data facturii din template
    
    ' Scriem numărul de factură pe template
    ws.Range("H3").Value = nrFactura  ' Celula cu nr factura
    
    ' Construim calea PDF
    Dim folderPDF As String
    folderPDF = ThisWorkbook.Path & "\Facturi_PDF\" & Year(dataFactura) & "\"
    
    ' Creăm folderul dacă nu există
    If Dir(folderPDF, vbDirectory) = "" Then MkDir folderPDF
    
    ' Construim numele fișierului
    Dim clientCurat As String
    clientCurat = Replace(Replace(client, " ", "_"), "/", "-")
    calePDF = folderPDF & "Factura_" & Year(dataFactura) & "_" & Format(nrFactura, "0000") & "_" & clientCurat & ".pdf"
    
    ' Exportăm ca PDF
    ws.ExportAsFixedFormat xlTypePDF, calePDF, xlQualityStandard
    
    ' Înregistrăm în jurnal
    Dim ultimulRandJurnal As Long
    ultimulRandJurnal = wsJurnal.Cells(wsJurnal.Rows.Count, 1).End(xlUp).Row + 1
    
    With wsJurnal
        .Cells(ultimulRandJurnal, 1).Value = nrFactura
        .Cells(ultimulRandJurnal, 2).Value = dataFactura
        .Cells(ultimulRandJurnal, 3).Value = client
        .Cells(ultimulRandJurnal, 4).Value = ws.Range("C4").Value  ' CUI client
        .Cells(ultimulRandJurnal, 5).Value = ws.Range("Total_Fara_TVA").Value
        .Cells(ultimulRandJurnal, 6).Value = ws.Range("Total_TVA").Value
        .Cells(ultimulRandJurnal, 7).Value = ws.Range("Total_De_Plata").Value
        .Cells(ultimulRandJurnal, 8).Value = ws.Range("Scadenta").Value
        .Cells(ultimulRandJurnal, 9).Value = calePDF
        .Cells(ultimulRandJurnal, 10).Value = "Neîncasată"
    End With
    
    ' Curățăm template-ul pentru factura următoare
    ws.Range("B5").Value = ""  ' Resetăm clientul
    ws.Range("C12:C26").ClearContents  ' Resetăm produsele
    ws.Range("E12:E26").ClearContents  ' Resetăm cantitățile
    
    MsgBox "Factura nr. " & nrFactura & " emisă cu succes!" & vbCrLf & _
           "Salvată la: " & calePDF, vbInformation
End Sub

Jurnalul de facturi și urmărirea plăților

Foaia „Jurnal_Facturi” devine automat baza de date pentru:

// Total facturi emise luna curentă
=SUMPRODUCT((LUNA(Jurnal[Data_Factura])=LUNA(AZI()))*(AN(Jurnal[Data_Factura])=AN(AZI()))*Jurnal[Total_De_Plata])

// Creanțe neîncasate
=SUMIF(Jurnal[Status]; "Neîncasată"; Jurnal[Total_De_Plata])

// Facturi scadente și neîncasate (restanțe)
=SUMPRODUCT((Jurnal[Status]="Neîncasată")*(Jurnal[Scadenta]<AZI())*Jurnal[Total_De_Plata])

Concluzie

Un sistem de facturare în Excel elimină erorile de numerotare, completare și formatare — și reduce timpul de emitere per factură de la 5-10 minute la sub 1 minut. Arhivarea automată în PDF cu structură de foldere clară înlocuiește haosul „Factura_finala_v3_TRIMITE_ASTa.xlsx”.

La Excel Group construim sisteme de facturare automatizate în Excel pentru firme din România și Moldova — de la template-ul profesional până la jurnalul integrat cu rapoartele contabile. Contactează-ne.


Întrebări frecvente

Facturile generate în Excel sunt legal valabile în România?

Formatul facturii (Word, Excel, software contabil) nu are restricții legale — conținutul obligatoriu da (seria și numărul, data, CUI-urile, datele fiscale, TVA-ul defalcat). Excel poate genera facturi legal valabile dacă respectă elementele obligatorii conform Codului Fiscal.

Sistemul poate trimite factura automat pe email clientului?

Da — extizezi macro-ul cu cod Outlook: CreateItem(0).Attachments.Add calePDF și .Send. Adresa de email a clientului e stocată în Nomenclator_Clienti și preluată automat.

Pot gestiona mai multe serii de facturi (RO, export, proforma)?

Da — adaugi un dropdown cu seria facturii (RO, EXP, PRF) și logica de numerotare se face separat per serie: =MAXIFS(Jurnal[Nr]; Jurnal[Serie]; [@Serie]) + 1.

Lasă un răspuns

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