** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Autorrellenar mientras se escribe
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoAutorrellenar mientras se escribe

 Responder Responder
Autor
Mensaje
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 1906
Enlace directo a este mensaje Tema: Autorrellenar mientras se escribe
    Enviado: 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
Arriba
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 1906
Enlace directo a este mensaje Enviado: 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
Arriba
jilo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 19/Diciembre/2004
Localización: TAFALLA
Estado: Sin conexión
Puntos: 810
Enlace directo a este mensaje Enviado: 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 !!!!!!
Arriba
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 1906
Enlace directo a este mensaje Enviado: 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
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: en línea
Puntos: 5381
Enlace directo a este mensaje Enviado: 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 sitio_web con ejemplos Excel.
Arriba
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 1906
Enlace directo a este mensaje Enviado: 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


Editado por ximo - 29/Diciembre/2018 a las 14:48
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana
Arriba
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 1906
Enlace directo a este mensaje Enviado: 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
Arriba
jilo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 19/Diciembre/2004
Localización: TAFALLA
Estado: Sin conexión
Puntos: 810
Enlace directo a este mensaje Enviado: 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 !!!!!!
Arriba
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 1906
Enlace directo a este mensaje Enviado: 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
Arriba
jilo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 19/Diciembre/2004
Localización: TAFALLA
Estado: Sin conexión
Puntos: 810
Enlace directo a este mensaje Enviado: 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


Editado por jilo - 02/Enero/2019 a las 19:13
Espero te sirva !!!!!!
Arriba
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 1906
Enlace directo a este mensaje Enviado: 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
Arriba
jilo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 19/Diciembre/2004
Localización: TAFALLA
Estado: Sin conexión
Puntos: 810
Enlace directo a este mensaje Enviado: 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 !!!!!!
Arriba
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 1906
Enlace directo a este mensaje Enviado: 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
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable