Excel - macro copiar segun criterio y cambio color

 
Vista:
sin imagen de perfil
Val: 21
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

macro copiar segun criterio y cambio color

Publicado por Ana (27 intervenciones) el 10/04/2024 12:22:27
Buenos días,
Tengo que añadir/modificar en este excel lo que hacen varias macros, que no se si será mejor empezar de nuevo otra macro o intentar modificar las que tengo.
Os explico, el excel coge datos de archivos csv y los copia según una hoja de plantilla, con los nombres de los archivos csv. A parte tengo 3 hojas en el excel que se llaman HTA-CARGADOR-MAKINO,, HTA-CARGADOR-DOSSA y HTA-CARGADOR-MAKINO-A81 , estas hojas están siempre en el excel .
Después hay una hoja que se llama List.Hta.Montada, en la cual se copian datos de las hojas según un criterio.

El criterio es que las herramientas estén montadas, o bien que la celda O sea si o que la celda A este en rojo.
Lo que necesito modificar de las macros, que son Sub CopiarYLimpiarDatos() y Sub CambiarColorCelda(), es lo siguiente:
en las hojas HTA-CARGADOR-MAKINO,, HTA-CARGADOR-DOSSA y HTA-CARGADOR-MAKINO-A81 las herramientas siempre están cargadas y por lo tanto la celda A esta en rojo (RGB255,0,0) y la celda N es SI. En las demás hojas puede suceder 2 cosas, la primera es que estén con la celda A en rojo pero no marcado la celda M como Hta_Montada y por lo tanto la celda O sea FALSO, esto es porque busca en la hoja List.Hta.Montada y si ve que el numero de las celdas A esta las pone en rojo en las demás hojas y así sabemos que esas herramientas estan montadas. Lo que necesito cambiar es que cuando yo marco una herramienta como montada, en las hojas que no son HTA-CARGADOR-MAKINO,, HTA-CARGADOR-DOSSA y HTA-CARGADOR-MAKINO-A81 , el rojo cambia a (RGB255,153,153) y quiero que cuando copie a la hoja List.Hta.Montada lo haga en ese rojo también. Es decir las herramientas que hay comunes pero que vienen de las hojas HTA-CARGADOR-MAKINO,, HTA-CARGADOR-DOSSA y HTA-CARGADOR-MAKINO-A81 , las marque en rojo, pero las coincidencias de los números de las otras hojas que están en rojo claro al copiarlas a List.Hta.Montada lo haga en rojo claro, además de que cuando cambie el color si la coincidencia con el numero de la columna A están en rojo claro también lo ponga en rojo claro.
Las coincidencias con las hojas HTA-CARGADOR-MAKINO,, HTA-CARGADOR-DOSSA y HTA-CARGADOR-MAKINO-A81 serán en rojo (255,0,0) pero las coincidencias que no están esas hojas sean en rojo claro .

En el excel que adjunto la hta con Tool_number 685, la he marcado en la hoja 006-0295 y lo pone en rojo claro pero al ejecutar las macros en la hoja 006-0293 la pone en rojo oscuro y en la hoja List.Hta.Montada las 2 las pone en rojo oscuro cuando en los 2 casos debería ser rojo claro

Muchas gracias y espero que lo podáis entender porque la verdad que leyéndolo no se si lo he explicado bien.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

macro copiar segun criterio y cambio color

Publicado por Antoni Masana (2478 intervenciones) el 12/04/2024 14:01:50
Buenas,
Antes de empezar con tu problema le he dado un vistazo al código y a los datos.

Te comento unas cuantas cosillas a tener en cuenta

- Hay 12 Módulos y la mayoría están vacíos los he borrado y puesto todo el código en uno solo.
- Mirando el código he visto dos cosas fuera de lugar
- o El Option Explicit debe estar en la primera línea de código.
- o Las constantes no se declaran como tipo string o numérico.

La macro que se ejecuta al abrir el Excel no la puedo probar porque no tengo los ficheros cvs.

Hay unos 30 procedimientos (SUB) ¿Son todos para poderlos ejecutar de forma manual o hay alguno que no debe ejecutar el operador? En este último caso pon Private Sub y no serán visibles a la hora de buscar las macro por parte del operador.

Y después de este rollo vamos a ver tu consulta:

En esta frase:

Después hay una hoja que se llama List.Hta.Montada, en la cual se copian datos de las hojas(1) según un criterio.
El criterio es que las herramientas estén montadas, o bien que la celda O sea si o que la celda A este en rojo.

(1) ¿De que hoja hoja hace referencia?

He intentado entender la secuencia de inicio al abrir el Excel

Al abrir el libro se ejecuta:
1
2
3
4
5
6
7
Workbook_Open
    ActualizacionAutomatica
        MacrosJuntas
            Open_csv
            EliminarHojasNoEnRuta
            CopiarYLimpiarDatos
            CambiarColorCelda

Y el procedimiento ActualizacionAutomatica se ejecuta a los 10 minutos de finalizar.

Esto supongo que es para ir actualizando el libro.

Para poder verlo con más claridad me he montado 2 módulos, en el primero los procedimientos descritos más arriba y en el segundo el resto.

Intento entender esto:

Lo que necesito modificar de las macros, que son Sub CopiarYLimpiarDatos() y Sub CambiarColorCelda(), es lo siguiente:
en las hojas HTA-CARGADOR-MAKINO,, HTA-CARGADOR-DOSSA y HTA-CARGADOR-MAKINO-A81 las herramientas siempre están cargadas y por lo tanto la celda A esta en rojo (RGB255,0,0) y la celda N es SI. En las demás hojas puede suceder 2 cosas, la primera es que estén con la celda A en rojo pero no marcado la celda M como Hta_Montada y por lo tanto la celda O sea FALSO, esto es porque busca en la hoja List.Hta.Montada y si ve que el numero de las celdas A esta las pone en rojo en las demás hojas y así sabemos que esas herramientas estan montadas. Lo que necesito cambiar es que cuando yo marco una herramienta como montada, en las hojas que no son HTA-CARGADOR-MAKINO,, HTA-CARGADOR-DOSSA y HTA-CARGADOR-MAKINO-A81 , el rojo cambia a (RGB255,153,153) y quiero que cuando copie a la hoja List.Hta.Montada lo haga en ese rojo también. Es decir las herramientas que hay comunes pero que vienen de las hojas HTA-CARGADOR-MAKINO,, HTA-CARGADOR-DOSSA y HTA-CARGADOR-MAKINO-A81 , las marque en rojo, pero las coincidencias de los números de las otras hojas que están en rojo claro al copiarlas a List.Hta.Montada lo haga en rojo claro, además de que cuando cambie el color si la coincidencia con el numero de la columna A están en rojo claro también lo ponga en rojo claro.
Las coincidencias con las hojas HTA-CARGADOR-MAKINO,, HTA-CARGADOR-DOSSA y HTA-CARGADOR-MAKINO-A81 serán en rojo (255,0,0) pero las coincidencias que no están esas hojas sean en rojo claro .

Pero no entiendo nada por que no se de que va esto. Entiendo que cuando abres el Excel y de forma periódica lee uno o varios ficheros CVS que los graba en el Excel en una hoja que se llamara igual que el archivo (proceso Open_CVS). Hasta aquí bien.

Los siguiente pasos no los entiendo, o mejor dicho no se lo que hacen o lo que quieres que hagan, lo cual dificulta entender tu problema y encontrar una solución.

Acabo de ver una, no se si llamarlo incongruencia, que me chirria.

Los procedimientos Open_csv y EliminarHojasNoEnRuta no me gustan como están, si entiendo lo que hacen.
El primero crea unas hojas nuevas de ficheros CVS y el segundo borra las hojas de ficheros CVS cargas anteriores.
Porque no hacerlo al rebes: borra las hojas de ficheros CVS y cargar los nuevos CVS, es más simple y menos posibilidad de error.

En este el procedimiento de borrar hojas queda de esta forma

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub EliminarHojasNoEnRuta()
    Dim ruta As String
    Dim archivos As String, NOMBRE_HOJA As String
    Dim ws As Worksheet
    Dim hojaEncontrada As Boolean
 
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
 
    ' Recorre todas las hojas del libro
    For Each ws In ThisWorkbook.Worksheets
        ' Verifica si la hoja debe mantenerse
        If Not ws.Name = "PLANTILLA" And _
           Not ws.Name = "List.Hta.Montada" And _
           Not ws.Name = "HTA-CARGADOR-MAKINO" And _
           Not ws.Name = "Lista Archivos" And _
           Not ws.Name = "HTA-CARGADOR-DOSSA" And _
           Not ws.Name = "HTA-CARGADOR-MAKINO-A81" Then
 
           ws.Delete
        End If
    Next ws
 
    ' Vuelve a activar la pantalla y las alertas
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

En conclusión me resulta difícil ayudarte sin entender que se supone que hacen las macros implicadas


Me he enrollado mucho espero no ser demasiado pesado.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

macro copiar segun criterio y cambio color

Publicado por Ana (27 intervenciones) el 16/04/2024 11:53:34
Buenos días
Lo primero muchas gracias por tu ayuda.
Lo segundo es que mi nivel de macros es muy limitado y todas estas macros las he ido “haciendo” a través de búsquedas, por lo que puede que muchas no estén correctas del todo.
Y lo tercero es que de como nació este Excel a como está ahora no tienen nada que ver, me explico de primeras solo tenia que copiar los archivos csv a un Excel pero se han ido añadiendo cosas y puede que haya cosas que se repitan o que no sean muy lógicas.
Te explico un poco para que es este Excel. Se trata de gestionar las herramientas que hay en distintas máquinas y cuáles de ellas están o no montadas en las distintas máquinas (actualmente hay 3 máquinas). Los archivos csv son diferentes proyectos/trabajos que se están haciendo en ese momento con las herramientas que se necesitan para hacer el trabajo. Estos archivos salen del programa de diseño y, mientras el trabajo no esté finalizado están en la carpeta (ruta). A parte de los archivos csv, existen 3 hojas en el Excel : HTA-CARGADOR-MAKINO, HTA-CARGADOR-DOSSA y HTA-CARGADOR-MAKINO-A81), estas son las 3 máquinas que hay. Estas hojas no sufren muchos cambios, y si hay que incluir o quitar alguna herramienta se hace de forma manual. En estas 3 hojas todas las herramientas están marcadas como Hta_Montada, ya que siempre son herramientas que están en la máquina. Pues bien, al marcar como Hta_Montada (columna L) su respectiva celda en la columna A se pone en rojo (RGB 255,0,0). Para poder tener una visión global de todas las herramientas montadas está la hoja List.Hta.Montada, aquí lo que se hace es copiar todas las herramientas que están montadas, además de indicar de que proyecto o maquina vienen (columna M). Además, sirve para poder hacer de “base de datos” y poder poner en rojo aquellas celdas A de los distintos proyectos que en principio no han sido marcadas (columna M) pero si están montadas, porque en otro proyecto o maquina ya ha sido clicado. Me explico al copiar todos los datos a la hoja List.Hta.Montada, pasan todos los datos que o bien, tengan marcada la celdas M (en proyectos 000-0000) o las celda L (en las maquinas) o la celda A este en rojo. Macros: Sub CopiarYLimpiarDatos() Sub CambiarColorCelda()
Lo que necesito cambiar es el tema de los colores rojos. Primero todas aquellas herramientas que estén en las hojas de máquinas: HTA-CARGADOR-MAKINO, HTA-CARGADOR-DOSSA y HTA-CARGADOR-MAKINO-A81, van en color rojo oscuro y cuando busca coincidencias (columna A de todas las hojas con el mismo numero) y es igual ponerlo en rojo oscuro, pero cuando haya herramientas repetidas en diferentes proyectos que no están en las hojas de maquinas ponerlo en rojo claro (RGB 255,153,153). Por ejemplo, en el Excel que adjunto en las hojas 006-0293 y 006-0295 las celdas desde la A 2 a la A8 están en rojo oscuro, y esta bien, porque esas herramientas están en alguna o en todas las hojas de máquinas, lo que quiero es que ahora, por ejemplo yo marco en la hoja 006-0293 la herramienta 685 (A13) como montada al clicar la celda M13, y automáticamente la celda A13 se pone en rojo claro (RGB 255,153,153). Pues bien yo al ejecutar la macro Sub CopiarYLimpiarDatos esa fila la va a pasar a la hoja List.Hta.Montada y cuando ejecute la macro Sub CambiarColorCelda va a buscar si hay coincidencias y poner en rojo aquellas celdas A que no estuviesen y tienen que estarlo, en este caso en la hoja 006-0295 la celda A 17, pero en este caso no debe ponerla en rojo oscuro sino en rojo claro, ya que no esta en ninguna de las hojas de máquinas y por lo tanto no son herramientas fijas sino que esta en un trabajo (000-0000).
hay mas macros hechas pero para esto creo que son las que neceistas saber, las demas van despues de poder hacer esto bien.
Macros:
Sub Open_csv(): copiar los datos desde los archivos csv
Sub EliminarHojasNoEnRuta(): eliminar las hojas creadas de proyectos los cuales ya no están en la ruta.
Sub CopiarYLimpiarDatos() : copiar datos a List.Hta.Montada que cumplan las condiciones de o bien estar clicada como hta montada o la celda a este en rojo
Sub CambiarColorCelda(): buscar si hay coincidencias y poner en rojo aquellas celdas A que no estuviesen y tienen que estarlo
Sub MacrosJuntas(): ejecutar varias macros
Sub ActualizacionAutomatica(): actualizar el libro cada cierto tiempo

Muchas gracias y espero que se pueda entender.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

macro copiar segun criterio y cambio color

Publicado por Antoni Masana (2478 intervenciones) el 17/04/2024 22:56:30
No se exactamente que es lo que necesitas hacer.

Creo entender que necesitas una macro que en función de lo que marque la casilla de la columna M cambie el color en la columna A.
No veo o no he sabido ver en tus macros que se modifique la columna M o se verifique su valor.

En las celdas de la columna M no hay ningún valor, el valor esta en el Objeto incrustado en la celda. Este objeto no ejecuta ningún evento por lo que no se puede solucionar con macros
La forma de hacerlo es con un formato condicional. Pasos a seguir:
- Ves a la hoja PLANTILLA.
- Selecciona las celdas de la columna A, puedes seleccionar toda la columna o mejor el rango A2:A120
- Selecciona la pestaña Inicio
- Selecciona Formato condicional
- Selecciona Nueva regla
- En Seleccionar un tipo de regla: selecciona la ultima: Utilice una fórmula que determina las celdas para aplicar fórmato
- En Dar formato a los valores donde esta fórmula sea verdadera: escriba: =N2
- Selecciona el color ROJO OSCURO en Vista previa.
- Aceptar.
- Aceptar.

Problema resuelto.

Te miro como resolver el problema del Rojo claro.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

macro copiar segun criterio y cambio color

Publicado por Ana (27 intervenciones) el 19/04/2024 12:44:37
Muchas gracias Antoni .
Lo del rojo claro, la verdad que me está costando un montón.
Y con eso, hasta la fecha, tendría acabado el Excel.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

macro copiar segun criterio y cambio color

Publicado por Antoni Masana (2478 intervenciones) el 19/04/2024 14:38:07
He encontrado una solución para el ROJO CLARO con un formato condicional.

En este caso se colorea la columna B y se añade una función en la columna Q.

La regla del formato condicional es esta:

GESTION-HTA-1

P.D. el rango de la columna B en el formato condicional debe ser $B2:$B$120 y no $B$2:$B$4



Y la función es esta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Function Masana(Numero, Valor)
    Dim H1 As Long, H2 As Long, H3 As Long
    On Error Resume Next
 
    H1 = 0
    H1 = Application.WorksheetFunction.VLookup(Numero, Sheets("HTA-CARGADOR-MAKINO").Range("A:A"), 1, True)
    H2 = 0
    H2 = Application.WorksheetFunction.VLookup(Numero, Sheets("HTA-CARGADOR-DOSSA").Range("A:A"), 1, True)
    H3 = 0
    H3 = Application.WorksheetFunction.VLookup(Numero, Sheets("HTA-CARGADOR-MAKINO-A81").Range("A:A"), 1, True)
 
    If Valor Then
        Masana = IIf(H1 > 0 And H2 > 0 And H3 > 0, True, False)
    Else
        Masana = False
    End If
End Function

Recibe dos parámetros:

- El valor de la columna A - Tool_number
- El valor de la columna N - Hta _Montada

Si el valor es TRUE verifica si existe el número en las tres hojas y devuelve TRUE.

LA REGLA:

1
2
3
4
columna N+Q - True  + True   =  No marca la celda
columna N+Q - True  + False  =  Colorea la celda  (Celda A en rojo y falta en las hojas HTA-CARGADOR-*)
columna N+Q - False + True   =  No se puede dar
columna N+Q - False + False  =  No marca la celda




Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar