Logre escribir una macro que hace todo en forma semi automático, una que cuenta 8 lugares y realiza una fórmula sumando los lugares desplazados y así con 20, 16 y 12, todo esto lo tengo que hacer manual, si se pasa de 60 en la fórmula que suma, lo borro y coloco el de 16, si aun así se pasa, ¿lo borro y coloco el de 12 y continuo... habrá forma de que eso lo haga VB?
Adjunto TXT del modulo.
Attribute VB_Name = "Módulo1"
Sub ImportarCSV()
Attribute ImportarCSV.VB_Description = "Importa un archivo CSV y activa filtros para trabajar.\n\nNO ES NECESARIO EJECUTAR LA MACRO ""PREPARAR"""
Attribute ImportarCSV.VB_ProcData.VB_Invoke_Func = "i\n14"
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = "importado"
Sheets("importado").Cells.ClearContents
strFile = Application.GetOpenFilename("CSV, *.csv")
If strFile = Empty Then
response = MsgBox("No selecciono ningún fichero o esta vacío.", _
vbOKOnly, "Error")
Exit Sub
Else
End If
With Sheets("importado").QueryTables.Add(Connection:= _
"TEXT;" & strFile _
, Destination:=Sheets("carga").Range("$A$1"))
.Name = "fichero"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True 'CSV: punto y coma
.TextFileCommaDelimiter = True 'CSV: coma
.TextFileSpaceDelimiter = False 'CSV: espacio
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) '15 columnas
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'prepara formato del importado listo para trabajr con filtros y celdas ocultas
Range("A1:Q1").Select
Selection.AutoFilter
Range("F:F,H:H").Select
Selection.NumberFormat = "0"
Columns("C:D").Select
Selection.NumberFormat = "dd/mm/yy;@"
Range("B:D,F:F,H:H,L:L,M:M,N:N").Select
Selection.EntireColumn.Hidden = True
Range("A2").Select
MsgBox "archivo cargado correctamente"
End Sub
Sub CONTROLES()
Attribute CONTROLES.VB_Description = "Activa los controles del archivo. Ctrl+a"
Attribute CONTROLES.VB_ProcData.VB_Invoke_Func = "a\n14"
'
' Macro2 Macro
' grabar test 1
'
' Acceso directo: CTRL+a
'
Range("O3").Select
Selection.End(xlUp).Select
Rows("1:1").Select
Range("O1").Activate
Selection.Insert Shift:=xlDown
Range("A1").Select
ActiveCell.FormulaR1C1 = "PEDIDO"
Range("E1").Select
ActiveCell.FormulaR1C1 = "TIENDA"
Range("G1").Select
ActiveCell.FormulaR1C1 = "MODELO"
Range("I1").Select
ActiveCell.FormulaR1C1 = "COLOR"
Range("J1").Select
ActiveCell.FormulaR1C1 = "TALL"
Range("K1").Select
ActiveCell.FormulaR1C1 = "PZ"
Range("O1").Select
ActiveCell.FormulaR1C1 = "CAJA"
Range("P1").Select
ActiveCell.FormulaR1C1 = "COUNT"
Range("Q1").Select
ActiveCell.FormulaR1C1 = "CHICA"
Range("R1").Select
ActiveCell.FormulaR1C1 = "FILAS"
Range("S1").Select
ActiveCell.FormulaR1C1 = "SUMA PZ"
Range("T1").Select
ActiveCell.FormulaR1C1 = "N° CAJAS"
Range("U1").Select
ActiveCell.FormulaR1C1 = "CAJA CHICA"
Range("V1").Select
ActiveCell.FormulaR1C1 = "CAJA GRANDE"
'FORMULAS
'Range("B2").formula = "=AND(ISNUMBER(ABS(RIGHT(RC[-1],8))),ISTEXT(LEFT(RC[-1],1)),LEN(RC[-1])=9)"
Range("R2").FORMULA = "=SUBTOTAL(3,R3C11:R19297C11)"
Range("T2").FORMULA = "=SUBTOTAL(3,R3C16:R19616C16)"
Range("S2").FORMULA = "=SUBTOTAL(9,R3C11:R19296C11)"
Range("U2").FORMULA = "=SUBTOTAL(3,R3C17:R19616C17)"
Range("V2").FORMULA = "=R2C20-R2C21"
Range("O3").Select
End Sub
Sub preparar()
Attribute preparar.VB_Description = "Esta macro activa filtros y oculta celdas para trabajar.\n\nUSAR SOLO SI ABRIO EL ARCHIVO CSV DIRECTAMENTE, SI IMPORTO EL ARCHIVO, ESTA TAREA YA SE REALIZO."
Attribute preparar.VB_ProcData.VB_Invoke_Func = "e\n14"
'no usar si importo un archivo csv.!!
MsgBox "no usar si importo archivo"
Range("A1:Q1").Select
Selection.AutoFilter
Range("F:F,H:H").Select
Selection.NumberFormat = "0"
Columns("C:D").Select
Selection.NumberFormat = "dd/mm/yy;@"
Range("B:D,F:F,H:H,L:L,M:M,N:N").Select
Selection.EntireColumn.Hidden = True
Range("A2").Select
MsgBox "Listo para trabajar."
End Sub
Sub paraCajas()
Attribute paraCajas.VB_Description = "Esta macro genera las pestañas y formatos necesarios para capturar lista de cajas."
Attribute paraCajas.VB_ProcData.VB_Invoke_Func = "r\n14"
' crear pestañas para cargar cajas Macro OK
'
'cambia nombre de pestaña 1 a caja
Sheets(1).Select
Sheets(1).Name = "carga"
'genera pestaña 2 y cambia nombre a cajagrande
Sheets.Add After:=ActiveSheet
Sheets(2).Select
Sheets(2).Name = "cajagrande"
ActiveCell.Offset(0, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "cajas grandes"
ActiveCell.Offset(1, 0).Range("A1").Select
'ingresa formula para validar cajas en cajagrande
Range("B2").Select
ActiveCell.Select
Range("B2").FORMULA = "=AND(ISNUMBER(ABS(RIGHT(RC[-1],8))),ISTEXT(LEFT(RC[-1],1)),LEN(RC[-1])=9)"
ActiveCell.Select
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B502"), Type:=xlFillDefault
' verdaderoverde Macro
Columns("B:B").Select
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=VERDADERO"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16752384
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
'valida tamaño de celda
Range("A2").Select
ActiveCell.FormulaR1C1 = "V12345670"
Range("B2").Select
Columns("B:B").EntireColumn.AutoFit
Range("A2").Select
ActiveCell.FormulaR1C1 = ""
'activa en A2 listo para capturar cajas
Range("A2").Select
'genera pestaña 2 y cambia nombre a cajachica
Sheets.Add After:=ActiveSheet
Sheets(3).Select
Sheets(3).Name = "cajachica"
ActiveCell.Offset(0, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "cajas chicas"
ActiveCell.Offset(1, 0).Range("A1").Select
'ingresa formula para validar cajas
Range("B2").Select
ActiveCell.Select
Range("B2").FORMULA = "=AND(ISNUMBER(ABS(RIGHT(RC[-1],8))),ISTEXT(LEFT(RC[-1],1)),LEN(RC[-1])=9)"
ActiveCell.Select
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B502"), Type:=xlFillDefault
' verdaderoverde Macro
Columns("B:B").Select
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=VERDADERO"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16752384
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
'valida tamaño de celda
Range("A2").Select
ActiveCell.FormulaR1C1 = "V12345670"
Range("B2").Select
Columns("B:B").EntireColumn.AutoFit
Range("A2").Select
ActiveCell.FormulaR1C1 = ""
'activa en A2 listo para capturar cajas
Range("A2").Select
End Sub
Sub Modelos_2()
Attribute Modelos_2.VB_Description = "Cuenta 8 lugares abajo y suma 8 arriba.\n\n2 MODELOS"
Attribute Modelos_2.VB_ProcData.VB_Invoke_Func = "l\n14"
' Macro Ctrl + L
' cuenta 8 lugares abajo y suma 8 arriba
ActiveCell.Offset(7, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "2 Modelos"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-7]C[-5]:RC[-5])"
ActiveCell.Offset(0, -1).Range("A1").Select
End Sub
Sub Modelos_3()
Attribute Modelos_3.VB_Description = "Cuenta 12 lugares abajo y suma 12 arriba.\n\n3 MODELOS"
Attribute Modelos_3.VB_ProcData.VB_Invoke_Func = "n\n14"
' cuenta 12 lugares abajo y suma 12 arriba
' Acceso directo: CTRL+n
ActiveCell.Offset(11, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "3 Modelos"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-11]C[-5]:RC[-5])"
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
Sub Modelos_4()
Attribute Modelos_4.VB_Description = "Cuenta 16 lugares abajo y suma 16 arriba.\n\n4 MODELOS"
Attribute Modelos_4.VB_ProcData.VB_Invoke_Func = "m\n14"
' cuenta 16 lugares abajo y suma 16 arriba
' Acceso directo: CTRL+m
ActiveCell.Offset(15, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "4 Modelos"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-15]C[-5]:RC[-5])"
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
Sub Modelos_5()
Attribute Modelos_5.VB_Description = "Cuenta 20 lugares abajo y suma 20 arriba.\n\n5 MODELOS"
Attribute Modelos_5.VB_ProcData.VB_Invoke_Func = "q\n14"
'cuenta 20 lugares abajo y suma 20 arriba
' Acceso directo: CTRL+q
ActiveCell.Offset(19, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "5 Modelos"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-19]C[-5]:RC[-5])"
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
'estas macros son para copiar las cajas de las pestañas "cajagrande" y "cajachica" a la pestaña "carga"
Sub cajagrande()
Attribute cajagrande.VB_Description = "Asigna el campo siguiente de la lista en pestaña ""cajagrande"""
Attribute cajagrande.VB_ProcData.VB_Invoke_Func = "y\n14"
' asignar caja grande Macro
' Acceso directo: CTRL+y
'
Range(Selection, Selection.End(xlDown)).Select
Sheets("cajagrande").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.Copy
Sheets("carga").Select
ActiveSheet.Paste
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
Sub cajachica()
Attribute cajachica.VB_Description = "Asigna el campo siguiente de la lista en pestaña ""cajachica"""
Attribute cajachica.VB_ProcData.VB_Invoke_Func = "u\n14"
' asignar caja chica Macro
' Acceso directo: CTRL+U
'
Range(Selection, Selection.End(xlDown)).Select
Sheets("cajachica").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.Copy
Sheets("carga").Select
ActiveSheet.Paste
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub