Presentar nombres

06/11/2005 - 18:51 por Hernando | Informe spam
Hola a todos.

Me gustaría mejorar la hoja de liquidación que actualmente tengo.

El Libro se compone de 3 Hojas.

Hoja3: base de datos de lo productos que se venden, importes, unidades y
costes. (de donde toma datos la Hoja2)
Hoja2: donde se introducen LOS CÓDIGOS de los Productos, NOMBRES DE
CLIENTES, y PLAZOS de pago.
Hoja1: la liquidación propiamente dicha. Al introducir el NÚMERO de
producto vendido, aparece el IMPORTE de la venta. (Toma datos de la
Hoja2).

He conseguido que el número y el importe, aparezcan en el RESUMEN de la
Hoja1, pero no los nombres de los clientes.

En la Hoja2 y en la celda ( fila para poner el nombre del cliente ), que
corresponda según que producto, pongo los nombres de los clientes que
han comprado el producto, separados por una coma, puede ser uno o
varios.

Me gustaría saber que fórmula pongo en la celda de la Hoja1, para que me
mostrara, SEPARADOS POR UNA COMA (Igual que están en la Hoja2), los
nombres de los clientes que pongo en la Hoja2.

Gracias y saludos.

Preguntas similare

Leer las respuestas

#11 Hernando
10/11/2005 - 13:23 | Informe spam
Héctor Miguel, perdona las últimas explicaciones. ¡¡ Ya funciona !! El
error de que 'no diera nada' era que el rango es $C$31:$C$67 y
$B$31:$B$67 en lugar de (Hoja2!$B$31:$B$67;Hoja2!$A$31:$A$67;"A"), se me
había "colado" una columna.

Funciona perfecto. Pongo los nombres en la Hoja2 y pasan
automáticamente, separados por una (,) todos los que tienen la misma
clave de producto a la linea que corresponde. Una maravilla.

Ahora sólo un pequeño matiz. La celda donde se ubican los nombres la
tengo con formato 'General', 'Inferior', 'Ajustar texto' y 'Reducir
hasta ajustar'. Hay veces que no se agranda la celda para que aparezcan
todos los nombres [a veces llega a 8 nombres con apellidos], pero el
caso es que otras veces si, manteniendo el mismo formato. Tengo otras
celdas igual y si yo pongo los nombres, unas veces agranda y otras no
tambíen, o sea que da igual que los "traiga" de otro lado que los
"ponga" yo directamente, unas veces agranda el campo y otras no. ¿A que
puede ser debido?

Muchísimas gracias Héctor, por tu disponibilidad, ayuda y tiempo que nos
dedicas a todos.

"Hernando" escribió en el mensaje
news:
Hola Héctor:
1) si el valor de error [¡#VALOR!] lo estas obteniendo en
todas las celdas donde usas la funcion personalizada...
[probablemente] en el rango de las claves [en la hoja donde se van
a comparar claves y a traer nombres]...
-> existe una celda -o varias- donde YA existe ese valor de error
y esta siendo 'trasladado' a la funcion -?-



Cambié la orden en la macro, como me dijiste y ya no da errores.

.> 3) toma en cuenta que el codigo de la funcion NO tiene
'contemplada' la posibilidad de 'manejar' -posibles- errores :-(
y en las pruebas que he realizado, son las 'formas' en donde he
podido 'reproducir' el valor de error :))

si cualquier duda [o informacion adicional]... comentas ?



Esta indicación no la entiendo, ¿podrías aclarar o darme solución
sobre lo que me indicas ?

Yo te decía que verifiqué vba y el módulo es Normal no de Clase.
También te decía que había cambiado de -> Function
TomarClientes(Clientes As Range, Claves As Range, Clave As Range) As
String a -> Function TomarClientes(Clientes As Range, Claves As Range,
Clave) As String , como me dijiste y después de todo esto HAN
DESAPARECIDO LAS INDICACIONES DE ERRORES, pero en esas celdas E41:E48
donde tengo la fórmula
=TomarClientes("=TomarClientes(Hoja2!$B$31:$B$67;Hoja2!$A$31:$A$67;"A)"
[donde deberían aparecer los nombres de los clientes, refundidos por
productos comprados, ya sabes], quedan en blanco, no "trae" ningún
nombre de los clientes que figuran por cada producto en la Hoja2.

