CARGAR DATOS A UNA HOJA DE EXCEL DESDE UN FORMULARIO

9 respuestas [Último envío]
BRUNO
Imagen de BRUNO
Offline
alta: 29/03/2010
Puntos: 131

BUENAS TARDES

DESEO HACER UNA MACRO CON VBA DONDE AL CREAR UN FORMULARIO PUEDA CARGAR DATOS EN UNA HOJA DE EXCEL CON LAS SIG. CARACTERISTICAS

A                                             B                               C                      D

NOMBRE CLIENTE       GASTOS1            GASTOS2       GASTOS3

PEDRO                              100                         50.75

JUAN                                  68

 

AL INTRODUCIR EL NOMBRE DEL CLIENTE EN EL FORMULARIO ESTE VERIFIQUE SI EXISTE  Y SE POSICIONE EN LA PRIMERA CASILLA DE GASTOS EN BLANCO PARA ESE CLIENTE

EN CASO DE QUE NO EXISTA ELCLIENTE LO INSERTE EN LA HOJA DE EXCEL

GRACIAS DE ANTEMANO

pacomegia
Imagen de pacomegia
Offline
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 27/12/2006
Puntos: 4000
antes de empezar...

antes de empezar. ¿seguro que quieres almacenar los datos así? me refiero a ponerlos en una fila para cada cliente.

por ejemplo ¿existe alguna relación entre el gasto 3 de los distintos clientes?

mira también este envío donde se comenta cómo pasar datos de un formulario a un listado conjunto.

------
Ya sé Excel, pero necesito más

envios gratis a todo el mundo

pacomegia
Imagen de pacomegia
Offline
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 27/12/2006
Puntos: 4000
empezando

Supongo que tu formulario de introducción será tan sencillo como algo así:

Con una celda para el nombre y otra para indicar el gasto. Luego le pondremos un botón para que copie los datos a la tabla de gastos por nombre de cliente.

A mí me gusta definir nombres en la hoja para luego identificar más fácilmente las cosas, así que vamos a definir unos nombres para este formulario, llamaremos Nombre a la celda donde está el nombre, y llamaremos Gasto a la celda donde está el gasto. Los defino a partir de la selección (Fórmulas>nombres definidos>Crear desde la selección)

crear nombres desde la selección

con esto tenemos identificados los campos del formulario. He supuesto que el formulario estará en una hoja diferente de la tabla con los datos.

Ahora hay que identificar la posición de la tabla conjunta de datos.

Yo utilizaría la esquina superior izquierda de la tabla de datos para localizarla, porque todo lo demás va a crecer. Es posible también definir una tabla que incorpore todos los datos y que vaya creciendo a medida que añadas nueva información, esto depende un poco de los gustos de cada uno.

También hay que tener en cuenta cómo vamos a localizar un nombre de cliente existente, si vamos a utilizar la función Coincidir de la hoja de cálculo, o si vamos a recorrer la lista de nombres con la macro hasta encontrar uno coincidente.

en este caso vamos a hacerlo recorriendo la lista de nombres y así nos sirve de ejemplo para movernos por la hoja de cálculo.

Resumiendo:

  • leeremos los datos del nombre de cliente y del importe en la hoja formulario.
  • luego iremos a la hoja de la tabla de los datos y buscaremos ese nombre de cliente.
  • si encontramos el nombre, anotamos el importe en su fila.
  • Si llegamos al final y el nombre no está en la lista, lo anotamos como nuevo cliente.

Para movernos por la hoja vamos a utilizar el método Offset de la celda, que permite referise a una celda que se encuentra tantas filas y tantas columnas como queramos de la celda original.

También utilizaremos el método End(xlToRight) que equivale a pulsar la tecla Fin y la flecha derecha, para ir al último gasto desde la posición del nombre

quedaría algo así (adjunto también el archivo para que lo veas en funcionamiento).

Sub CopiarDatosListadoConjunto()
' copiaremos los datos del formulario a la hoja conjunta
Dim Nombre, Gasto
' leemos los datos del formulario
    Nombre = Worksheets("Formulario").Range("Nombre").Value
    Gasto = Worksheets("Formulario").Range("Gasto").Value
' vamos a la hoja de datos y nos situamos debajo de la esquina superior izquierda
    Worksheets("Datos").Activate
    ActiveSheet.Range("EsquinaSuperiorDatos").Offset(1, 0).Activate
' recorremos los datos buscando el nombre
    Do Until IsEmpty(ActiveCell)
        If ActiveCell.Value = Nombre Then
        ' anotamos el importe a la derecha del último gasto
            ActiveCell.End(xlToRight).Offset(0, 1).Value = Gasto
        ' ya hemos terminado, así que salimos
            Exit Sub
        End If
        'pasamos a la siguiente fila
        ActiveCell.Offset(1, 0).Activate
    Loop
    ' si llegamos aquí es porque hemos llegado al final sin encontrar el nombre
    ' así que escribimos el nombre y el importe
    ActiveCell.Value = Nombre
    ActiveCell.Offset(0, 1).Value = Gasto
   
End Sub

luego se pueden añadir algunas mejoras como por ejemplo que una vez copiados los datos se borren del formulario para evitar que se introduzca dos veces. Tampoco vendrá mal un mensaje informando de que se han copiado los datos bien, y cosas por el estilo.

 

------
Ya sé Excel, pero necesito más

Vista previaAdjuntoTamaño
GastosFilasPorNombre.xls36 KB

envios gratis a todo el mundo

JoaoM
Imagen de JoaoM
Offline
Nivel 1 - 200 puntosNivel 2 - 500 puntos
alta: 15/12/2011
Puntos: 910
Re: empezando

Etoy suiguiendo el tema por interes personal. No soy experto en esto de macros, no me dá mi ocupacion pero entro siempre a WEBs a buscar codigos cuando necesito de algo

Seria posible agregar una linea mas al codigo para que inserte la fecha actual? (fecha del sistema. Explico al insertar los datos, inserta el nombre y gasto (Miguel 72,00)

nombre en una celda y gasto en otra, PERFECTO

podria insertar tambien la fecha en la celda siguiente(a la derecha) a gastos y

Si inserto 2º gasto al mismo nombre, que me inserte nuevamente la fecha a la derecha del 2º gasto, algo así

Hoja Formulario

Hoja Formulario

Hoja Datos

Hoja Datos

                                          

pacomegia
Imagen de pacomegia
Offline
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 27/12/2006
Puntos: 4000
date, now

puedes utilizar las funciones de VBA date que devuelve la fecha del sistema, o la función now que devuelve fecha y hora.

Se puede anotar de muchas maneras, pero tal y como está el ejemplo, anotaríamos los datos de esta menra:

' anotamos el importe a la derecha del último gasto
ActiveCell.End(xlToRight).Offset(0, 1).Value = Gasto
' anotamos la fecha y hora actual a la derecha de lo anterior
ActiveCell.End(xlToRight).Offset(0, 1).Value = now


------
Ya sé Excel, pero necesito más ahora en pdf

envios gratis a todo el mundo

JoaoM
Imagen de JoaoM
Offline
Nivel 1 - 200 puntosNivel 2 - 500 puntos
alta: 15/12/2011
Puntos: 910
Re: date, now

Muy bien. una pregunta y solicitud si es posible

¿Seria posible que ingresara tambien la fecha al 1º ingreso y no solamente al 2º?.

Esta ingresando la fecha solo despues del 1º estar insertado, es decir al insertar el segundo Gastos es cuando inserta la fecha.

Gracias por contestar y gracias por tu aporte, me será de utilidad

Edito:

Agregue mas esta linea al final pero no se resuelve lo que estoy buscando, BUENO, no es que no se resuelva, en parte si, EXPLICO

Si cambio en ves de Now cambio por Date, no funciona bien, si funciona con Now,

Porque no puedo SOLO marcar la fecha sin la hora?

ActiveCell.Value = Nombre
ActiveCell.Offset(0, 1).Value = Gasto

' anotamos la fecha y hora actual a la derecha de lo anterior
ActiveCell.End(xlToRight).Offset(0, 1).Value = now

End Sub

                                          

pacomegia
Imagen de pacomegia
Offline
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 27/12/2006
Puntos: 4000
Re: date, now

En cuanto a lo de Date, debería funcionar, ¿qué anota en la celda cuando le dices que emplee Date?

------
Ya sé Excel, pero necesito más ahora en pdf

envios gratis a todo el mundo

JoaoM
Imagen de JoaoM
Offline
Nivel 1 - 200 puntosNivel 2 - 500 puntos
alta: 15/12/2011
Puntos: 910
Re: date, now

Anota la fecha y 00.00 seguido pero si activas la celda en la barra te aparece fecha y hora a 12:00:00 AM ASÍ: 17/12/2011 12:00.00 AM

Revisando, la celda tiene formato dd/mm/yyyy hh:mm

Ahora, me di cuenta que con Now y la linea abajo que le monte, inserta fecha y hota desde el 1º inserto, 2º bien pero el 3º inserta solo la fecha, 4º bien(fecha y hora) 5º bien ect ect, hasta 10 que inserte bien,solo falla en el 3º que solo inserta la fecha

                                          

pacomegia
Imagen de pacomegia
Offline
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 27/12/2006
Puntos: 4000
Re: date, now

comprueba el formato de la columna, si tiene formato de fecha sin hora, puede que la hora no se vea, aunque sí esté en la celda, mira lo que pone en la barra de fórmulas, porque la celda puede no mostrarlo todo.

------
Ya sé Excel, pero necesito más ahora en pdf

envios gratis a todo el mundo

JoaoM
Imagen de JoaoM
Offline
Nivel 1 - 200 puntosNivel 2 - 500 puntos
alta: 15/12/2011
Puntos: 910
Re: date, now

La columna como tal, no tiene formato pero al insertar, como dije arriba, la celda presenta ese formato.

Di el mismo formato a toda columna y sucede lo mismo con Date.

Me llama la atencion que: verifique las columnas VACIAS, donde pudiera ser insertadas la fecha y hora y todas tiene el formato mensionado.

Despues de escribir lo anterior, LA MENTE TRABAJABA y me pedia para hacer una otra prueba, la fui hacer y consistio en:

Cree una hoja nueva, le di el nombre de datos1, en el codigo hice el cambio de Datos a Datos1, defini el nombre de A1, verifique que las celdas donde podieran insertar la fecha y hora y me di cuenta que NINGUNA tenia formato, ni celdas ni columnas.

Hice 1 inserto de datos con Now, me inmserto la fecha y hora en C2, verifico el formato de celda y tiene dd/mm/yyyy hh:mm.

Hago el cambio en el codigo de Now para Date, inserto datos (en la misma linea(mismo nombre)) y inserta en E2 solo la fecha, verifico el formato, tiene SOLO formato de fecha sin hora.

¿Porque sucedia lo anterior? de insertar con Date 17/12/2011 00:00, PORQUE LAS CELDAS AL SER USADAS ANTERIORMENTE CON FECHA Y HORA (Now) puedes borrar el contenido pero el formato queda, entonces, al hacer el cambio de Now a Date, ya la celda tiene el formato dd/mm/yyyy hh:mm anterior y así se queda, POR ESO EL ERROR EN LAS CELDAS ANTERIORMENTE con Date.

Este punto ya resuelto el de fallar en el 3º inserto, tambien

Me queda un tema a resolver, el tema se llama

Error en Macro copia hoja Activa en nuevo libro