Pregunta sobre msflexgrid :comparar 2 campos del msfgd

Que tal mi pregunta es la siguiente espero ser lo suficientemente claro:
Tengo un programa en visual que me abre un archivo excel y aparecen mis datos en el msflexgrid aparecen en este 2 campos (o culumnas que me interesan) que son las de los camiones y códigos de error, tengo 11 camiones y 100 códigos de error, entonces lo que quiero hacer es tener una base de datos con los 11 camiones asociados a los 100 códigos de error y compararlos con los 2 campos (o columnas del msflexgrid) y cada vez que haya una coincidencia me las vaya sumando y las guarde por ejemplo : en mi base de datos tengo el camión 1 código de error 1 y me compare cuantos camiones 1 tienen el código de error 1 y si pilla una coincidencia me la guarde y la vaya sumando a las demás .
Base de datos msflexgrid
camion 1 codigo de error 1 camiones codigos de error
camion 1 codigo de error 2 camion x codigo de error x
camion 1codigo de error 3
camion 11 codigo de error 100
Entonces recorrerá las 2 columnas del msflexgrid (columna camiones, columna código de error) buscando si hay coincidencia con la combinación [codigo de error-camiones] y así ira haciendo un ciclo camión 1 código de error 1 ; camión 1 código de error 2 y así sucesivamente espero que lo entiendas y puedas ayudarme en este dilema desde ya

1 respuesta

Respuesta
1
¿Has pensado en hacer eso directamente en el Excel? Por que con una tabla dinámica o pivot table creo que te saldría directamente y mucho más sencillo.
Hacerlo teniendo como fuente de datos el FlxGrid puede ser pelín tedioso hay que almacenar mucha información para cada caso. Si lo puedes resolver antes de que llegue al grid mejor.
Ya me dices.
Si es una muy buena opción ya que no tengo que comparar los datos en un msflexgrid (me ahorro pega), pero el problema es que el trabajo que tengo que hacer tiene que ser lo más automatizado posible, y no siempre las tablas van a ser iguales, lo que tengo que lograr a hacer es crear una un libro más menos así
hoja camión 1
fecha 15/01/2010D  15/01/2010N  16/01/2010D  16/01/2010N 
error code
4001 1 2 3 4
4002 3 4 5 1
4003 2 0 2 0
4004 3 3 4 1
4005                             2                         2                  6                        4
hoja camion 2
fecha                    15/01/2010D   15/01/2010N  16/01/2010D   16/01/2010N
error code
4001 2 3 4 5
4002 6 3 8 4
4003 3 1 0 6
4004 4 0 6 1
4005 5 3 4 0
Entonces tengo que crear una macro que realize una tabla dinámica adaptada a todas las tablas que ingrese las cuales no serán siempre iguales (iguales en filas en columnas son iguales), y los resultados de esas tablas tengo que trasladarlas a los libros que de ejemplo mostré antes por fecha y por turno si te das cuenta hay dos fechas iguales pero con una letra al final que las distingue que son D=tuno día y N= turno noche por lo tanto cada vez que traslade los datos la macros debe ser capaz de identificar en que libro (camión 1, camion2,..., camion12) guardar los datos, en que fecha y en que turno eso es ojala se comprenda y me des alguna idea de como trapazar los datos te estaría muy agradecido desde ya gracias por tu ayuda.
Lo de 'autoguardarse' en cada archivo lo veo complicado.
Lo más sencillo probablemente sea:
- Tener un archivo EXCEL único donde tienes toda la información.
- Tener una pivot table en cada ficha de cada camión apuntando a ese Excel único de datos.
Así cuando abras la ficha de un camión actualizas la Pivot y ya tienes la información refrescada.
Habría otras opciones pero las veo complicadas a priori...
Hola experto mira mejor lo hice por visual basic lo de comparar 2 campos los hice más menos así
z = 0
For ac = 1 To MSFlexGrid1.Rows - 1
If MSFlexGrid1.TextMatrix(ac, 0) = "CE_01" And MSFlexGrid1.TextMatrix(ac, 10) = "4001" Then
z = z + 1
aqui los datos que quiero siempre van a estar en una columna fija (el 0 y el 10) lo comprobe haciendo que text1.text =z y me arrojo el valor que esperaba.
Ahora estoy en la otra parte de pasar ese valor al libro "CE_01" y en la hoja turno día o turno noche (eso lo elijo con un option) y que me gurde ese valor en la columna correspondiente a la fecha (fecha que tengo que ingresar) y en la fila correspondiente al código de error en el caso anterior en la fila donde se encuentre el código 4001.
Lo que tengo hasta el momento es una buena idea largo pero buena idea pero como soy novato se que algunos códigos están mal (la idea no) no se si le puedes echar un vistazo para corregirlo te parece aquí esta el código :
Private Sub Command5_Click()
Dim ac As Long
Dim z As Integer
Dim objExcel As Excel.Application
Dim xLibro As Excel.Workbook
Dim Col As Integer, Fila As Integer
Dim c As Integer
Dim d As Integer
Dim b As Integer
Dim a As Integer
z = 0
For ac = 1 To MSFlexGrid1.Rows - 1
If MSFlexGrid1.TextMatrix(ac, 0) = "CE_01" And MSFlexGrid1.TextMatrix(ac, 10) = "4001" Then
z = z + 1
End If
Next ac
Set objExcel = New Excel.Application
Set xLibro = objExcel.Workbooks.Open(FileName:="C:\Proyecto\CE_01.xls")
objExcel.Visible = False
With xLibro
If Option1 = False And Option2 = False Then
MsgBox "Debe elegir un turno"
End If
  If Option1 = True Then
      objExcel.Sheets("Dia").Select
      For b = cells(1, 2) To cells(1, 1000) ' aki me manda un desbordamiento de datos debe
      If DTPicker1.Value = b Then            'ser xq no es la manera correcta de recorrer los
      c = b                                                'rangos
      End If
      Next b
      For a = cells(2, 1) To cells(192, 1)
      If a = "4001" Then
      d = a
      End If
      Next a
      z = cells(c, d)
      End If
  If Option2 = True Then
      objExcel.Sheets("Noche").Select
      For b = cells(1, 2) To cells(1, 1000)
      If DTPicker1.Value = b Then
      c = b
      End If
      Next b
      For a = cells(2, 1) To cells(192, 1)
      If a = "4001" Then
      d = a
      End If
      Next a
      z = cells(c, d)
      End If
      End With
End Sub
Entonces lo que quiero es que si elije la option1 me guarde el dato z en la hoja día, entonces recorro las fechas que tengo y si la fecha que coloque en el dtpicker es igual a la fecha en alguna celda recorrida me guade esa celda, luego recorro los códigos y si algún código recorrido es igual al código que yo tengo (4001) entonces me guarde la celda también, entonces ya guadado la fila y la columna de los datos solamente guardo el valor z en la ccelda de intersección de las dos anteriores z= (c, d) c= celda guadada de la fecha, d= celda guadada del código (4001) eso es más menos lo que debería hacer este código, buen en caso de la option 2 el dato se guardara en la hoja noche solamente lo demás todo igual, estoy probando con un solo código-camión porque lo demás sera casi exactamente lo mismo excepto los códigos y el libro, eso seria mister si me echa una manito estaría reagradecido desde ya gracias por sus respuestas.
Nota: el archivo CE_01 esta ya creado con las 2 hojas(Día y Noche), en las hojas ya ingrese las fechas y los códigos de error.
Creo que has elegido un camino muy complicado para resolverlo. Disculpa que insista pero cuanto más simplifiques la solución mejor será. Al final complicar las cosas solo da problemas.
Estas pasando la información de excel a vb(grid) y luego a excel otra vez. ¿Por qué no resuelves todo en un único sitio?. Te va a ser mucho más fácil
Respecto al código que incluyes:
- El nombre de la hoja y la ruta ahora la tienes 'fija' pero debes parametrizarlo ya que hay varias.
- Eso afecta también al turno de día y noche.
- Poner los códigos fijos '4001' te va a dar problema. Debes comprobarlos por programa. Si no vas a terminar codificando todos los posibles valores.
- Los bucles (for) no se hacen así: Debes hacer dos: uno para las filas y otro dentro para las columnas. Es la única forma.
- Con todo eso no termino de comprender el algoritmo que quieres hacer.
Hola experto si quizás tengas razón me estoy complicando, pero no se trabajar muy bien con las tablas pivot o tablas dinámicas, el otro día estuve intentando pero no me resultó mucho mira te comento para usar tablas pivot necesito una macro personal para que se apliquen a todas las tablas ya que estaré recibiendo 2 tablas diarias y todas con distintos datos, ahora al aplicar tabla dinámica a esa tabla tengo que extraer esos datos y enviarla a mi otra tabla en donde estará toda la información sin mencionar que esa otra tabla también tiene que tener una tabla dianmica, ahora como lo hago para traspasar toda la información de mi primera tabla dinámica a la otra tabla general esa es mi pregunta, como lo harías tu, mira que después tengo que consultar en la tabla general cuantos errores por sucedieron entre tal fecha y tal fecha, cual fue la duración del código tanto en el mes, cuantos códigos de error por tuvo el camión tanto en el mes, es decir, tengo que crear una tabla dinámica general que sea flexible para todas mis consultas y que la información la vaya separando no acumulando.
Con respecto al código que puse, la hoja y ruta que puse son fijas porque se aplicaran al camión 1 y código de error 4001 solamente, osea todo ese código es para ese camión y código de error solamente, quizás dirás tremendo código bueno así se me ocurrió, obviamente después vendrá el mismo código para el mismo camión y para el código de error 4002.
Y para explicarte mejor mi algoritmo aquí va la explicación :
Ese código que tengo es solamente para un camión y 1 código de error especifico por eso las rutas están fijas, que hace el código primeramente compara que en las 2 columnas y en la misma fila este el camión 1 y el código de error 4001 y me guarda en z todas las coincidencias, después elegiré option 1 o option 2 al elegir cualquiera elegiré la hoja donde guardar los datos, luego recorreré la fila 1 y todas las columnas (DONDE TENDRÉ TODAS LAS FECHAS) comparando esas celdas con las fechas que coloque en el dtpicker y cuando ambas sean iguales me guarde la celda (a), después recorreré todas las filas de la columnas 1 (donde tendré excito los códigos)y la comparare con el código 4001 y cuando sean iguales me guarde la celda (b), entonces guardare el dato z en la celda (b, a) y tendré el dato registrado en el libro, pero insisto ese sera solamente para el camión 1 y código de error 4001, después repetiré el mismo código para todos los demás cambiándole las rutas solamente, ojala ahora entiendas mi algoritmo el cual es solo para traspasar los datos.
Si tuvieras una idea de como hacer lo mismo en tablas dinámicas te estaría muy agradecido.
Enviame un ejemplo con un par de tablas a [email protected] a ver si podemos resolver este tema de una forma ágil.
Ok amigo te enviare algunos archivos por cualquie cosa mi correo es (xxxxxx), si no te molesta te agregare al msn por cualquier consulta
Creo que te conteste a esto por mail y me sigue saliendo activa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas