VBA utilizar un combobox para buscar

Resuelto
Usgpa Mensajes publicados 14 Estado Miembro -  
 Usgpa -
Hola,

Soy principiante en VBA de Excel y presento un caso que seguramente te parecerá muy simple.

De hecho, tengo una lista de documentos en Hoja2 con 4 columnas de características (A, B, C y D). He creado un Userform donde tengo un combobox que permite seleccionar un objeto de la lista por su característica A. Me gustaría saber cómo hacer para que aparezcan en los tres Textbox de mi Userform los datos B, C y D correspondientes a mi objeto.

Gracias de antemano por el tiempo que me brindarás.

18 respuestas

  1. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    Hola,
    Bajo Microsoft Visual Basic, haz doble clic en el combobox, el siguiente código aparecerá:

    Private Sub ComboBox1_Change() End Sub


    Entre estas dos líneas escribe:

    Private Sub ComboBox1_Change()
    Dim a As Integer Dim cherche As String cherche = ComboBox1.Value a = Sheets("Feuil1").Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row TextBox1 = Range("A" & a).Offset(0, 1).Value TextBox2 = Range("A" & a).Offset(0, 2).Value TextBox3 = Range("A" & a).Offset(0, 3).Value

    End Sub
    Por supuesto, a adaptar
    --
    Cordialmente, y ..... ¡Feliz Año, mis mejores deseos para 2010!
    -- Todo problema tiene su solución. Si no hay solución, ¿dónde está el problema? --
    3
  2. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    intenta sin Sheets("Feuil2") así:
    a = Cells.Find(What:=buscar, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row

    De lo contrario, ¿cómo completas tu combobox?
    --
    Cordialmente, y ..... ¡Feliz Año Nuevo, mis mejores deseos para 2010!
    -- Todo problema tiene su solución. Si no hay solución, ¿cuál es el problema? --
    2
  3. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    Hola,
    Por supuesto. El código:
    a = Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
    te devuelve un número: el número de la fila. Después, puedes usarlo para eliminar una o varias celdas:
    Range("B" & a).Delete

    o
    Range(Cells(1,a),Cells(6,a)).Delete
    para eliminar de la columna A a la columna F
    --
    Saludos, y ..... ¡Feliz Año, mis mejores deseos para 2010!
    -- Todo problema tiene su solución. Si no hay solución, ¿cuál es el problema? --
    1
  4. Usgpa Mensajes publicados 14 Estado Miembro 1
     
    Gracias Pijaku. Aparentemente mi VBA se bloquea en:
    a = Sheets("Feuil2").Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row

    Me lo subraya en amarillo y me señala un error de tipo "9".
    0
  5. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    ¿Hay un error de tipo "9"? ¿Cuál es el mensaje de error completo?
    --
    Atentamente, y ..... ¡Feliz Año Nuevo, mis mejores deseos para 2010!!!
    -- Todo problema tiene su solución. Si no hay solución, ¿dónde está el problema? --
    0
  6. Usgpa Mensajes publicados 14 Estado Miembro 1
     
    el índice no pertenece a la selección...
    0
  7. Usgpa Mensajes publicados 14 Estado Miembro 1
     
    Pijaku ¡Gracias! ¡Tu segunda solución era la correcta! ¡Muchas gracias y que tengas un buen día!
    0
  8. Usgpa
     
    Hola,

    Me gustaría saber si es posible, gracias a un botón "eliminar" de un userform, eliminar las celdas así encontradas sin tener que eliminar toda la fila.

    Gracias de antemano.
    0
  9. Usgpa
     
    Gracias de nuevo, Pijaku. Una vez más tu código funciona, pero lamentablemente una vez que se eliminan las celdas, mi primer userform presenta un error ya que el código (a = Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row) se destaca en amarillo porque el valor que servía de referencia ya no existe. El error también ocurre si lo descargo al abrir el segundo userform...

    ¿Tienes alguna idea?
    0
  10. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    Volvemos a mi pregunta del post 5: ¿Cómo completas tu combobox?
    No entiendo tampoco por qué no quieres eliminar toda la línea. En la gestión de bases de datos, o reemplazas o eliminas toda una línea, pero dejar celdas vacías no es absolutamente bueno para una bdd...
    --
    Atentamente, y ..... ¡Feliz Año, mis mejores deseos para 2010!!!
    -- Todo problema tiene su solución. Si no hay solución, ¿dónde está el problema? --
    0
  11. Usgpa
     
    Mi combobox toma la primera columna de mi hoja, que es una de las características de los objetos listados.

    De hecho, no quería eliminar la fila completa para no quitar los botones y estadísticas que he colocado a la derecha de la tabla... si eso causa un problema, los colocaré en otra hoja, todavía no tengo mentalidad de VBA... y por lo tanto, no tengo los reflejos útiles :)

    Gracias
    0
    1. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
       
      efectivamente, tu hoja que contiene los datos no debe contener... solo los datos.
      Si eliminas celdas, ¿debes tener espacios vacíos en tu combo?
      --
      Atentamente, y ..... ¡Feliz Año Nuevo, mis mejores deseos para 2010!
      -- Todo problema tiene su solución. Si no hay solución, ¿dónde está el problema?
      0
  12. Usgpa
     
    En realidad, no sabiendo cómo programar un combo para que contenga únicamente las celdas llenas de una columna, lo programé para que tomara todas las celdas de la columna A. Así que las celdas que desaparecen no se ven.

    Por lo tanto, haré una página de inicio con los botones, etc. Así podré eliminar toda la fila. ¿Puedes darme la fórmula para eliminar toda una fila?
    0
  13. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    Simplemente, adaptado a tu caso:
    a = Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row Rows(a).Delete

    --
    Cordialmente, y ..... ¡Feliz Año Nuevo, mis mejores deseos para 2010!!!
    -- Todo problema tiene su solución. Si no hay solución, ¿dónde está el problema? --
    0
  14. Usgpa
     
    Muchas gracias. Sin embargo, una vez eliminada la línea, sigue habiendo un mensaje de error resaltado en amarillo:

    a = Feuil2.Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row

    del primer userform...

    Error 1004
    0
  15. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    sí, ya que estás buscando de nuevo (no sé por qué, de hecho) el valor "busca" que acabas de eliminar...
    --
    Cordialmente, y ..... ¡Feliz Año Nuevo, mis mejores deseos para 2010!
    -- Todo problema tiene su solución. Si no hay solución, ¿dónde está el problema? --
    0
  16. Usgpa
     
    De hecho, he programado que la búsqueda se inicie con cada cambio en la combobox1 (Private Sub ComboBox1_Change()). Lo extraño es que la búsqueda se inicia incluso cuando mi userform que contiene la combobox está cerrado... pensaba que eso solucionaría el problema, pero parece que no...
    0
  17. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    Hola,
    ¿cómo lo cerraste? Si solo hiciste:
    UserForm1.Hide 
    no es suficiente.
    Prueba:
    Unload UserForm1

    Lo mejor sería que pusieras todo tu código aquí y veamos por qué no funciona. Tendré un poco de tiempo mañana si quieres…
    --
    Saludos, y..... ¡Feliz Año Nuevo, mis mejores deseos para 2010!
    -- Todo problema tiene su solución. Si no hay solución, ¿dónde está el problema? --
    0