Señores todo expertos, reciban un cordial saludo, comedidamente les solicito el favor de ayudarme a completar un formulario de Estado de cuenta del cliente que tengo en una hoja con este mismo nombre y por medio de fórmulas Buscarv me encuentra en otra hoja llamada cartera, el código (col. A), numero de factura (col.C), fecha de facturación (col. D)Y valor de la misma (col.F), el problema esta cuando el cliente tiene varias facturas, que pueden ser hasta 4, y con la fórmula Buscarv solo consigo los datos de la primera fact., espero haberme hecho entender.
Gracias Andres
1 respuesta
Respuesta
1
1
Anónimo
Para hacer puedes usar una macro que detecte cuando cambia el valor del código del cliente o el valor con el cual estés buscando(en este caso yo ubique dicho valor en la celda B2 de la hoja cartera) y que esta macro a su vez llame otra macro que me traerá todos los informes o datos (que para este caso los ubique en la hoja "Estado de cuenta" a partir de la fila 2 entre las columnas A y F) de ese cliente desde la hoja Estado de cuenta, para hacer esto, sigue estos pasos. 1.- Entra al libro donde quieras poner el código 2.- Entra al Editor del Visual Basic (Alt+F11) 3.- Da un doble click en la hoja "cartera" que es donde nos interesa dejar el código, esta la veras en el Explorador de proyectos 4- Copia el siguiente código Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then resumen End Sub Sub resumen() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual 'seteo f que me ayudara en el ciclo Range(Selection, Selection.End(xlToRight)).Select Range("A5:F5").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Range("A5").Select f = 2 'activo la celda A2 de la hoja "Estado de cuenta" en tu caso solo modifica el nombre por el de la hoja 'en la que tienes todos los datos Worksheets("Estado de cuenta").Select Worksheets("Estado de cuenta").Range("A" & f & "").Activate 'inicio un ciclo que se ejecuta hasta que encuentre una celda vacia Do While Not IsEmpty(ActiveCell) 'pregunto si el valor de la celda activa (A2) de la hoja Todos 'es igual al valor de la celda (B2) de la hoja Resumen If ActiveCell.Value = Worksheets("cartera").Range("B2").Value Then 'si son iguales, selecciona el rango de la A2 a la D2, en tu caso solo modifica el rango para la selección Worksheets("Estado de cuenta").Range("A" & f & ":F" & f & "").Select 'copia el rango seleccionado Selection.Copy 'activamos la hoja cartera Worksheets("cartera").Select Worksheets("cartera").Range("A5").Activate 'Ahora hacemos un if en el cual evaluamos si la celda A5 de la hoja cartera esta vacia If ActiveCell.Text = "" Then 'si se cumple la condicion entonces pega la informacion en dicha celda (A5) ActiveSheet.Paste 'sino Else 'preguntamos si la celda que le sigue, en este caso A6 esta vacia If ActiveCell.Offset(1, 0).Value = "" Then 'si se cumple la condicion entonces pega la informacion en dicha celda (A6) ActiveCell.Offset(1, 0).Activate ActiveSheet.Paste Else 'sino entonces se corre hasta la ultima celda con datos + 1 Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Activate 'y pega la informacion ActiveSheet.Paste End If End If 'incrementamos f y activamos la siguiente celda de la hoja Estado de cuenta f = f + 1 Worksheets("Estado de cuenta").Select Worksheets("Estado de cuenta").Range("A" & f & "").Activate Else f = f + 1 Worksheets("Estado de cuenta").Select Worksheets("Estado de cuenta").Range("A" & f & "").Activate End If Application.CutCopyMode = False Loop Worksheets("cartera").Select Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.Calculate End Sub Si esto soluciona tu pregunta, no olvides dejar un comentario y cerrar la pregunta, en caso contrario no dudes en preguntarme nuevamente.
Buenos días flashacker, te agradezco mucho tu interés en ayudarme, soy muy novato en esto y quisiera saber si es posible enviarte mi archivo, porque no he logrado que funcione, hay varios parámetros que cambiar y lo que logre es confundirme. Muchas gracias andres
Claro, enviame el archivo a [email protected], pero rapido para poder solucionarlo antes de entrar a trabajar...
Buenas tardes flashacker, una respuesta excelente, estoy muy agradecido por tu interés y la prontitud con que me ayudaste, muchas... muchas ... gracias Andres