Imprimir página | Cerrar ventana

Autorrellenar mientras se escribe

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Excel
Descripción del foro: Foro de Excel y VBA de Excel
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84196
Fecha de impresión: 24/Abril/2019 a las 00:01


Tema: Autorrellenar mientras se escribe
Publicado por: ximo
Asunto: Autorrellenar mientras se escribe
Fecha de publicación: 28/Diciembre/2018 a las 14:46
Hola,

Después de mucho trabajo primero en buscar y luego aplicar no hace lo que pretendo.
He creado una lista mediante (validación de datos) para no tener que escribir cada vez el nombre y después el cif de la empresa, pero no me percate que tengo muchos proveedores y solo me permite el seleccionado de la lista, si empiezo a escribir las primeras letras me da error.

Luego he buscado nuevamente y he encontrado el combo activex que si hace lo que quiero pero no podía ser tan bonito, resulta que pretendo ponerlo en la contabilidad de facturas y no sé como copiarlo en las 234 filas * 4 trimestres.

Hay alguna forma de hacer lo que quiero 
Ejem:
Susana,sl | a-123122333
perez, sa  | b-45645645

Tengo una hoja con los proveedores y sus nif, necesito comvertir la celda del proveedor en un combo que al teclear las primeras letras se filtre y cuando lo seleccione que se rellene el nif.


Saludos, ximo


-------------
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana



Respuestas:
Publicado por: ximo
Fecha de publicación: 28/Diciembre/2018 a las 18:22
Hola,

Después de mucho buscar he encontrado algo que casi hace lo que pretendo, ya que el comportamiento es que escribo las primeras letras y al hacer intro me grava el nombre completo, y digo casi porque no visualizo las coincidencias.


Private Sub Worksheet_Change(ByVal Target As Range)
Dim Fila, Columna, Longi As Integer
Dim Valor As String
Dim Celda As Variant
Fila = Target.Row
Columna = Target.Column
Valor = UCase(Cells(Fila, Columna))
If (Valor <> "") And (Columna = 2) Then
  Longi = Len(Valor)
  For Each Celda In Sheets("PROVEEDORES").Range("A2", Sheets("PROVEEDORES").Range("A2").End(xlDown))
    If Valor = Left(UCase(Celda.Value), Longi) Then
      Cells(Fila, Columna) = Celda.Value
      Exit For
    End If
  Next Celda
End If
End Sub


Si ahora lo entendeis más, se puede realizar lo que quiero o mejorar esto.


Saludos, ximo


-------------
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana


Publicado por: jilo
Fecha de publicación: 28/Diciembre/2018 a las 18:47
Hola Ximo,
Como estas haciendo un cambio en una celda
Cells(Fila, Columna) = Celda.Value
Antes de que termine el evento te lo volverá a pasar por el mismo evento. Para evitar esto hay un metodo que corta el evento con:

Application.EnableEvents = False y luego lo activas con True

Quedaria así
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Fila, Columna, Longi As Integer
Dim Valor As String
Dim Celda As Variant
Fila = Target.Row
Columna = Target.Column
Valor = UCase(Cells(Fila, Columna))
If (Valor <> "") And (Columna = 2) Then
  Longi = Len(Valor)
  For Each Celda In Sheets("PROVEEDORES").Range("A2", Sheets("PROVEEDORES").Range("A2").End(xlDown))
    If Valor = Left(UCase(Celda.Value), Longi) Then
Application.EnableEvents = False
      Cells(Fila, Columna) = Celda.Value
Application.EnableEvents = true
      Exit For
    End If
  Next Celda
End If
End Sub



-------------
Espero te sirva !!!!!!


Publicado por: ximo
Fecha de publicación: 28/Diciembre/2018 a las 19:25
Hola Jilo,

Es lo mismo en apariencia, a ver si sé explicarme bien, para poner Nocyr, s.l. tecleo noc y si doy a enter se rrellena con Nocyr, s.l. pero no visualizo la coincidencia antes del enter, puede darse el caso de tener otro proveedor por ejemplo Nocilla, s.a. o el caso de empresas que tienen en común Exclusivas ... si no visualizo las coincidencias casi mejor lo escribo todo pero al ser 4 trimestres donde pongo los nombres a veces se te pasa un espacio, se pierde un punto, etc. Con lo cual después todo son problemas.

Saludos, ximo


-------------
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana


Publicado por: AnSanVal
Fecha de publicación: 28/Diciembre/2018 a las 22:20
Podrías hacerlo con un cuadro de lista y un cuadro de texto en un Formulario de usuario (UserForm).

A medida que escribes letras en el Cuadro de texto el Cuadro de lista muestra todos los datos que: 1.- contienen (en cualquier parte) la cadena que has escrito o 2.- Empiezan por la cadena escrita (parece que es el 2 el que quieres).

En mi página tengo un ejemplo (número 59) que funciona según el modo 1, pero se puede modificar fácilmente para que funcione según el modo 2. El ejemplo funciona con la columna C o con la D, al seleccionar la celda para escribir.






-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: ximo
Fecha de publicación: 29/Diciembre/2018 a las 14:45
Hola,

Es casi lo que busco, necesito ponerlo solo en la columna 'B' y coger los datos de la hoja 'PROVEEDORES' y además coincidir las primeras letras o sea el caso 2 como bien decías.


Saludos, ximo


Edito: aclaración, hoja 'PROVEEDORES' columna A fila 2 en adelante


-------------
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana


Publicado por: ximo
Fecha de publicación: 01/Enero/2019 a las 16:46
Hola,

ni os imagináis el dolor de cabeza que llevo para sacar esto, al fin tengo algo que seguramente no estará lo pulido que debería pero en principio funciono, pongo los códigos y luego pregunto.

Option Explicit
'esto es necesario copiarlo en todas las hojas que lo necesito??????
'o hay alguna forma de decirle com.1tri, com.2tri, com.3tri, com.4tri
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim a As Variant
If ActiveCell.Column = 2 Then
If ActiveCell.Value = "" Then UserForm2.Show 'MsgBox "VACIO"
Else
End If
End Sub



Option Explicit

Private Sub CommandButton1_Click()
'Escribe el texto en la celda activa.
 ActiveCell.Value = Me.ComboBox1.Value
'Cierra el formulario
Unload Me
End Sub


Private Sub CommandButton2_Click()
'cierra el formulario
Unload Me
End Sub

Private Sub UserForm_Activate()
Dim rango, celda As Range
Me.ComboBox1.SetFocus
Set rango = Worksheets("PROVEEDORES").Range("A2:A32")
For Each celda In rango
ComboBox1.AddItem celda.Value
Next celda

End Sub


Pues las preguntas son las siguientes, puedo usar un código para cuatro hojas?, y segundo,
puedo convertir esto en dinámico Worksheets("PROVEEDORES").Range("A2:A32") ya que de momento tengo 32 proveedores pero pueden haber más, he probado con A2:A pero no funciona también con el símbolo $ sin resultado quizás por desconocimiento.


Saludos, ximo 




-------------
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana


Publicado por: jilo
Fecha de publicación: 02/Enero/2019 a las 18:25
Hola Ximo,

A la pregunta si se puede usar en las cuatro hojas igual, creo que creando un modulo de clase podrias hacerlo lo que pasa que me da la sennsacion que seria matar moscas a cañonazos.
A la segunda te quedaria asi
Set rango = Worksheets("PROVEEDORES").Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
y prueba esta otra manera para llenar el combo en vez del bucle.
Combo.List() = HojaX.Range("A2:IA" & HojaX.Range("A" & Rows.Count).End(xlUp).Row).Value
HojaX=Worksheets("PROVEEDORES"), yo  prefiero manejarme con el CodeName que con el nombre de la Wsheet.



-------------
Espero te sirva !!!!!!


Publicado por: ximo
Fecha de publicación: 02/Enero/2019 a las 19:05
Hola Jilo,

La primera funciona igualmente (set...)
la segunda como la aplico:
cita:Combo.List() = HojaX.Range("A2:IA" & HojaX.Range("A" & Rows.Count).End(xlUp).Row).Value
HojaX=Worksheets("PROVEEDORES"), yo  prefiero manejarme con el CodeName que con el nombre de la Wsheet. 
fin cita:


Saludos, ximo


-------------
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana


Publicado por: jilo
Fecha de publicación: 02/Enero/2019 a las 19:12
Dos Maneras :
ComboBox1.List() = HojaX.Range("A2:A" & HojaX.Range("A" & Rows.Count).End(xlUp).Row).Value

ComboBox1.List() = Worksheets("PROVEEDORES").Range("A2:A" & Worksheets("PROVEEDORES").Range("A" & Rows.Count).End(xlUp).Row).Value


-------------
Espero te sirva !!!!!!


Publicado por: ximo
Fecha de publicación: 05/Enero/2019 a las 18:20
Hola,

La primera opción no funciona dice que no he definido sub o función,
ComboBox1.List() = PROVEEDORES.Range("A2:A" & PROVEEDORES.Range("A" & Rows.Count).End(xlUp).Row).Value

La segunda funciona perfecto, solo una cosa con todas las variaciones no me gusta que se llena el combo con un montón de espacio vacío debajo, cuando usaba esto no ocurria:

Set rango = Worksheets("PROVEEDORES").Range("A2:A32")

Falta alguna instrucción para que se llene solo con las celdas que contengan algo?


Saludos, ximo


-------------
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana


Publicado por: jilo
Fecha de publicación: 05/Enero/2019 a las 18:58
Hola,

La terminacion (Worksheets("PROVEEDORES").Range("A" & Rows.Count).End(xlUp).Row) le da la ultima fila ocupada. Si te coje celdas que parecen que estan vacias es que no estan vacias. Selecciona toda la columna desde la ultima vacia hasta al final y dale supr, asi te elimanra todo y te deberá funcionar.

Ah con respecto a que este modelo

ComboBox1.List() = PROVEEDORES.Range("A2:A" & PROVEEDORES.Range("A" & Rows.Count).End(xlUp).Row).Value
no funciona, pues normal porque esta mal escrito. SI te fijas en el explorador de proyectos del editor VBA de excel, veras que la hoja PROVEEDORES se llamará Hoja1, Hoja7 SI ES VERSION ESPAÑOLA si fuese inglesa sería Sheet1, Sheet2,... se puede usar ambos indistintamente.



-------------
Espero te sirva !!!!!!


Publicado por: ximo
Fecha de publicación: 05/Enero/2019 a las 19:34
Hola,

Pues si era eso perdón por mi ignorancia, cuanto me queda por aprender aún tan solo estoy en pañales.

Podemos cerrar cuando gustéis.


Saludos, ximo


-------------
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana



Imprimir página | Cerrar ventana