Sub bonificaciones() Dim s1, s2 As Single Dim cc, cbe, cta, ccl1, ccl2, ccl3, crp, cre, cpr, cd, cft, cfn, csc, cdm, cco, cv, cf, cps, cp, ca, cl, cn, cch, cpi, clc, ct As Integer 'contadores Dim b1, pr, re, po, cl1, cl2, cl3, ta, be, dh, a, ps, v, co, dm, sc, fnt, ft As Integer 'bonos Dim f1, t1, k1 As Long 'fichas, transportes y clientes Dim u1, u2, u3, u4, u5 As Range sc = 4300 pr = 1600 re = 7000 po = 1150 cl1 = 180 cl2 = 160 cl3 = 900 ta = 180000 ach = 10000 s1 = Timer() dh = InputBox("Ingrese cantidad de días hábiles del período") Sheets("Ayudante").Range("A2").Select Do While Not IsEmpty(ActiveCell) 'no vacías Set u1 = ActiveCell Set f1 = ActiveCell b1 = 0 'bono 'contadores cc = 0 'clientes cd = 0 'salida camión cpr = 0 'para rapel crp = 0 'r. peligrosa ccl1 = 0 'cliente rural ccl2 = 0 'cliente urbano ccl3 = 0 'cliente mayorista cta = 0 '3er ayudante cbe = 0 'extraordinarios cantidad be = 0 'extraordinarios monto cch = 0 'chofer cn = 0 'no contratado cl = 0 'licencia médica ca = 0 'licencia achs cp = 0 'permiso sin goce cf = 0 'falla cv = 0 'vacaciones cco = 0 'compensado cdm = 0 'domingo csc = 0 'sin carga cfn = 0 'festivo no tra cft = 0 'festivo tra cre = 0 'recargue Do While ActiveCell.Value = f1 'repito para la misma ficha hasta que cambie cpi = 0 'cont pichidegua clc = 0 'cont las cabras ct = 0 'transportes If u1.Offset(0, 3).Value = "1" Or u1.Offset(0, 3).Value = "CH" Then 'si asistencia es "assite" / "chofer" b1 = b1 + sc 'paga salida camión cd = cd + 1 'cuenta salida camión If u1.Offset(0, 10).Value = "X" Then 'cuenta 3er ayudante cta = cta + 1 End If If u1.Offset(0, 12).Value > "0" Then 'reconoce cbe = cbe + 1 'cuantifica extras asignados be = be + u1.Offset(0, 12).Value 'acumula extras asignados b1 = b1 + be 'suma extras a la bonificación total End If If u1.Offset(0, 3).Value = "CH" Then 'chofer 'si cumple con funciones de chofer cch = cch + 1 'cuantifica b1 = b1 + ach 'lo suma al bono End If u1.Offset(0, 4).Select Do While Not IsEmpty(ActiveCell) And IsNumeric(ActiveCell) ''análisis transportes / ficha - iT0 ct = ct + 1 'cuantifica transportes Set u2 = ActiveCell t1 = ActiveCell.Value cpo = 0 cur = 0 cma = 0 'Traslado a hoja "Concrecion" para analizar los clientes por transportes Sheets("Concrecion").Select Range("A2").Select 'clientes / ficha Do While Not IsEmpty(ActiveCell) Set u3 = ActiveCell If ActiveCell.Value = t1 Then 'si coincide transporte, de lo contrario pasa a la siguiente celda k1 = ActiveCell.Offset(0, 1).Value 'almacena cliente para ese transporte cc = cc + 1 'cuantifica clientes 'Traslado a hoja "Clientes" para analizar datos Sheets("Clientes").Select Range("A1").Select 'info clientes Do Until ActiveCell.Value = k1 'busca cliente ActiveCell.Offset(1, 0).Select Loop Set u4 = ActiveCell 'Detalles rutas If u4.Offset(0, 1).Value = "PICHIDEGUA" Then cpi = cpi + 1 If u4.Offset(0, 4).Value = "180" Then 'rural cpo = cpo + 1 Sheets("Concrecion").Select 'vuelve para buscar próximo cliente del transporte u3.Offset(1, 0).Select Else 'urbano If u4.Offset(0, 4).Value = "160" Then cur = cur + 1 Sheets("Concrecion").Select 'vuelve para buscar próximo cliente del transporte u3.Offset(1, 0).Select Else 'mayorista cma = cma + 1 Sheets("Concrecion").Select 'vuelve para buscar próximo cliente del transporte u3.Offset(1, 0).Select End If End If 'tipo ruta Else 'las cabras If u4.Offset(0, 1).Value = "LAS CABRAS" Then clc = clc + 1 If u4.Offset(0, 4).Value = "180" Then 'urbano cpo = cpo + 1 Sheets("Concrecion").Select 'vuelve para buscar próximo cliente del transporte u3.Offset(1, 0).Select Else 'urbano If u4.Offset(0, 4).Value = "160" Then cur = cur + 1 Sheets("Concrecion").Select 'vuelve para buscar próximo cliente del transporte u3.Offset(1, 0).Select Else 'mayorista cma = cma + 1 Sheets("Concrecion").Select 'vuelve para buscar próximo cliente del transporte u3.Offset(1, 0).Select End If End If 'tipo ruta / las cabras Else 'otras comunas If u4.Offset(0, 4).Value = "180" Then 'POBLACIONES cpo = cpo + 1 Sheets("Concrecion").Select 'vuelve para buscar próximo cliente del transporte u3.Offset(1, 0).Select Else 'urbano If u4.Offset(0, 4).Value = "160" Then cur = cur + 1 Sheets("Concrecion").Select 'vuelve para buscar próximo cliente del transporte u3.Offset(1, 0).Select Else 'mayorista cma = cma + 1 Sheets("Concrecion").Select 'vuelve para buscar próximo cliente del transporte u3.Offset(1, 0).Select End If End If 'tipo ruta / otras comunas End If 'fin T1 End If Else 'no coincide transporte, pasa a la siguiente celda u3.Offset(1, 0).Select Loop 'clientes por transporte End if 'calcula y suma bonificaciones por transporte a ficha If (cpo + cur + cma) <= 6 Or (cpo + cur) <= 6 Or cpo <= 6 Or cur <= 6 Then 'iT2 b1 = b1 + ((cpo + cur + cma) * cl3) ccl1 = ccl1 + cpo ccl2 = ccl2 + cur ccl3 = ccl3 + cma u2.Offset(0, 1).Select Else If (cpo + cur + cma) > 6 Or (cpo + cur) > 6 Or cpo <= 6 Or cur <= 6 Then b1 = b1 + (cpo * cl1) + (cur * cl2) + (cma * cl3) ccl1 = ccl1 + cpo ccl2 = ccl2 + cur ccl3 = ccl3 + cma u2.Offset(0, 1).Select Else ccl1 = ccl1 + cpo ccl2 = ccl2 + cur ccl3 = ccl3 + cma u2.Offset(0, 1).Select End If End If 'fin T2 Loop 'fin T0 'calcula y suma bonificaciones por día If cpi >= 1 Or clc >= 1 Then 'para rapel b1 = b1 + pr cpr = cpr + 1 End If If ct > 1 Then 'recargue b1 = b1 + (ct - 1) * re cre = cre + 1 End If If ccl1 >= 1 Then 'ruta peligrosa / rural b1 = b1 + po crp = crp + 1 End If u1.Offset(1, 0).Select 'retorno Else 'en caso contrario, aplica según tipo de inasistencia If u1.Offset(0, 4).Value = "N" Then 'no contratado cn = cn + 1 u1.Offset(1, 0).Select Else If u1.Offset(0, 4).Value = "L" Then 'licencia médica cl = cl + 1 u1.Offset(1, 0).Select Else If u1.Offset(0, 4).Value = "A" Then 'licencia achs ca = ca + 1 a = InputBox("Ingrese monto por licencia ACHS, para fecha " & u1.Offset(0, 2).Value & ", de " & u1.Offset(0, 1).Value) b1 = b1 + a u1.Offset(1, 0).Select Else If u1.Offset(0, 4).Value = "P" Then 'permiso sin goce cp = cp + 1 u1.Offset(1, 0).Select Else If u1.Offset(0, 4).Value = "PS" Then 'permiso sindical cps = cps + 1 ps = InputBox("Ingrese monto por permiso sindical, para fecha " & u1.Offset(0, 2).Value & ", de " & u1.Offset(0, 1).Value) b1 = b1 + ps u1.Offset(1, 0).Select Else If u1.Offset(0, 4).Value = "F" Then 'falla cf = cf + 1 u1.Offset(1, 0).Select Else If u1.Offset(0, 4).Value = "V" Then 'vacaciones cv = cv + 1 v = InputBox("Ingrese monto por vacaciones, para fecha " & u1.Offset(0, 2).Value & ", de " & u1.Offset(0, 1).Value) b1 = b1 + v u1.Offset(1, 0).Select Else If u1.Offset(0, 4).Value = "C" Then 'compensado cco = cco + 1 co = InputBox("Ingrese monto por compensado, para fecha " & u1.Offset(0, 2).Value & ", de " & u1.Offset(0, 1).Value) b1 = b1 + co u1.Offset(1, 0).Select Else If u1.Offset(0, 4).Value = "DOM" Then 'domingo cdm = cdm + 1 dm = InputBox("Ingrese monto por domingo, para fecha " & u1.Offset(0, 2).Value & ", de " & u1.Offset(0, 1).Value) b1 = b1 + dm u1.Offset(1, 0).Select Else If u1.Offset(0, 4).Value = "SC" Then 'sin carga csc = csc + 1 sc = InputBox("Ingrese monto por 'sin carga', para fecha " & u1.Offset(0, 2).Value & ", de " & u1.Offset(0, 1).Value) b1 = b1 + sc u1.Offset(1, 0).Select Else If u1.Offset(0, 4).Value = "FNT" Then 'festivo no tra cfn = cfn + 1 fnt = InputBox("Ingrese monto por festivo no trabajado, para fecha " & u1.Offset(0, 2).Value & ", de " & u1.Offset(0, 1).Value) b1 = b1 + fnt u1.Offset(1, 0).Select Else cft = cft + 1 'festivo tra ft = InputBox("Ingrese monto por festivo trabajado, para fecha " & u1.Offset(0, 2).Value & ", de " & u1.Offset(0, 1).Value) b1 = b1 + ft u1.Offset(1, 0).Select End If End If End If End If End If End If End If End If End If End If End If End If 'trabajado / chofer Loop 'fichas / día Set u5 = ActiveCell 'cambio de ficha ctr = ctr + 1 'ordinal If cta >= 1 Then 'calcula 3er ayudante b1 = b1 + (ta / dh * cta) End If Worksheets("Reporte").Range("A" & Row.Count).End(xlUp).Offset(1, 0) = ctr 'A. Numeración ordinal: Worksheets("Reporte").Range("B" & Row.Count).End(xlUp).Offset(1, 0) = u1.Value 'B. ficha: Worksheets("Reporte").Range("C" & Row.Count).End(xlUp).Offset(1, 0) = u1.Offset(0, 1).Value 'C. Nombre: Worksheets("Reporte").Range("D" & Row.Count).End(xlUp).Offset(1, 0) = u1.Offset(0, 2).Value 'D. Fecha ini: Worksheets("Reporte").Range("E" & Row.Count).End(xlUp).Offset(1, 0) = u5.Offset(-1, 2).Value 'E. Fecha fin: Worksheets("Reporte").Range("F" & Row.Count).End(xlUp).Offset(1, 0) = b1 'F. Total bonificaciones: Worksheets("Reporte").Range("G" & Row.Count).End(xlUp).Offset(1, 0) = cch 'G. Chofer: Worksheets("Reporte").Range("H" & Row.Count).End(xlUp).Offset(1, 0) = cn 'H. no contratado: Worksheets("Reporte").Range("I" & Row.Count).End(xlUp).Offset(1, 0) = cl 'I. Licencia médica: Worksheets("Reporte").Range("J" & Row.Count).End(xlUp).Offset(1, 0) = ca 'J. Licencia achs: Worksheets("Reporte").Range("K" & Row.Count).End(xlUp).Offset(1, 0) = cp 'K. Permiso sin goce: Worksheets("Reporte").Range("L" & Row.Count).End(xlUp).Offset(1, 0) = cps 'L. Permiso sindical: Worksheets("Reporte").Range("M" & Row.Count).End(xlUp).Offset(1, 0) = cf 'M. Falla: Worksheets("Reporte").Range("N" & Row.Count).End(xlUp).Offset(1, 0) = cv 'N. Vacaciones: Worksheets("Reporte").Range("O" & Row.Count).Row(xlUp).Offset(1, 0) = cco 'O. Compensado: Worksheets("Reporte").Range("P" & Row.Count).End(xlUp).Offset(1, 0) = cdm 'P. Domingo: Worksheets("Reporte").Range("Q" & Row.Count).End(xlUp).Offset(1, 0) = csc 'Q. Sin carga: Worksheets("Reporte").Range("R" & Row.Count).End(xlUp).Offset(1, 0) = cfn 'R. Festivo no tra: Worksheets("Reporte").Range("S" & Row.Count).End(xlUp).Offset(1, 0) = cft 'S. Festivo tra: Worksheets("Reporte").Range("T" & Row.Count).End(xlUp).Offset(1, 0) = cd 'T. S. camión: Worksheets("Reporte").Range("U" & Row.Count).End(xlUp).Offset(1, 0) = cpr 'U. P. Rapel: Worksheets("Reporte").Range("V" & Row.Count).End(xlUp).Offset(1, 0) = cre 'V. Recargue: Worksheets("Reporte").Range("W" & Row.Count).End(xlUp).Offset(1, 0) = crp 'W. R. Peligrosa (población): Worksheets("Reporte").Range("X" & Row.Count).End(xlUp).Offset(1, 0) = ccl1 'X. Clientes rurales: Worksheets("Reporte").Range("Y" & Row.Count).End(xlUp).Offset(1, 0) = ccl2 'Y. Clientes urbanos: Worksheets("Reporte").Range("Z" & Row.Count).End(xlUp).Offset(1, 0) = ccl3 'Z. Clientes mayoristas: Worksheets("Reporte").Range("AA" & Row.Count).End(xlUp).Offset(1, 0) = cta 'AA. Tercer ayudante: Worksheets("AB" & Row.Count).End(xlUp).Offset(1, 0) = cbe 'AB. Bono extraordinario: Worksheets("Reporte").Range("AC" & Row.Count).End(xlUp).Offset(1, 0) = cc 'AC. T. clientes: u5.Select Loop 'no vacías s2 = Timer() MsgBox ("Tiempo del procedimiento: " & vbNewLine & s2 - s1 & " seg." & vbCrLf & "Rodrigo Poblete") End Sub