Hay algo que se nos escapa, o en la fórmula de la celda o en la macro
que me mandaste. [Te la copio de vba para que veas que esta tal cual,
con esta última modificación.]

Function TomarClientes(Clientes As Range, Claves As Range, Clave) As
String
Dim Celda As Range, Fila As Long: TomarClientes = "": Fila = 1
For Each Celda In Claves
If Celda = Clave Then
If TomarClientes <> "" Then TomarClientes = TomarClientes & ", "
TomarClientes = TomarClientes & Clientes.Cells(Fila)
End If: Fila = Fila + 1
Next
End Function

Gracias otra vez y saludos.

"Héctor Miguel" escribió en el mensaje
news:
hola, Hernando !

Modifique, revise y cambie, despues de escribirte y el error vario,
ya siempre a ¡#VALOR!, algo que no puse bien



1) si el valor de error [¡#VALOR!] lo estas obteniendo en todas las
celdas donde usas la funcion personalizada...
[probablemente] en el rango de las claves [en la hoja donde se van
a comparar claves y a traer nombres]...
-> existe una celda -o varias- donde YA existe ese valor de error
y esta siendo 'trasladado' a la funcion -?-

2) si el valor de error [¡#VALOR!] lo estas obteniendo en algunas de
las celdas donde usas la funcion personalizada...
[probablemente] en el rango de los clientes [en la hoja donde se
van a comparar claves y a traer nombres]...
-> existe una celda -o varias- donde YA existe ese valor de error
y esta siendo 'trasladado' a la funcion -?-

3) toma en cuenta que el codigo de la funcion NO tiene 'contemplada'
la posibilidad de 'manejar' -posibles- errores :-(
y en las pruebas que he realizado, son las 'formas' en donde he
podido 'reproducir' el valor de error :))

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





Respuesta Responder a este mensaje
#12 Héctor Miguel
11/11/2005 - 02:02 | Informe spam
hola, Hernando !

Ahora solo un peque#o matiz.
... celda... nombres... con formato 'General', 'Inferior', 'Ajustar texto' y 'Reducir hasta ajustar'.
... no se agranda la celda para que aparezcan todos los nombres [a veces llega a 8 nombres con apellidos]
... otras veces si, manteniendo el mismo formato.
... otras celdas igual... pongo los nombres, unas veces agranda y otras no
... o sea que da igual que los "traiga" de otro lado que los "ponga" yo directamente, unas veces agranda el campo y otras no
A que puede ser debido?



considerando que el ajuste de lineas al texto en el formato de celdas [como ya lo has descubierto]...
-> es 'aplicable' SOLO a 'entradas directas' en dicha/s celda/s
-> NO es 'detectado' cuando la celda varia su contenido por formulas/funciones...
[creo que] solo nos queda buscar alternativas por codigo... 'aunque' [aun por codigo]...
-> NO hay evento que 'detecte cambios' en celdas ->con formulas<-... excepto el '_calculate'

en 'via de mientras'... usa una macro como la siguiente [previamente seleccionando el rango de las celdas-nombres/formula]...
en un modulo de codigo 'normal' ==Sub AjustarTextos()
Dim Celda As Range
Application.ScreenUpdating = False
For Each Celda In Selection
Celda.WrapText = False
Celda.WrapText = True
Next
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
#13 Hernando
12/11/2005 - 15:06 | Informe spam
Hola Héctor Miguel.
Te indico los pasos que he seguido para tu segunda macro
'AjustarTextos', por si algún paso no lo he hecho bien. Abro el Libro,
voy a la Hoja1, selecciono las celdas donde se incrustarán los nombres
que recogerá de la Hoja2, y que son las filas que no se "Autoajustan",
como me indicas, entro en vba, 'Insertar', 'Módulo' y copio la macro que
me envias:
Sub AjustarTextos()
Dim Celda As Range
Application.ScreenUpdating = False
For Each Celda In Selection
Celda.WrapText = False
Celda.WrapText = True
Next
End Sub

..pero no funciona, quizá no siga bien tus pasos, por eso te los he
indicado antes. Incluyo 4 ó 5 nombres en la Hoja2, los traslada bien a
la línea correspondiente de la Hoja1, pero la línea no "abre" para que
se vean los nombres que tiene. Tengo que seleccionar las líneas ir a
Formato> Líneas>Autoajustar, y entonces abre al límite de los
nombres que tiene, para 8 o para 20 nombres. La macro, aparentemente,
"no hace nada".

Ya te digo o no he seguido bien tus pasos o la macro no 'afecta' al
'Autoajustar' para que estas líneas "abran" automáticamente al "coger"
nombres desde otro sitio.

Gracias nuevamente y saludos.

"Héctor Miguel" escribió en el mensaje
news:
hola, Hernando !

Ahora solo un peque#o matiz.
... celda... nombres... con formato 'General', 'Inferior', 'Ajustar
texto' y 'Reducir hasta ajustar'.
... no se agranda la celda para que aparezcan todos los nombres [a
veces llega a 8 nombres con apellidos]
... otras veces si, manteniendo el mismo formato.
... otras celdas igual... pongo los nombres, unas veces agranda y
otras no
... o sea que da igual que los "traiga" de otro lado que los "ponga"
yo directamente, unas veces agranda el campo y otras no
A que puede ser debido?



considerando que el ajuste de lineas al texto en el formato de celdas
[como ya lo has descubierto]...
-> es 'aplicable' SOLO a 'entradas directas' en dicha/s celda/s
-> NO es 'detectado' cuando la celda varia su contenido por
formulas/funciones...
[creo que] solo nos queda buscar alternativas por codigo... 'aunque'
[aun por codigo]...
-> NO hay evento que 'detecte cambios' en celdas ->con formulas<-...
excepto el '_calculate'

en 'via de mientras'... usa una macro como la siguiente [previamente
seleccionando el rango de las celdas-nombres/formula]...
en un modulo de codigo 'normal' ==> Sub AjustarTextos()
Dim Celda As Range
Application.ScreenUpdating = False
For Each Celda In Selection
Celda.WrapText = False
Celda.WrapText = True
Next
End Sub

saludos,
hector.

Respuesta Responder a este mensaje
#14 Héctor Miguel
13/11/2005 - 00:33 | Informe spam
hola, Hernando !

... pasos que he seguido para... macro 'AjustarTextos', por si algun paso no lo he hecho bien.
Abro el Libro, voy a la Hoja1, selecciono las celdas... entro en vba, 'Insertar', 'Modulo' y copio la macro [...]
... pero no funciona... Incluyo 4 o 5 nombres en la Hoja2, los traslada bien a... la Hoja1
pero la línea no "abre" para que se vean los nombres que tiene.
Tengo que seleccionar las líneas ir a Formato -> Lineas ->Autoajustar
La macro, aparentemente, "no hace nada"... o no he seguido bien tus pasos
o la macro no 'afecta' al 'Autoajustar' para que estas lineas "abran" automaticamente al "coger"... desde otro sitio



1) 'tengo que'... 'insistir'... en el 'detalle' acerca de que el 'ajuste' automatico de lineas [segun comentarios anteriores]...
-> es 'aplicable' SOLO a 'entradas directas' en dicha/s celda/s
-> NO es 'detectado' cuando la celda cambia su contenido como 'resultado' de formulas/funciones...
[creo que] solo nos queda buscar alternativas por codigo... 'aunque' [aun por codigo]...
-> NO hay evento que [sin 'trucos'] 'detecte cambios' en celdas ->con formulas<-... excepto el '_calculate'





2) por lo anterior... las celdas que 'cambian' su contenido de/creciendo en el numero de nombres que contienen...
-> van a seguir SIN ajuste 'automatico' cuando el resultado de la formula de/crezca el contenido de las mismas :((

3) cuando 'necesites/requieras/consideres/...' que las celdas 'ajusten' el alto de sus filas [segun cambios en resultado-formula]...
a) ejecuta 'manualmente' la macro [previa seleccion de las celdas apropiadas'] o...
b) cambiar el codigo de la macro al evento '_calculate' de 'esa' hoja [especificando el rango que se debera 'auto-ajustar'] :))

[p.e.] suponiendo que en la hoja1, el rango donde usas la funcion para extraer los nombres de los clientes fuera 'B1:B4'
copia las siguientes lineas -> en el modulo de codigo de 'esa' hoja ==Private Sub Worksheet_Calculate()
Dim Celda As Range
Application.ScreenUpdating = False
For Each Celda In Range("b2:b4")
Celda.WrapText = False
Celda.WrapText = True
Next
End Sub

comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#15 Hernando
13/11/2005 - 12:42 | Informe spam
Gracias Héctor, insistía yo, por si algo había hecho mal al ser un
auténtico novato en macros.Seguiré tus ultimas instrucciones. Sólo una
cosa más con respecto a tu macro con el código 'calculate'.

Me indicas :
..[p.e.] suponiendo que en la hoja1, el rango donde usas la funcion
para extraer los nombres de los clientes fuera 'B1:B4'
copia las siguientes lineas -> en el modulo de codigo de 'esa' hoja
==> Private Sub Worksheet_Calculate()
Dim Celda As Range
Application.ScreenUpdating = False
For Each Celda In Range("b2:b4")
Celda.WrapText = False
Celda.WrapText = True
Next
End Sub



Y mi última pregunta es: la línea de esta macro 'For Each Celda In
Range("b2:b4")' es correcta o sería con ("b1:b4), según tu suposición
del rango donde uso la función para extraer los nombres?

Ha sido un placer "charlar" contigo. Además he aprendido a incorporar
una macro a una hoja. Gracias por todo.

"Héctor Miguel" escribió en el mensaje
news:uY6dBG%
hola, Hernando !

... pasos que he seguido para... macro 'AjustarTextos', por si algun
paso no lo he hecho bien.
Abro el Libro, voy a la Hoja1, selecciono las celdas... entro en vba,
'Insertar', 'Modulo' y copio la macro [...]
... pero no funciona... Incluyo 4 o 5 nombres en la Hoja2, los
traslada bien a... la Hoja1
pero la línea no "abre" para que se vean los nombres que tiene.
Tengo que seleccionar las líneas ir a Formato -> Lineas ->Autoajustar
La macro, aparentemente, "no hace nada"... o no he seguido bien tus
pasos
o la macro no 'afecta' al 'Autoajustar' para que estas lineas "abran"
automaticamente al "coger"... desde otro sitio



1) 'tengo que'... 'insistir'... en el 'detalle' acerca de que el
'ajuste' automatico de lineas [segun comentarios anteriores]...
-> es 'aplicable' SOLO a 'entradas directas' en dicha/s celda/s
-> NO es 'detectado' cuando la celda cambia su contenido como
'resultado' de formulas/funciones...
[creo que] solo nos queda buscar alternativas por codigo... 'aunque'
[aun por codigo]...
-> NO hay evento que [sin 'trucos'] 'detecte cambios' en
celdas ->con formulas<-... excepto el '_calculate'





2) por lo anterior... las celdas que 'cambian' su contenido
de/creciendo en el numero de nombres que contienen...
-> van a seguir SIN ajuste 'automatico' cuando el resultado de la
formula de/crezca el contenido de las mismas :((

3) cuando 'necesites/requieras/consideres/...' que las celdas
'ajusten' el alto de sus filas [segun cambios en resultado-formula]...
a) ejecuta 'manualmente' la macro [previa seleccion de las celdas
apropiadas'] o...
b) cambiar el codigo de la macro al evento '_calculate' de 'esa'
hoja [especificando el rango que se debera 'auto-ajustar'] :))

[p.e.] suponiendo que en la hoja1, el rango donde usas la funcion para
extraer los nombres de los clientes fuera 'B1:B4'
copia las siguientes lineas -> en el modulo de codigo de 'esa' hoja
==> Private Sub Worksheet_Calculate()
Dim Celda As Range
Application.ScreenUpdating = False
For Each Celda In Range("b2:b4")
Celda.WrapText = False
Celda.WrapText = True
Next
End Sub

comentas ?
saludos,
hector.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida