Necesito Macro para auto-relleno de celdas según identificación en C7

9 envíos / 0 nuevos
Último envío
JoaoM
Imagen de JoaoM
Offline
última acción: Hace 1 año 2 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 15/12/2011 - 23:46
Puntos: 3040
Necesito Macro para auto-relleno de celdas según identificación en C7

Hola

Gracias por proximas respuestas de expertos en la materia.

Tengo una macro en Modulo Inicio_Print_Copia llamada Sub Copia_Factura(Optional X As Long) que hace una copia de factura hacia la hoja “Copias_Factura”. NO se trata de esta macro sino requerir una otra.

 Esta es la copia en la hoja “Copias_Factura” que viene de la hoja “Factura” por via de la macro que menciono

  ¿Porque no quiero validación?:

 

Para ser con plan de validación de C7 Hoja “Factura”, 1º tendría que anteriormente haber registrado TODOS clientes que aparezcan y eso es imposible porque, suponiendo que hago un promedio de 1500 ventas al mes serian 39.000 x 26 días = 468.000 multiplicado por un promedio de 4 líneas cada venta = 1.872.000 líneas en una plantilla al año, mucho para una sola plantilla (libro).

 Dividido por 100.000 líneas por libro = serian al año = 18,72 libros.

 

¿Que pretendo?

Pretendo que al escribir yo una identificación de alguien en C7 De Hoja7 “Factura” y pisar Enter,

SI existe esa identificación en B de Hoja “Copias_Factura”, que se auto-llenen las celdas C8, C9, B10, C11 y E12 con todos los datos referentes a la identificación encontrada en Hoja8 “Copias_Factura” y se ponga el fondo de la C7 en Verde Claro.

 

 

Si piso Enter y no existe la identificación escrita en C7 De Hoja7 “Factura” en la B de Hoja8 "Copias_Factura" que se ponga la celda C7 en Rojo Claro y sabemos que tengo que escribir todos los nuevos datos manualmente en C8, C9, B10 y C11, E12 queda de fuera porque aún no existe Ultima Fecha en Hoja8 “Copias_Factura” esta identificacion con aluna venta

 

 

Gracias. Dejo libro

 

AdjuntoTamaño
File proyecto_3_ya_se_excel.xlsm87.4 KB
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Cuando dices "todos los datos

Cuando dices "todos los datos", ¿te refieres solo a los datos de factura (nombre, dirección, RUC...) o también a los de productos (cód prod, descripción, precio...)?

JoaoM
Imagen de JoaoM
Offline
última acción: Hace 1 año 2 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 15/12/2011 - 23:46
Puntos: 3040
Hola cron, gracias por venir

Hola cron, gracias por venir hasta el tema, lo cual mui agradecido por tu empeño en darme una solucion

Pues cuando digo TODOS los datos me refiero a los datos del cliente SI EXISTE esa identificacion en la columna B de hoja "Copias_Factura".

Escribo tu identificacion en la celda C7 de hoja7 "Factura" y piso Enter, SI EXISTE tu identificacion en B de hoja "Copias_Factura", debe colocar con fondo de C7 en verde Y se auto-llenan las celdas C8, C9, B10, C11 Y E12 en la hoja "Factura" así:

Macro que esta en el evento _Change de Hoja7

         With Hoja8
'Si existe el RIF/CI

Color verde fondo de C7 y pasa los datos;

 de la columna C de "Copias_Factura" hacia la C8 de "Factura"

 de la columna D de "Copias_Factura" hacia la C9 de "Factura"

 de la columna E de "Copias_Factura" hacia la B10 de "Factura"

 de la columna F de "Copias_Factura" hacia la C11 de "Factura"

 de la columna G de "Copias_Factura" hacia la E12 de "Factura"

        End With

'Si no existe

Else

Color rojo fondo de C7 y

sigue la macro que está en el evento _Change de Hoja7

 

Escribo tu identificacion en la celda C7 de hoja7 "Factura" y piso Enter, SI NO EXISTE tu identificacion en B de hoja "Copias_Factura", la C7 se colocará con fondo ROJO me obliga (y es lo correcto) a llenar MANUALMENTE las celdas C8, C9, B10 y C11 en la hoja "Factura", ¿porque en ROJO? pues el cliente (tu identificacion) aun no existes en la hoja "Copias_Factura" y me lleva a tener que yollenar esas celdas manualmente, ESO ES LO CORRECTO.

Creo yo que seria o será en el codigo de la hoja7 "Factura" evento  _Change, algo asi, (digo yo, no se si será).

No estoy familiarisado ni llego a saber como hacer, por mi falta de experiencia en esto, pues mis 68 y mi ocupacion, no me dan para resolver

Visualisa las 2 imagenes en que la C7 esta en la 1ª verde y la 2ª rojo, verde porque existe, rojo porque no existe

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Efectivamente, es buena idea

Efectivamente, es buena idea ponerlo en el evento Change de la Hoja7. Hay que detectar primero si lo que se modificó fue la celda C7. Yo eso lo haría así:

 

If Target = Range("C7") Then
    <------------poner aquí lo que queremos que haga
Else
    <------------poner aquí todo lo que hay ahora dentro del evento Change
End If

 

Una vez establecida la estructura, empezamos a poner lo de dentro. El segundo bloque es lo que ya tienes. Ataquemos el primer bloque:

Si has modificado C7, tienes que comprobar si el valor está o no en la Hoja8 para obrar en consecuencia. Yo veo más fácil hacerlo mediante una función colocada en alguna celda que no se use (por ejemplo en D7, poniendo el texto de color blanco para que no se vea). De esta manera, pondría en D7 lo siguiente:

=SI.ERROR(COINCIDIR(C7;Copias_Factura!B:B;0);"--")

De esta manera, si el valor que introduces en C7 existe en Copias_Factura, entonces en D7 se escribe la fila donde lo ha encontrado. Si no existe, entonces se escribe -- en la celda. Como has cambiado el formato de D7 para que el color del texto sea igual que el del fondo, no verás nada. Pero ahí está, y se puede utilizar. El primer uso que le damos es para cambiar el color de las celdas que queremos que se pongan en rojo (para rellenarlas). Esto lo haremos mediante formato condicional. En segundo lugar, lo utilizaremos en una macro para rellenar los valores, en caso de que en D7 haya un valor diferente a --

Primero: con botón derecho sobre C7, elige formato de celdas. Pestaña relleno. Selecciona el color verde. Esto hace que cuando el valor es válido, la celda C7 se pone verde.

Segundo: Seleccionada C7, selecciona Formato Condicional, Nueva regla. Ahí, selecciona la opción "Utilice una fórmula que determine las celdas para aplicar formato". En el diálogo "Dar formato a los valores donde esta fórmula sea verdadera" tienes que poner:

=$D$7="--"

No olvides el = del principio. Si no lo pones, no funcionará.

Después, en Formato... selecciona la pestaña Relleno, y ahí el color rojo. Si se cumple que en D7 el valor es "--", entonces se pone de color rojo.

Lo siguiente es poner de color rojo también las celdas a rellenar en caso de que el dato no exista. Para eso, vuelve a Formato Condicional, Administrar reglas, y selecciona la regla que hemos creado antes. En el apartado "Se aplica a" debe poner =$C$7

Simplemente añade las otras celdas. Cuando termines, tendrás algo parecido a:

=$C$7;$C$8;$C$9;$B$10;$C$11

De esta manera, estas serán las celdas que se pintarán de rojo en caso de que el valor de C7 no sea válido. Si lo es, todas las celdas quedan en blanco, excepto C7, que se pinta de verde.

Ya solo nos queda la macro que comprueba que el valor de C7 es válido, y entonces copia los valores en la pestaña Factura.

En la parte primera de la macro que pusimos arriba tienes que escribir algo como esto:

If Cells(7, 4).value = "--" Then
    Range("C8:D8").ClearContents
    Range("C9:D10").ClearContents
    Cells(10, 2).ClearContents
    Cells(11, 3).ClearContents
    Exit Sub
Else
    fila = Cells(7, 4).value
    Cells(8, 3).Formula = "=Copias_Factura!C" & fila
    Cells(9, 3).Formula = "=Copias_Factura!D" & fila
    Cells(10, 2).Formula = "=Copias_Factura!E" & fila
    Cells(11, 3).Formula = "=Copias_Factura!F" & fila
End If

 
Espero que te sirva. Te adjunto la excel modificada con lo que te pongo, por si necesitas echarle un vistazo, aunque lo ideal ya sabes que es entender cada paso para poder hacerlo en el futuro.
 
Un saludo

 

 

AdjuntoTamaño
File proyecto_3_ya_se_excel_1.xlsm91.47 KB
JoaoM
Imagen de JoaoM
Offline
última acción: Hace 1 año 2 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 15/12/2011 - 23:46
Puntos: 3040
 Hola cron, gracias por tu

 

Hola cron, gracias por tu tiempo

Valiosa respuesta para tampoco agradecimiento, pero aquí en Venezuela no sabemos como hacer porque el gobierno hace que se compre con # pero paga con bolívares y para fuera nada de #. Empresarios, campesinos, agricultores están en la peor situación para adquirir sea materia prima para producir como semillas para sembrar.

Bien, a lo que vengo:  He entendido un poco de lo que dejas.

1º copié siguiendo tu mensaje, leí y REleí, pero no llegue a saber el porqué.

Decii bajar el ejemplo que subiste y al ejecutar, me hace lo mismo, es decir, no hace nada, solo colorea.

Lleno la celda C7 con algún dato identificativo existente en B de Hoja8, si se pone verde C7, pero no llena las demás celdas; C8, C9, B10, C11, E12

Claro está, si no existe la identificación escrita en C7 en B de “Hoja8”, se pondrán en rojo las celdas

Si existe el RIF/CI

Color verde fondo de C7 y pasar los datos;

 de la columna C de "Copias_Factura" hacia la C8 de "Factura" 'NOMBRE

 de la columna D de "Copias_Factura" hacia la C9 de "Factura" 'DIRECCION

 de la columna E de "Copias_Factura" hacia la B10 de "Factura" 'B10 Cod-A/Pueblo/Ciudad

 de la columna F de "Copias_Factura" hacia la C11 de "Factura" 'TELEFONO

    Cells(12, 5).Formula = "=Copias_Factura!G" & FILA 'ULTIMA FECHA 'ESTA, HACER LO MISMO DE LAS ANTERIORES

 No se si hay que aumentar el # de 4 a 6 -----If Cells(7, 4).value = "--" Then

 

En el caso de que las celdas C8, C9, B10, C11, E12 este ocupadas, no las limpia si la C7 se pone verde, si la identificación es válida en Hoja8 (B) deveria vaciar el contenido existente pero no lo hace

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
HolaA mí me funciona

Hola

A mí me funciona perfectamente. ¿Has activado las macros? Al descargarlo de internet, Excel automáticamente las bloquea para protegerte frente a posibles códigos indeseables. Pero en este caso el código es casi todo tuyo, salvo lo que te he ido escribiendo por aquí.

Un saludo

JoaoM
Imagen de JoaoM
Offline
última acción: Hace 1 año 2 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 15/12/2011 - 23:46
Puntos: 3040
Hola cron graciasLas macros

Hola cron gracias

Las macros estan activadas, mas aun, al abrir el libro me pide Activar la edicion y luego

Habilito las macros

pero no me auto-llena las demas celdas

Office 2016

La macro de la hoja7 en si funciona mui bien pero la parte agregada no

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Pues no sé, pon algún break

Pues no sé, pon algún break point en el código y ve siguiéndolo pulsando F8 línea a línea para ver por qué no se ejecuta.

JoaoM
Imagen de JoaoM
Offline
última acción: Hace 1 año 2 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntos
alta: 15/12/2011 - 23:46
Puntos: 3040
Al escribir una

Al escribir una identificacion existente en la hoja Copias_Factura en C7 y pisar Enter la C7 se pone verde como debe ser pero no se rellenan las demas celdas correspondentes.

Error no manda, ninguno.

Ya vere que puedo hacer, si es que logro.

Gracias cron por tu precioso tiempo