Validación de celda con lineas vacias entremedias

16 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
Validación de celda con lineas vacias entremedias

Hola amig@s

Vengo con un ejemplo y pedir a algún experto que me ayude en una celda (C7) que está con validación de datos, pero desde donde capta (debe ser ahí, Hoja Copia_Facturas, columna B) las capturas contienen líneas vacías entremedio.

Quisiera poder tener esa celda (C7) que no me mostrara las líneas vacías existentes.

Gracias

Asi está en la hoja Copia_Faturas  --------   ---------------   Asi quiero ver en la celda C7 validada

 

 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Puedes poner los datos en

Puedes poner los datos en otro sitio, donde se ordenen sin espacios intermedios, y tomar de ahí el dato. Esto lo puedes hacer con VBA o con funciones directamente.

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
Copiar datos de columna B a la columna R sin entrelineas

Si eso pense que pudiera ser una de las soluciones, tipo filtro.

Macro que Al clicar en la flecha de la celda de validacion macro para que filtre esos datos a una otra hoja o en una columna de la misma hoja.

El problema que tengo es que no estoy capacitado para crear algo así, lo mui basico hago, copiando macros o lineas de otras macros con mas o menos el mismo fin, pero editar, construir crerar una macro, no tengo conocimiento para tan profundo como eso.

EDITO:

Dejo imagen de la hoja donde se guardan las facturas de las compras de los clientes

Los espacios tiene que existir para separar cada factura. Para la celda C7 (con validacion de datos) de la hoja7(Factura) la captación es desde la columna B de esta hoja8(Copias_Factura), por esta razon aparecen los espacios vacios en la Celda C7 (con validacion de datos).

 Si una rutina que tambien copie y pegue lo de la C7 hacia la columna R tambien, y coloque el dato uno debajo del otro a partir de R2, si serviria mui bien

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Sin embargo, sí sabes hacerlo

Sin embargo, sí sabes hacerlo a mano, quiero decir, copiar, irte a la otra pestaña, ordenarlo alfabéticamente, y definirlo con un nombre de rango. Puedes grabar una macro y luego adaptarla a lo que necesites exactamente. Luego, cuando selecciones el rango desde el que rellenar el combo, puedes hacer referencia al rango por su nombre. Así cada vez que varíe el rango con la macro, no habrá que redefinir el combo.

 

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
Pido me disculpes por mi

Editado:

Solo para que veas una de las plantillas que tengo con ayuda de muchos expertos

 

AdjuntoTamaño
File lista_de_repuestos_2.xlsm517.85 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 tus

Hola cron, gracias por tus consejos y ayuda espontanea

HIce lo que me recomendaste = Seleccioné el rango desde R2 hasta R2500, active la grabadora y ordene

De la seleccon que estaba desde R2 a R2500, cree un nombre de rango (columna_R). Me fui a la celda C7 en la hoja7, y luego a Pestaña Datos/Validacion de datos, quite lo que tenia y acoloque =columna_R. Funciona pero es que el espacio vacio desde la linea 27 hasta la 2500 en la celda C7 ase muestra, aqui si que no voy porque no se que hacer para que ese espacio no sea visible en la validacion de C7 cuando se abre el desplegable.

Esta la macro que me salio

Sub Col_R()
    Range("R2:R2500").Select
    ActiveWorkbook.Worksheets("Copias_Factura").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Copias_Factura").Sort.SortFields.Add Key:=Range( _
        "R2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Copias_Factura").Sort
        .SetRange Range("R2:R29") '¿porque me da este rango?
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

¿Podrias acomodarme la macro, quitandole lo inecesario? "y agregando lo que veas que hace falta, porque es para integrar a la Sub Copia_Factura que ya es un tanto larga

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Lo que he hecho es lo

Lo que he hecho es lo siguiente:

1º- Modifica el nombre "CodigoCliente". Entra en Fórmulas|Administrador de nombres, y en la ventana que se te abre selecciona CodigoCliente.
En el espacio que queda abajo pon esto (que es parecido a lo que tenías):

 =DESREF(Copias_Factura!$R$1;0;0;CONTARA(Copias_Factura!$R:$R);1)

2º- He modificado un poco tu código. Lo comento sobre el texto:

    Range("R1:R500").Select
    Selection.Clear                      <--------------preparo la columna R vaciando los datos
    Range("B2:B500").Select
    Selection.Copy                      <--------------copiamos los datos de la columna B
    Range("R2").Select
    ActiveSheet.Paste                   <------------los pegamos en R
    Range("R1:R500").Select
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("Copias_Factura").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Copias_Factura").Sort.SortFields.Add Key:=Range( _
        "R1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal                                                                              <------------------------definimos el método de ordenación
    With ActiveWorkbook.Worksheets("Copias_Factura").Sort
        .SetRange Range("R1:R500")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply                                                           <------------------------y lo aplicamos
    End With


Espero que te sirva

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, buen dia y que

Hola cron, buen dia y que estes bien

Pues hice la prueba.  Coloque la macro en un modulo normal y la llamo desde la macro Copias_Factura con Call pegaR y el resultado es este; pega parte de la factura a partir de R pero de la hoja Factura, no en la hoja Copias_Factura que era donde dweberia pegar lo que se G-31410845-0 que viene de C7 de la hoja Factura.

Parece que le falto Sheets("Copias_Factura") al iniciode tu macro

 

Probe con colocarle

Sheets("Copias_Factura")

    Range("R1:R500").Select

si va a la hoja Copias_Factura pero hace un pegue de la factura totalmente desordenado. el pegue de la factura no hace falta hacerlo porque para eso esta la macro, lo que si hace falta es el pegue SOLO de la B en R de la hoja Copias_Factura pero sin vacios

Gracias cron por tu gentil colaboración y ayuda

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Yo lo he probado sobre el

Yo lo he probado sobre el primer archivo que adjuntaste y funciona correctamente. Si lo que tienes ahora es diferente, tendrás que ajustarlo.

Si quieres cambiar de hoja, tienes que poner Sheets("Copias_Factura").Activate

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
El libnro es el mismo

El libnro es el mismo, misma macro y todo

La macro sub Copia_Factura actua desde la hoja Factura y la pega del dato de hoja7(Factura) C7, se hace hacia la hoja Copias_Factura

Editado:

No se como lo hiciste pero me sale esto EN EL MISMO LIBRO QUE SUBI el que esta en el 1ª post.  La imagen es grandem por eso la posicion vertical para que la veas toda, te dejo el enlace http://i65.tinypic.com/15pigjd.jpg de la imagen tambien.

llena los campos en la factura (sin tomar en cuenta las formulas) como si sea una venta, ejecutas (F5) la macro que me dejas y sale esto.

 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Por qué no subes la macro y

Por qué no subes la macro y vemos qué es lo que quieres hacer?

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
Cambio de estrategia y tema

Una vez que se haga uso manual de las celdas las formulas desaparecen INEVITABLEMENTE y visto la complicación del tema, decidí otra cosa que talvez sea más simple para cualquier experto en macros.

Un cambio de idea y plan, olvidando lo anterior seria; macro en Modulo normal y llamarla con un Call desde el código Private Sub Worksheet_Change(ByVal Target As Range) donde al escribir manualmente una identificación en C7 y Enter, ¿si existe en B de hoja Copias_Factura? se auto-llenaran las celdas  C8, C9, B10 y C11 y se pondrá la C7 con fondo VERDE, si al pisar Enter ¿no existe ese dato en la B de Hoja Copias_Factura?, la C7 se pondrá con fondo ROJO y se tendrá que llenar manualmente las celdas anteriores

Tengo entendido (PIENSO) que casi es seguro el poder ser sin que se tenga que ordenar O MOVER ALGO y otras cosas de los datos de B de la hoja Copias_Factura PERO mi falta de conocimiento no me permite llegar tan lejos en estos menesteres. Por este motivo, es que pido ayuda.

RESUMEN: Una macro para; escribir dato en C7 y pisar Enter, SI existe en hoja Copias_Factura Columna B, la C7 se pone VERDE Y SE AUTO-LLENAN LAS DEMAS CELDAS, C8, C9, B10 y C11

Pisando Enter NO existe ese dato en Hoja Copias_Factura columna B, la C7 se pone ROJO y se tienen que llenar manualmente las celdas C8, C9, B10 y C11

Desistir del proposito y fondo del tema para entrar a macro y no formula.

Esto lo puedes aplicar en el que subi porque tiene la hoja Copias_Factura y Factura que son las necesarias para tal fin. El libro pesa porque tiene mas hojas y macros.

Gracias cron por tu generosa pronta ayuda, desinteresada y altruista. Disculpa mi cambio de opinion y decision


 

 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Joao, al código que yo te

Joao, al código que yo te puse lo único que le faltaba era cambiar de hoja para hacer las cosas en su lugar correcto. Te adjunto tu hoja del primer mensaje modificada como te comenté en el último mensaje mío.

Cosas que faltan:

  1. La hoja rellena los datos de nombre, dirección, pero no las líneas de la factura
  2. Me da la impresión de que haces demasiadas comprobaciones por macro de lo que se escribe en la hoja. Mi experiencia dice que eso no es bueno porque sobrecargas el programa y porque hay una manera mucho más sencilla de hacer lo mismo mediante validación de datos.
  3. Lo que te he hecho prepara el desplegable al arrancar el archivo. Lo correcto sería que se recalculara cada vez que se añadan datos nuevos en la hoja de facturas

Un saludo

 

AÑADO

Olvidaba comentar que si introduces un valor nulo en la celda del desplegable (aunque por validación de datos, el único valor nulo puede ser celda vacía), lo que hago es introducir un valor determinado en las celdas que quiero que se coloreen. Luego les pongo un formato condicional que haga que el fondo y las letras estén del mismo color. De esta manera parece que la celda se colorea y que no tiene ningún valor.

AdjuntoTamaño
File proyecto_3_ya_se_excel_0_2.xlsm86.74 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 cronGracias por tu

 Hola cron

Gracias por tu respuesta y concertación de lo anterior.  No se si leste mi post anterior al último tuyo el #12

 ¿Porque decidí no ser así?:

Para seguir con mi plan de validacion, tendria que registrar TODOS clientes que aparezcan y eso es imposible porque tendria miles (millones) de libros con clientes y no se puede. Si registrar SOLO aquellos que uno vea que si debemos tenerlos.

Por este motivo si tengo que facturar a algún cliente QUE NO ESTE en la hoja Copias_Factura, NO PUEDO porque si no existe en la data, no puedo facturarle porque al escribir en las celdas; C8, C9, B10 y C11, las formulas vuelan (desaparecen) y no las tendré jamás.

 Esta la razón por la cual cambie de decisión para que una macro en código de la hoja7, haga el auto relleno de las celdas C8, C9, B10 Y C12 al yo escribir la identificación del cliente en la celda C7 y pisar Enter.

 Si prefieres le el post #12

 Gracias

 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Sí lo leí. Te pediría por

Sí lo leí. Te pediría por favor que, por ordenar un poco el foro, valides o no mi respuesta anterior. La opción alternativa creo que deberías abrirla en un nuevo hilo. Así si alguien busca una solución a su problema podrá encontrarla más fácilmente.

 

De todas maneras, tu problema es el típico de las bases de datos: para utilizar los datos de un cliente, antes hay que introducirlos. ¿Te has planteado utilizar Access para tu aplicación de facturación?

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 cronSi, estoy de pleno

Hola cron

Si, estoy de pleno acuerdo en abrir nuevo tema

Gracias

 

Daremos este por cerrado