Verificar si existe el cliente y crearlo

26/09/2007 - 16:54 por GRIEGO59 | Informe spam
Hola,

Tengo una celda Nº CEDULA DEL CLIENTE y otra celda NOMBRE DEL CLIENTE.

Cuando escribo el Nº cédula del cliente, aparece autamáticamente el nombre
del cliente con la fórmula BUSCAR, que toma los datos de otra hoja CLIENTES
con las columnas Nº CEDULA DEL CLIENTE y NOMBRE DEL CLIENTE.

El problema es que muchas veces el cliente no está registrado en la hoja
CLIENTES y es necesario ir hasta la hoja CLIENTES, registrar el cliente,
ordenar las filas y luego regresar a la hoja FACTURA DE VENTAS, para
completar la factura.

Estaba pensando que sería genial, si el cliente no está registrado en la
hoja CLIENTES, que al escribir el Nº cédula del cliente, en la hoja
FACTURADEVENTAS, el cursor se posicione en la celda NOMBRE DEL CLIENTE para
escribir el nombre del cliente y el cliente quede registrado automáticamente
en la hoja CLIENTES, pero si el cliente ya está registrado en la hoja
CLIENTES, pues al escribir el Nº cédula del cliente aparezca automáticamente
su nombre en la celda NOMBRE DEL CLIENTE.

Será que pueden ayudarme? Gracias por la ayuda.

Griego59

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
27/09/2007 - 03:11 | Informe spam
hola, Darío !

Tengo una celda Nº CEDULA DEL CLIENTE y otra celda NOMBRE DEL CLIENTE.
Cuando escribo el Nº cedula... aparece... el nombre... con... BUSCAR... de otra hoja CLIENTES ...
El problema es que muchas veces el cliente no esta registrado en la hoja CLIENTES
y es necesario ir hasta la hoja CLIENTES, registrar el cliente
ordenar las filas y luego regresar a la hoja FACTURA DE VENTAS para completar la factura.
... seria genial, si el cliente no esta registrado... que al escribir el Nº cedula... en la hoja FACTURADEVENTAS
... se posicione en la celda NOMBRE DEL CLIENTE para escribir el nombre del cliente y... quede registrado... en la hoja CLIENTES
... si el cliente ya esta registrado... al escribir el Nº cedula... aparezca... su nombre en la celda NOMBRE DEL CLIENTE...



es posible que *la forma* que expones para solucionar un ingreso *erroneo* para buscar en un listado no fuera *la mejor* [me explico]:

quieres *sobre-escribir* en una celda que tiene la funcion buscarv(...) con el nombre de un cliente *nuevo* y despues...
-> mandar a registro los datos del cliente nuevo... re/ordenar el listado de clientes... y *REPONER* la funcion buscarv(...) ???

si se ingresa el numero 91 [inexistente] por error *dislexico* de quien captura y el numero real *debio ser* 19 [que si existe]...
-> debe *darse alta* al cliente 91 [inexistente en el listado y en la reaidad] aunque no sea un cliente [nuevo] realmente ?

[probablemente] se serviria una macro que muestre el formulario de administracion de listados [de la hoja CLIENTES]...
-> cuando el ingreso del numero de cedula devuelva error en la celda con la funcion buscarv(...) ??? [o a voluntad] ???

comentas [si hubiera] algun detalle *de consideracion* ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 GRIEGO59
27/09/2007 - 05:36 | Informe spam
Hola, Hector!

Tienes razón. Me gusta tu sugerencia. No me había detenido a pensar en eso.
Ni siquiera tenía (ya estoy haciendo uno) un formulario para dar de alta a
los clientes en la hoja CLIENTES.

Luego si al escribir en Nº de cédula del cliente en la hoja FACTURA DE
VENTAS la función buscar da error, pues se abre automáticamente el formulario
para dar de alta al cliente. Este formulario tendría un botón REGRESAR A
VENTAS en caso de error *dislexico* y/o en caso terminar de dar de alta al
cliente.

Por lo visto tengo ideas muy extensas para situaciones que se pueden
resolver con ideas simples y efectivas.

Por cierto mi función no da error si se tipea un número mayor al último
existente en la lista, p.e. si en mi lista de clientes el mayor número
existente es 126 y escribo 3326, la función buscar lo toma como si fuese 126:
=+BUSCAR(E2;Clientes!A2:A195;Clientes!B2:B195)

Saludos,
Griego59
Respuesta Responder a este mensaje
#3 Héctor Miguel
27/09/2007 - 06:57 | Informe spam
hola, Darío !

[creo que *de momento*] no es necesario *inventarse* un formulario para dar de alta a los clientes nuevos...
-> el ejemplo muestra el formulario *incorporado* de excel para la administracion de listados ;)

solo es necesario considerar los siguientes *supuestos* [a falta de detalles mas... *precisos*] :-(

1) la formula que estas usando es necesario cambiarla...
de: -> =+BUSCAR(E2;Clientes!A2:A195;Clientes!B2:B195)
a: -> =BUSCARV(E2;Clientes!A:B,2;0)

