obligada > microsoft.* > microsoft.excel

Nacho (03-10-2017, 20:08)
Buenas tardes,
Esto no sé si se podrá hacer.
En HOJA1 y en el rango a1:b200, tendría un listado de artículos. En la columna A el código y en la columna B el texto.

En HOJA2, columna c y desde la fila 2, necesitaría que fuera escribiendo una cadena de texto y me fuera localizando el dato en HOJA1 columna B yuna vez vea que tengo lo que busco, pinchar y se me quede escrito. Y así en todas las filas.

Uf creo que lo estoy explicando muy mal, espero que vuestras mentes brillantes me hayáis entendido.

Muchas gracias de antemano.
David_erh (07-10-2017, 20:36)
Hola, creo que hacer lo que pides directamente sobre una celda no se puede,una opción sería en la HOJA2 marcar la columna C y con la herramienta validación de datos, utilizar la opción "Lista" y seleccionar el rango de la HOJA1, la desventaja es que no podrás ir escribiendo, si no, elegir la cadena dentro de la lista.

Otra Opción un poco mas avanzada, sería en la HOJA2, al inicio dela hoja, insertar un LISTBOX y un BOTÓN, la ventaja del LISTBOX es que a medida que vas escribiendo dentro de el, va buscando y auto complentando; al LISTBOX asignar en su propiedad "ListFillRange" el rango de valores la HOJA1 ( Hoja1!B1:B200 ) y en el BOTON asignar una macro que inserte el valor buscado en la ultima fila vacía de la columna B:

Private Sub CommandButton1_Click()
Dim FilaVacia As Long
FilaVacia = (ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row)+1
Cells(FilaVacia, 3).Value = Combobox1.value
End Sub

Espero que te sirva de ayuda, si deseas me puedes dar tu correo para hacerte llegar una copia del archivo.

Saludos
David_erh (07-10-2017, 20:39)
Hola, creo que hacer lo que pides directamente sobre una celda no se puede,una opción sería en la HOJA2 marcar la columna C y con la herramienta validación de datos, utilizar la opción "Lista" y seleccionar el rango de la HOJA1, la desventaja es que no podrás ir escribiendo, si no, elegir la cadena dentro de la lista.

Otra Opción un poco mas avanzada, sería en la HOJA2, al inicio dela hoja, insertar un LISTBOX y un BOTÓN, la ventaja del LISTBOX es que a medida que vas escribiendo dentro de el, va buscando y auto complentando; al LISTBOX asignar en su propiedad "ListFillRange" el rango de valores la HOJA1 ( Hoja1!B1:B200 ) y en el BOTON asignar una macro que inserte el valor buscado en la ultima fila vacía de la columna C:

Private Sub CommandButton1_Click()
Dim FilaVacia As Long
FilaVacia = (ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row)+1
Cells(FilaVacia, 3).Value = Combobox1.value
End Sub

Espero que te sirva de ayuda, si deseas me puedes dar tu correo para hacerte llegar una copia del archivo ejemplo.

Saludos

David
Nacho (09-10-2017, 19:36)
El sábado, 7 de octubre de 2017, 19:39:55 (UTC+2), David_erh escribió:
> Hola, creo que hacer lo que pides directamente sobre una celda no se puede, una opción sería en la HOJA2 marcar la columna C y con la herramienta validación de datos, utilizar la opción "Lista" y seleccionar el rango de la HOJA1, la desventaja es que no podrás ir escribiendo, si no, elegir la cadena dentro de la lista.
> Otra Opción un poco mas avanzada, sería en la HOJA2, al inicio de la hoja, insertar un LISTBOX y un BOTÓN, la ventaja del LISTBOX es que a medida que vas escribiendo dentro de el, va buscando y auto complentando; al LISTBOX asignar en su propiedad "ListFillRange" el rango de valoresla HOJA1 ( Hoja1!B1:B200 ) y en el BOTON asignar una macro que inserte el valor buscado en la ultima fila vacía de la columna C:
> Private Sub CommandButton1_Click()
> Dim FilaVacia As Long
> FilaVacia = (ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row)+1
> Cells(FilaVacia, 3).Value = Combobox1.value
> End Sub
> Espero que te sirva de ayuda, si deseas me puedes dar tu correo para hacerte llegar una copia del archivo ejemplo.
> Saludos
> David


Buenas tardes David, antes que nada muy agradecido por tu interés.

Te explico, la opción de validar datos no es lo que más se ajustami necesidad, ya que tengo la misma lista en pestaña anexa.

La otra opción que me das, hasta donde he podido ver, tiene que ser eltexto exacto, ¿no?. Es decir, si busco un vino cuyo nombre es : "Protos Ribera del Duero", debo empezar escribiendo "Protos Ri....", ¿no?. Mi idea sería que escribiese por ejemplo "Ribera" y ya las opciones que me salieran fueran todas las que llevaran esa cadena de texto.

No sé si a lo mejor he hecho algo mal.
Gracias y un saludo
David_erh (12-10-2017, 22:35)
Hola Nacho, de acuerdo a lo que planteas, una solución que se me ocurre es en la HOJA1 en la parte superior insertar un TEXTBOX y un BOTON, crearuna macro de manera tal que a medida que se vaya escribiendo llamar al evento Change o al evento KeyUp (luego de presionar una tecla)y que se ejecuteun "filtro avanzado", de manera que se muestre en la lista las cadenas de texto que contengan el valor escrito, luego haces hacer un click sobre la celda deseada y luego con el BOTON copiar el contenido de la celda a al HOJA2.

Si ese procedimiento te parece bien, se podría hacer las macros necesarias.

Saludos

David
Nacho (18-10-2017, 10:05)
El jueves, 12 de octubre de 2017, 21:35:06 (UTC+2), David_erh escribió:
> Hola Nacho, de acuerdo a lo que planteas, una solución que se me ocurre es en la HOJA1 en la parte superior insertar un TEXTBOX y un BOTON, crear una macro de manera tal que a medida que se vaya escribiendo llamar al evento Change o al evento KeyUp (luego de presionar una tecla)y que se ejecute un "filtro avanzado", de manera que se muestre en la lista las cadenas de texto que contengan el valor escrito, luego haces hacer un click sobre lacelda deseada y luego con el BOTON copiar el contenido de la celda a al HOJA2.
> Si ese procedimiento te parece bien, se podría hacer las macros necesarias.
> Saludos
> David


Hola David, por lo que explicas creo que si, que me solucionaria el objetivo que busco, pero mi nivel es más escaso que lo que requiere tu explicación.
David_erh (19-10-2017, 02:14)
Hola nuevamente; voy a describir un poco como tengo estructurado el modelo:supongamos que la Hoja1 tienes tu lista de items, con los encabezados en la fila 4, entonces en la Celda "B1" va el encabezado(que debe de ser el mismo que en la Celda "B4"); en la misma HOJA1 insertas un TextBox y lo posicionas sobre la celda "B2" (de manera tal que no se muestre el contenido de al celda "B2").
Al lado derecho del TextBox insertas un botón, que servirá para copiar el item que elegiste de la lista y que será copiado a la Hoja2.

En la Hoja2 Colocas el encabezado En la celda B1.

Ahora solo queda insertar el código:

Private Sub TextBox1_Change()
'este evento se ejecuta cada vez que se escribe en el textbox
'En al celda B2 se genera el texto adicionando un asterisco al inicio y al final del texto ingresado
Sheets("Hoja1").Range("B2").Value = "*" & TextBox1.Text & "*"
'Luego se llama al procedimiento de filtrado llamado BuscaTexto
Call BuscaTexto
End Sub

Sub BuscaTexto()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Lo primero es quitar cualquier filtrado anterior
If Sheets("Hoja1").FilterMode = True Then Sheets("Hoja1").ShowAllData
'Luego determinamos la ultima fila con datos
UltimaFila = Sheets("Hoja1").Range("A" & Cells.Rows.Count).End(xlUp).Row
'Realizamos el filtro perzonalizado de acuerdo a los criterios buscados
Sheets("Hoja1").Range("B4:B" & UltimaFila).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("B1:B2"), Unique:=False

End Sub

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Guardamos en una variable el texto seleccionado
TextoSeleccionado = ActiveCell.Text
'Determinamos la última fila vacia
UltimaFilaVacia = Sheets("Hoja2").Range("B" & Cells.Rows.Count).End(xlUp)..Row + 1
'Pegamos el texto celeccionado
Sheets("Hoja2").Range("B" & UltimaFilaVacia).Value = TextoSeleccionado

End Sub

Ya hice las pruebas y parece que funciona, si tienes una dirección de correo te podría enviar el modelo que hice.

Saludos.

David
Temas Similares