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
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
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
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
Editado:
Solo para que veas una de las plantillas que tengo con ayuda de muchos expertos
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
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
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
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
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.
Por qué no subes la macro y vemos qué es lo que quieres hacer?
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
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:
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.
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
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
Hola cron
Si, estoy de pleno acuerdo en abrir nuevo tema
Gracias
Daremos este por cerrado