UniversoExcelForo

Respuesta a consultas.
Fecha de creación: 09.Abril.2012

Fundadores: Wibly,Tyno,Servando,Sakkar,Rosendo2,RMaximo,Railar,Mcoronel,Ioyama,Igtelo,Hugotron,Drochar,Dedos,Alberto,Adolfo

No se pueden hacer consultas de Excel o VBA por mensaje privado.
Utiliza el botón buscar del foro y te ahorras tiempo para obtener "ayuda".

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 1 de 1.]

diegof68


hola, buen dia. tengo una macro que me da la cantidad de barras de material que necesito en base a una lista de corte, teniendo como condicionante que la medida estándar de las barras es de 6 mts (6000 mm) de largo.
ejemplo: si tengo las siguientes medidas de una misma referencia (pueden ser muchas mas): 6 unds de 2700 en una fila y 2 unds de 3200 en otra fila, la macro me da como resultado 5 barras de 6 mts  y en realidad deberían ser 4 barras de 6 mts
                                                                                             el resultado bueno debería ser 4 barras
 2700+2700=5400   5400>6000 = 1 barra                      3200+2700 = 5900     5900>6000= 1
 2700+2700=5400   5400>6000 = 1 barra                      3200+2700 = 5900     5900>6000= 1
 2700+2700=5400   5400>6000 = 1 barra                      2700+2700 = 5400     5400>6000= 1
 3200                                 >6000 = 1 barra                      2700+2700 = 5400     5400>6000= 1
 3200                                 >6000 = 1 barra
                                           total       5 barras                                                                   total     4
el error es porque la macro da el resultado por celda y no sobre el conjunto de medidas de la misma referencia 
adjunto archivo para que comprobéis.


Sub proceso()
ActiveSheet.Columns(Cool.Clear
Range("a2").Select
Do While ActiveCell.Value <> ""
fila = 1
'+++++++++++++++++++++++++++++++++
ref = ActiveCell.Value
Do While ActiveCell.Value = ref
veces = ActiveCell.Offset(0, 2)
For x = 1 To veces
Cells(fila, 5).Value = ActiveCell.Offset(0, 3).Value
fila = fila + 1
Next
ActiveCell.Offset(1, 0).Select
ubica = ActiveCell.Address
Loop
Range("e1").Select
Do While ActiveCell.Value <> ""
suma = suma + ActiveCell.Value
If suma > 6000 Then
cuenta = cuenta + 1
suma = 0
ActiveCell.Offset(-1, 0).Select
End If
If suma < 6000 And ActiveCell.Offset(1, 0).Value = "" Then
cuenta = cuenta + 1
End If
ActiveCell.Offset(1, 0).Select

Loop
Range("h65000").End(xlUp).Offset(1, 0).Value = "De la ref:  " & ref & "   " & cuenta & "  barras de 6 mts"
cuenta = 0
suma = 0
ActiveSheet.Columns(5).EntireColumn.Clear
Range(ubica).Select
Loop
'+++++++++++++++++++++++++++++

End Sub
Archivos
Archivo de prueba para optimizar el corte de perfileria.xlsm
No tienes los permisos para descargar los archivos.
(22 KB)

tyno


Hola diego, bien venido al foro.
Paso tu archivo con una solución que no requiere utilizar macros, pero que creo da el resultado que esperas.
Como verás en el archivo en el cuadro RESULTADO he utilizado una formula matricial para hallar los resultados en la columna H. Luego sería que cuestion de que simplemente acomodes las referencias de acuerdo a tu archivo original. En la formula he utilizado rangos dinámicos con nombres, por ejemplo ref, cantidad y largo, lo cual no es necesario, puedes utilizar referencias directas como por ejemplo $A$2:$A$1000000 para el rango de "referencias" por ejemplo.

Saludos
Archivos
Archivo de prueba para optimizar el corte de perfileria.xlsx
No tienes los permisos para descargar los archivos.
(14 KB)

diegof68


buenos días tyno.
te agradezco mucho el interés por ayudarme a resolver mi tema.
tu archivo estaría bien si yo necesitara la cantidad de barras por metros lineales, pero no es así como lo necesito.

yo necesito trabajar a partir de una medida estándar que es 6000 mm (6 mts), entonces de esa barra de 6 mts cortar los trozos que necesite.

la macro que tengo se acerca mas a lo que yo necesito, el problema viene cuando tengo varias unidades de más de 3000 mm (ej: 3050 mm), ya que la macro no tiene en cuenta el sobrante para otra medida(ej: 2000 mm) de otra celda con la misma referencia. y como consecuencia compraría más barras de las que necesito. ten en cuenta que no puedo unir sobrantes de las barras para cortar algún trozo que necesite.

me explico en el siguiente ejemplo (valido para la macro y tu archivo) 

cantidad                  medida
     3                           3200
     6                           1600

la macro da como resultado 5 barras pero no tiene en cuenta los 3 sobrantes de 2800 mm (éstos sobran al haber cortado 3 unds de 3200 de 3 barras de 6000 mm) para cortar 3 trozos de 1600 y los otro 3 trozos faltantes de 1600 cortarlos de 1 barra de 6000 mm. entonces el total debería ser 4 barras de 6000 mm si la macro aprovechara los sobrantes.

lo que quiero es que la macro busque una medida <= al sobrante para aprovechar al máximo los 6 mts de la barra.
en pocas palabras, no sacar el total de barras por celda (es lo que hace actualmente)


P:D: espero haberme hecho entender y reitero mi agradecimiento por tu ayuda


Un Saludo.

tyno


Hola Diego.
Creo que entiendo que se debe considerar barras enteras de 6000 mm.  Ahora pregunto, en base al archivo que te he pasado ¿me puedes indicar con algún caso porque no se da el resultado correcto? Tomemos por ejemplo la referencia ALN 387 cuyo resultado en la celda H4 ( de acuerdo a la formula que hice)  da que se necesitan 9 barras de 6000 mm ya que el pedido es 1 x 1000; 15 x 2250; 6 x 1600.
Si lo resolviéramos manualmente quedaría expresado así:

 
160016002250=5450=1 x 6000
160016002250=5450=1 x 6000
160016002250=5450=1 x 6000
100022502250=5500=1 x 6000
 22502250=4500=1 x 6000
 22502250=4500=1 x 6000
 22502250=4500=1 x 6000
 22502250=4500=1 x 6000
 22502250=4500=1 x 6000
   total=9 x 6000

Como podrás ver, si es que te entendí, parece que el resultado de la fórmula que he aplicado se corresponde con la comprobación manual, por eso quedaría que me expliques donde se presenta algún error. Es más prueba de ingresar estos datos que tu mismo has propuesto:
cantidad                  medida
     3                           3200
     6                           1600

para alguna referencia en particular y luego aplicas la fórmula matricial que esta en la columna H y verifica que el resultado sea 4.

Saludos

diegof68


hola tyno. efectivamente la cantidad de barras son correctos con tu archivo más no con la macro. quisiera que probaras con los datos que te voy a dar en tu archivo(yo ya lo hice):

ALN 387   4   de  1000
ALN 387   4   de  1900
ALN 387   3   de  3100
ALN 391   3   de  2900
ALN 391   5   de  3800
ALN 391   1   de  1500
ALN 391   3   de    700

con tu archivo el resultado son  5 barras y 8 barras respectivamente, manualmente son 4 y 7 respectivamente 
ahora, si duplicamos las cantidades serian 9 y 12 barras, manualmente serian 8 y 13 barras respectivamente.

Con la macro el resultado son 5 y 8 barras, manualmente 4 y 7 barras
duplicando las cantidades  son 10 y 14 barras, manualmente 8 y 13

como veras en unos casos me haría falta material y en otros compraría de más. crees que haya manera de que dé el resultado bien?

Un Saludo

tyno


Hola Diego.
No se si has encontrado alguna solución a este asunto, de ser así publicala por favor.
Estuve revisando estas nuevas cantidades que has presentado y efectivamente la fórmula que he establecido no da el resultado correcto. En realidad creo que esto se trata de buscar un resultado optimo más que correcto. Es decir, hay que entrar a jugar combinando las cantidades de medidas pedidas para obtener la cantidad más precisa de barras de 6000 mm. En lo que a mi respecta no se me ocurre que una función de Excel pueda cumplir con los resultados esperados y si vamos a las macros creo que sería cuestión de desarrollar un algoritmo complejo que en mi caso se escapa de las manos. He visto un software que se utilizaba para distribuir de la mejor manera posible una x cantidad de cortes de placas de madera, cuyas medidas uno establece, dentro de una placa de mayor tamaño también con una medida que pre establecíamos. Pero esto me parece que es más complejo, por que hay que entrar a combinar elementos de distintos conjuntos, no se puede simplemente sumar el total de metros pedidos para un código y dividirlo por 6000 mm ya que, como los has mencionado, no se pueden sumar fracciones de las barras para alcanzar alguna medida pedida.
Así que de mi parte Diego lamento no poder ayudarte más de lo que hice, si alguien más tiene una solución bien venida sea.


Saludos

diegof68


hola tyno.
la verdad es que esta muy complicado obtener el resultado deseado y si hablamos de algoritmo pues mi ignorancia es total. Quizás le estoy pidiendo mucho a Excel y solo puede llegar hasta ahí. espero que alguien tenga la solución (si la hay) y pueda ayudarme. De todas formas te agradezco mucho el interés que has mostrado para resolver mi inquietud.

Un Abrazo.

wibly


Hola diegof68,

Hemos tratado este tema (o similar) en otras oportunidades y no hemos a una solución (hasta recuerdo un caso en MUNDOEXCEL, foro en que muchos participabamos antes de crear UNIVERSOEXCEL).

Si puedes mira mi respuesta http://www.universoexcelforo.com/t769-distribucion-de-cortes-en-barras#4347.

Saludos

Adrián

diegof68


hola wibly, la verdad es que si es muy complejo obtener el resultado optimo, sé que hay programas de carpintería que hacen este tipo de cálculos, lo que no sé es si dan el resultado optimo o tienen un margen de error menor. como siempre, gracias a todos por el interés.

un saludo a todos.

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.