2) estoy suponiendo que *la formula* [anterior] la usas en la celda 'F2' de la hoja "facturadeventas"
OJO: ya que en el codigo se hace referencia a *esta* celda -> F2 [ya que el codigo lo pones en E2]

3) estoy suponiendo que en la hoja "clientes" solo usas las columnas A y B y que la fila 1 son los titulos -?-
OJO: que son las columnas que se re/ordenan luego de *terminar* con el formulario de entrada/consulta de datos

4) tambien estoy *forzando* al mostrarse el dialogo, la introduccion del codigo *inexistente* [celda E2 de "facturadeventas"]

-> copia/pega las siguientes instrucciones en el modulo de codigo de la hoja "facturadeventas"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> "$E$2" Then Exit Sub
If Not Evaluate("iserror(f2)") Then Exit Sub
If MsgBox("El codigo solicitado: " & Target & " NO existe..." & vbCr & _
"Confirmas que debe darse de alta ?", vbYesNo, _
"Alta de clientes...") = vbNo Then Exit Sub
With Worksheets("clientes")
SendKeys "{down " & Application.CountA(.[a:a]) - 1 & "}" & Target & "{tab}"
.ShowDataForm
.[a:b].Sort Key1:=.[a2], Order1:=xlAscending, Header:=xlYes
End With
Target.Select
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
Tienes razon. Me gusta tu sugerencia. No me habia detenido a pensar en eso.
Ni siquiera tenia (ya estoy haciendo uno) un formulario para dar de alta a los clientes en la hoja CLIENTES.
Luego si al escribir en Nº de cedula del cliente en la hoja FACTURA DE VENTAS la funcion buscar da error
pues se abre automaticamente el formulario para dar de alta al cliente.
Este formulario tendria un boton REGRESAR A VENTAS en caso de error *dislexico* y/o en caso terminar de dar de alta al cliente.
Por lo visto tengo ideas muy extensas para situaciones que se pueden resolver con ideas simples y efectivas.
Por cierto mi funcion no da error si se tipea un numero mayor al ultimo existente en la lista, p.e.
si en mi lista de clientes el mayor numero existente es 126 y escribo 3326, la funcion buscar lo toma como si fuese 126:
=+BUSCAR(E2;Clientes!A2:A195;Clientes!B2:B195)
Respuesta Responder a este mensaje
#4 Héctor Miguel
27/09/2007 - 21:41 | Informe spam
hola [de nuevo], Darío ! [fe de erratas] :-((

el codigo propuesto debiera ir en el evento '_change' NO '_selectionchange' :D

[se me chispotio]
saludos,
hector.
Respuesta Responder a este mensaje
#5 GRIEGO59
27/09/2007 - 23:05 | Informe spam
Hola,
Hector!

Gracias por tu ayuda. No te preocupes por lo del evento NO, ya se corregirá.
Le hice una ligera modificación a tu fórmula:
de: -> =BUSCARV(E2;Clientes!A:B,2;0)
a: -> =BUSCARV(E2;Clientes!A:B;2;0)
No creas que sé mucho de esto, para serte sincero al recibir el mensaje de
error la tiré a pegar y a la primera salió, fue suerte.

Tu fórmula me parece fenomenal, porque no hay que indicar cual es la última
celda usada.

“2) estoy suponiendo que *la formula* [anterior] la usas en la celda 'F2' de
la hoja "facturadeventas"”

La fórmula está en C2, disculpa por no informarte. Yo Cambié en tu código el
F2 por C2, así: (Te voy a copiar un pedacito del código anterior porque tengo
la ligera sospecha que hice algo malo, porque el código no hace nada cuando
introduzco un Nº EDULA CLIENTE fuera de rango, supongo que será por eso del
evento NO, que no se que significa exactamente.

…Next
.Range("a2,b2,e2,b4:b18").ClearContents
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> "$E$2" Then Exit Sub
If Not Evaluate("iserror(C2)") Then Exit Sub
If MsgBox("El codigo solicitado: " & Target & " NO existe..." & vbCr & _
"Confirmas que debe darse de alta ?", vbYesNo, _
"Alta de clientes...") = vbNo Then Exit Sub
With Worksheets("clientes")
SendKeys "{down " & Application.CountA(.[a:a]) - 1 & "}" & Target & "{tab}"
.ShowDataForm
.[a:b].Sort Key1:=.[a2], Order1:=xlAscending, Header:=xlYes
End With
Target.Select
End Sub

“3) estoy suponiendo que en la hoja "clientes" solo usas las columnas A y B
y que la fila 1 son los titulos”

Si, efectivamente supones bien.

Saludos,
Griego59




"Héctor Miguel" escribió:

hola [de nuevo], Darío ! [fe de erratas] :-((

el codigo propuesto debiera ir en el evento '_change' NO '_selectionchange' :D

[se me chispotio]
saludos,
hector.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida