validacion si no hay datos

17/11/2004 - 02:45 por lucas | Informe spam
Hola amigos ,alguien me puede decir como se puede hacer
esto:
Tengo un libro con varias hojas deseo hacer que las
columna B y F de la hoja1 se validen con la columna A de
la hoja seleccionada, estas tienen números consecutivos
hasta el 40 ,pero si en la columna B de la hoja
seleccionada tiene datos en la validacion solo me muestre
los números que estan libre. Se entiende ??
Un saludo Lucas D.

Preguntas similare

Leer las respuestas

#6 Lucas
20/11/2004 - 15:19 | Informe spam
Hola KL ,casi es lo que deseo, pero yo no quiero que
salgan los números que no tienen datos así 1,5,22
Sino que esos números o celdas sean usado como origen
RANGO para validar la lista de la columna B que al dar
clic en ella se despliegue la lista con los números libres
de la hoja seleccionada y así poder escoger uno libre, si
es posible eliminar #¡VALOR! ,que sale si no tengo puesto
el nombre de una hoja pues yo arrastro la formula
=BuscarCeldasVacias(A2) por toda la columna hasta la linea
10000 y se llena toda de #¡VALOR!.
Un saludo Lucas.



Lucas,

Prueba la funcion (UDF) q te pongo mas abajo. Esta


funcion asume lo
siguiente:
1. La extraccion se hace en la hoja llamada "Hoja1"
2. El resto de hojas continen nombres o numeros de


registros en el rango
A1:A40
3. Las celdas validadas se encuentran en el rango B1:B40

Modo de empleo:
1. Ve al VBA Editor y crea un nuevo modulo


(p.ej. "Modulo1")
2. Copia ahi el codigo de abajo.
3. Ve a la hoja llamada "Hoja1", entra en cualquier celda


(p.ej. A1) el
nombre de una hoja.
4. Entra cualquier otra celda (p.ej. B1) la siguiente


formula
=BuscarCeldasVacias(A2)

Saludos,
KL

Inicio Codigo--
Function BuscarCeldasVacias(nombreHoja As String) As


String
Application.Volatile
Set miHoja = Worksheets(nombreHoja)

'Evalua si el nombre de hoja introducido como parametro
'de la funcion es valido y no equivale a "Hoja1"
If miHoja Is Nothing Or nombreHoja = "Hoja1" Then
BuscarCeldasVacias = ""
Else
MiLista = ""
For fila = 1 To 40
If miHoja.Cells(fila, 2).Value = "" And _
miHoja.Cells(fila, 1).Value <> "" Then
If MiLista = "" Then
MiLista = miHoja.Cells(fila, 1).Value
Else
MiLista = MiLista & "," _
& miHoja.Cells(fila, 1).Value
End If
End If
Next fila
BuscarCeldasVacias = MiLista
End If
End Function
-Fin Codigo

"Lucas" wrote in


message
news:807901c4cdec$79348ec0$
Hola KL,si como en el primer caso que me pones que al dar
clic en la celda de la columna B me aparezcan los numeros
que no tienen datos.
Un saludo Lucas


A ver si lo llego a entender - necestas que el resultado


salga asi?:

A B
Hoja2 3,5,6,9
Hoja3 1,12
Hoja4 2,35,40
Hoja5 11,38
Hoja6 7,17,39

o asi?

A B C D E etc.
Hoja2 3 5 6 9
Hoja3 1 12
Hoja4 2 35 40
Hoja5 11 38
Hoja6 7 17 39

Saludos,
KL



"Lucas" wrote in


message
news:1b0e01c4cd64$43c16cf0$
Hola KL,gracias por responder pero te diré que mi correo
no admite enviar adjunto y tampoco tengo acceso a




Internet
entro al foro por la Intranet de mi trabajo que tiene
acceso a MS como pagina WEB.
Te explico con mas detalle en la columna A de la Hoja1
tengo hasta la linea 1500 validada con el nombre de las
hojas de mi libro ,al escoger una hoja ,esta tiene en su
columna A numeros consecutivos hasta el 40, pero algunos
numeros tienen datos en la columna B,yo quiero que me
filtre los que estan libre y me valide la columna B de la
hoja1 con esos numeros pero claro con respecto a la hoja
seleccionada.
ej:esto es lo que tiene una de las hojas selecionada.
A B
1 EM-MV-12
2 LTN-2222
3
4 AM-M-25
5
6
7 EM-MA-12

Que en la hoja1 en la columna B este validada con el


3,5,6
y todos los números que no tienen nada en la columna B.
No se si ahora me entiendes.
Un saludo Lucas D.



Lucas,

Suena como q es algo muy simple lo q intentas conseguir


pero no estoy
seguro. Por que no me envias la hoja al lapink2000




[ARROBA]
hotmail.com
(reemplaza "[ARROBA]" con "@" sin comillas) y te la






miro.

Saludos,
KL

"lucas" wrote in


message
news:6b4e01c4cc47$12bbfa30$
Hola amigos ,alguien me puede decir como se puede hacer
esto:
Tengo un libro con varias hojas deseo hacer que las
columna B y F de la hoja1 se validen con la columna A de
la hoja seleccionada, estas tienen números consecutivos
hasta el 40 ,pero si en la columna B de la hoja
seleccionada tiene datos en la validacion solo me






muestre
los números que estan libre. Se entiende ??
Un saludo Lucas D.


.





.





.

Respuesta Responder a este mensaje
#7 KL
21/11/2004 - 00:04 | Informe spam
Lucas,

Todavia no estoy seguro de si te entiendo lo q quieres hacer (o tal vez no
entienda la finalidad de una funcion/macro semejante). De todas maneras
prueba el codigo de abajo. Tienes q hacer lo q sigue:

1. Ve al VBA Editor y copia el codigo de abajo al modulo de la hoja donde
quires q aparezca el resultado
2. Vuelve a la hoja del resultado e introduce la lista de nombres de hojas
en cualquier sitio, pero verticalmente.
3. Ahora si haces clic en la celda q queda inmediatamente a la izquierda de
la q contiene el nombre de una hoja, se anadira una validacion a esa donde
la lista de opciones se compondra de los valores q buscas.

Espero haber ayudado.

Un saludo,
KL

'-Inicio Codigo-
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MiLista As String
Dim fila As Integer
Dim MiHoja As Worksheet

On Error Resume Next
With Target
If .Count > 1 Or .Offset(0, -1).Value = "" _
Or .Offset(0, -1).Value = ActiveSheet.Name _
Then Exit Sub
Set MiHoja = Worksheets(.Offset(0, -1).Value)
End With
On Error GoTo 0

If MiHoja Is Nothing Then Exit Sub

Application.ScreenUpdating = False
With ActiveSheet
For fila = 1 To 40
If MiHoja.Cells(fila, 2).Value = "" And _
MiHoja.Cells(fila, 1).Value <> "" Then
If MiLista = "" Then
MiLista = MiHoja.Cells(fila, 1).Value
Else
MiLista = MiLista & "," _
& MiHoja.Cells(fila, 1).Value
End If
End If
Next fila
End With

If MiLista = "" Then Exit Sub
With Target.Validation
.Delete
.Add xlValidateList, xlValidAlertStop, _
xlBetween, MiLista
End With
Application.ScreenUpdating = True
End Sub
'-Final Codigo-

"Lucas" wrote in message
news:738c01c4cf0b$e83dca50$

Hola KL ,casi es lo que deseo, pero yo no quiero que
salgan los números que no tienen datos así 1,5,22
Sino que esos números o celdas sean usado como origen
RANGO para validar la lista de la columna B que al dar
clic en ella se despliegue la lista con los números libres
de la hoja seleccionada y así poder escoger uno libre, si
es posible eliminar #¡VALOR! ,que sale si no tengo puesto
el nombre de una hoja pues yo arrastro la formula
=BuscarCeldasVacias(A2) por toda la columna hasta la linea
10000 y se llena toda de #¡VALOR!.
Un saludo Lucas.



Lucas,

Prueba la funcion (UDF) q te pongo mas abajo. Esta


funcion asume lo
siguiente:
1. La extraccion se hace en la hoja llamada "Hoja1"
2. El resto de hojas continen nombres o numeros de


registros en el rango
A1:A40
3. Las celdas validadas se encuentran en el rango B1:B40

Modo de empleo:
1. Ve al VBA Editor y crea un nuevo modulo


(p.ej. "Modulo1")
2. Copia ahi el codigo de abajo.
3. Ve a la hoja llamada "Hoja1", entra en cualquier celda


(p.ej. A1) el
nombre de una hoja.
4. Entra cualquier otra celda (p.ej. B1) la siguiente


formula
=BuscarCeldasVacias(A2)

Saludos,
KL

Inicio Codigo--
Function BuscarCeldasVacias(nombreHoja As String) As


String
Application.Volatile
Set miHoja = Worksheets(nombreHoja)

'Evalua si el nombre de hoja introducido como parametro
'de la funcion es valido y no equivale a "Hoja1"
If miHoja Is Nothing Or nombreHoja = "Hoja1" Then
BuscarCeldasVacias = ""
Else
MiLista = ""
For fila = 1 To 40
If miHoja.Cells(fila, 2).Value = "" And _
miHoja.Cells(fila, 1).Value <> "" Then
If MiLista = "" Then
MiLista = miHoja.Cells(fila, 1).Value
Else
MiLista = MiLista & "," _
& miHoja.Cells(fila, 1).Value
End If
End If
Next fila
BuscarCeldasVacias = MiLista
End If
End Function
-Fin Codigo

"Lucas" wrote in


message
news:807901c4cdec$79348ec0$
Hola KL,si como en el primer caso que me pones que al dar
clic en la celda de la columna B me aparezcan los numeros
que no tienen datos.
Un saludo Lucas


A ver si lo llego a entender - necestas que el resultado


salga asi?:

A B
Hoja2 3,5,6,9
Hoja3 1,12
Hoja4 2,35,40
Hoja5 11,38
Hoja6 7,17,39

o asi?

A B C D E etc.
Hoja2 3 5 6 9
Hoja3 1 12
Hoja4 2 35 40
Hoja5 11 38
Hoja6 7 17 39

Saludos,
KL



"Lucas" wrote in


message
news:1b0e01c4cd64$43c16cf0$
Hola KL,gracias por responder pero te diré que mi correo
no admite enviar adjunto y tampoco tengo acceso a




Internet
entro al foro por la Intranet de mi trabajo que tiene
acceso a MS como pagina WEB.
Te explico con mas detalle en la columna A de la Hoja1
tengo hasta la linea 1500 validada con el nombre de las
hojas de mi libro ,al escoger una hoja ,esta tiene en su
columna A numeros consecutivos hasta el 40, pero algunos
numeros tienen datos en la columna B,yo quiero que me
filtre los que estan libre y me valide la columna B de la
hoja1 con esos numeros pero claro con respecto a la hoja
seleccionada.
ej:esto es lo que tiene una de las hojas selecionada.
A B
1 EM-MV-12
2 LTN-2222
3
4 AM-M-25
5
6
7 EM-MA-12

Que en la hoja1 en la columna B este validada con el


3,5,6
y todos los números que no tienen nada en la columna B.
No se si ahora me entiendes.
Un saludo Lucas D.



Lucas,

Suena como q es algo muy simple lo q intentas conseguir


pero no estoy
seguro. Por que no me envias la hoja al lapink2000




[ARROBA]
hotmail.com
(reemplaza "[ARROBA]" con "@" sin comillas) y te la






miro.

Saludos,
KL

"lucas" wrote in


message
news:6b4e01c4cc47$12bbfa30$
Hola amigos ,alguien me puede decir como se puede hacer
esto:
Tengo un libro con varias hojas deseo hacer que las
columna B y F de la hoja1 se validen con la columna A de
la hoja seleccionada, estas tienen números consecutivos
hasta el 40 ,pero si en la columna B de la hoja
seleccionada tiene datos en la validacion solo me






muestre
los números que estan libre. Se entiende ??
Un saludo Lucas D.


.





.





.

Respuesta Responder a este mensaje
#8 KL
23/11/2004 - 03:32 | Informe spam
Lucas,
Aqui tienes el codigo final. Es sin duda mejorable, pero espero te sirva tal
cual. Si no te importa te pediria q publiques aqui las explicaciones
adicionales q me enviaste por correo electronico para q se entienda mejor el
codigo y para q los q tengan una tarea similar puedan aprovechar este codigo
o parte del mismo.
Saludos,
KL

'-Inicio Codigo--
'Establece el nombre de la hoja principal.
Const MiHojaPrincipal = "Circuitos"

'Establece el numero maximo de canales
'dentro de las hojas de sistemas.
Const NoMaxCanales = 100

'Refresca las validaciones cada vez que se
'introduce un cambio en cualquier hoja del libro.
Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Target As Range)

'Declara las variables
Dim Circuito As Range
Dim Circuitos As Range
Dim Sistemas
Dim Canales

'Asigna columnas B, D y F para los sistemas.
Sistemas = Array(2, 4, 6)

'Asigna columnas C, E y G para los canales.
Canales = Array(3, 5, 7)

'Determina el rango usado dentro de la columna A
'para establecer la longitud de la lista de los circuitos.
Set Circuitos = ThisWorkbook.Sheets(MiHojaPrincipal). _
UsedRange.Columns(1).Cells

With Application
'Inabilita los eventos del sistema.
.EnableEvents = False

'Inabilita la actualizacion de pantalla.
.ScreenUpdating = False

'Borra las validaciones anteriores en
'las columnas de canales.
For n = 0 To 2
Worksheets(MiHojaPrincipal).Columns(Canales(n)) _
.Validation.Delete
Next n

'Crea las listas y asigna validaciones a las
'celdas dentro de las columnas de canles
'a partir de los correspondientes nombres de
'sistema dentro de las columnas de sistemas.
For Each Circuito In Circuitos
For n = 0 To 2

'Invoca el macro de abajo usando
'como parametros la columna de sistema,
'la columna de canal y el rango de
'circuito.
CrearValidacion Sistemas(n), Canales(n), Circuito
Next n
Next Circuito

'Abilita los eventos del sistema.
.EnableEvents = True

'Abilita la actualizacion de pantalla.
.ScreenUpdating = True
End With
End Sub

Sub CrearValidacion(MiSistema, MiCanal, MiRango)
'Declara las variables
Dim MiHoja As Worksheet
Dim MiLista As String
Dim c As Single

'Borra la lista anterior.
MiLista = ""

'Anula la hoja a validar anterior.
Set MiHoja = Nothing

On Error Resume Next
'Establece la nueva hoja a validar.
Set MiHoja = Worksheets(MiRango.Offset(0, MiSistema - 1).Text)
On Error GoTo 0

'Si el nombre de la hoja es valido,...
If Not MiHoja Is Nothing Then

'...y no pertenece a la hoja principal,...
If MiHoja.Name <> MiHojaPrincipal Then

'...crea la lista de canales disponibles.
For c = 1 To NoMaxCanales
If MiHoja.Cells(c, 2).Value = "" And _
MiHoja.Cells(c, 1).Value <> "" Then
If MiLista = "" Then
MiLista = MiHoja.Cells(c, 1).Value
Else
MiLista = MiLista & "," _
& MiHoja.Cells(c, 1).Value
End If
End If
Next c

'Si la lista de canales disponibles no esta
'vacia,...
If MiLista <> "" Then

'...crea la validacion usando la lista.
MiRango.Offset(0, MiCanal - 1).Validation.Add _
xlValidateList, xlValidAlertStop, _
xlBetween, MiLista
End If
End If
End If
End Sub
'-Fin Codigo--


"KL" wrote in message
news:%
Lucas,

Todavia no estoy seguro de si te entiendo lo q quieres hacer (o tal vez no
entienda la finalidad de una funcion/macro semejante). De todas maneras
prueba el codigo de abajo. Tienes q hacer lo q sigue:

1. Ve al VBA Editor y copia el codigo de abajo al modulo de la hoja donde
quires q aparezca el resultado
2. Vuelve a la hoja del resultado e introduce la lista de nombres de hojas
en cualquier sitio, pero verticalmente.
3. Ahora si haces clic en la celda q queda inmediatamente a la izquierda
de la q contiene el nombre de una hoja, se anadira una validacion a esa
donde la lista de opciones se compondra de los valores q buscas.

Espero haber ayudado.

Un saludo,
KL

'-Inicio Codigo-
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MiLista As String
Dim fila As Integer
Dim MiHoja As Worksheet

On Error Resume Next
With Target
If .Count > 1 Or .Offset(0, -1).Value = "" _
Or .Offset(0, -1).Value = ActiveSheet.Name _
Then Exit Sub
Set MiHoja = Worksheets(.Offset(0, -1).Value)
End With
On Error GoTo 0

If MiHoja Is Nothing Then Exit Sub

Application.ScreenUpdating = False
With ActiveSheet
For fila = 1 To 40
If MiHoja.Cells(fila, 2).Value = "" And _
MiHoja.Cells(fila, 1).Value <> "" Then
If MiLista = "" Then
MiLista = MiHoja.Cells(fila, 1).Value
Else
MiLista = MiLista & "," _
& MiHoja.Cells(fila, 1).Value
End If
End If
Next fila
End With

If MiLista = "" Then Exit Sub
With Target.Validation
.Delete
.Add xlValidateList, xlValidAlertStop, _
xlBetween, MiLista
End With
Application.ScreenUpdating = True
End Sub
'-Final Codigo-

"Lucas" wrote in message
news:738c01c4cf0b$e83dca50$

Hola KL ,casi es lo que deseo, pero yo no quiero que
salgan los números que no tienen datos así 1,5,22
Sino que esos números o celdas sean usado como origen
RANGO para validar la lista de la columna B que al dar
clic en ella se despliegue la lista con los números libres
de la hoja seleccionada y así poder escoger uno libre, si
es posible eliminar #¡VALOR! ,que sale si no tengo puesto
el nombre de una hoja pues yo arrastro la formula
=BuscarCeldasVacias(A2) por toda la columna hasta la linea
10000 y se llena toda de #¡VALOR!.
Un saludo Lucas.



Lucas,

Prueba la funcion (UDF) q te pongo mas abajo. Esta


funcion asume lo
siguiente:
1. La extraccion se hace en la hoja llamada "Hoja1"
2. El resto de hojas continen nombres o numeros de


registros en el rango
A1:A40
3. Las celdas validadas se encuentran en el rango B1:B40

Modo de empleo:
1. Ve al VBA Editor y crea un nuevo modulo


(p.ej. "Modulo1")
2. Copia ahi el codigo de abajo.
3. Ve a la hoja llamada "Hoja1", entra en cualquier celda


(p.ej. A1) el
nombre de una hoja.
4. Entra cualquier otra celda (p.ej. B1) la siguiente


formula
=BuscarCeldasVacias(A2)

Saludos,
KL

Inicio Codigo--
Function BuscarCeldasVacias(nombreHoja As String) As


String
Application.Volatile
Set miHoja = Worksheets(nombreHoja)

'Evalua si el nombre de hoja introducido como parametro
'de la funcion es valido y no equivale a "Hoja1"
If miHoja Is Nothing Or nombreHoja = "Hoja1" Then
BuscarCeldasVacias = ""
Else
MiLista = ""
For fila = 1 To 40
If miHoja.Cells(fila, 2).Value = "" And _
miHoja.Cells(fila, 1).Value <> "" Then
If MiLista = "" Then
MiLista = miHoja.Cells(fila, 1).Value
Else
MiLista = MiLista & "," _
& miHoja.Cells(fila, 1).Value
End If
End If
Next fila
BuscarCeldasVacias = MiLista
End If
End Function
-Fin Codigo

"Lucas" wrote in


message
news:807901c4cdec$79348ec0$
Hola KL,si como en el primer caso que me pones que al dar
clic en la celda de la columna B me aparezcan los numeros
que no tienen datos.
Un saludo Lucas


A ver si lo llego a entender - necestas que el resultado


salga asi?:

A B
Hoja2 3,5,6,9
Hoja3 1,12
Hoja4 2,35,40
Hoja5 11,38
Hoja6 7,17,39

o asi?

A B C D E etc.
Hoja2 3 5 6 9
Hoja3 1 12
Hoja4 2 35 40
Hoja5 11 38
Hoja6 7 17 39

Saludos,
KL



"Lucas" wrote in


message
news:1b0e01c4cd64$43c16cf0$
Hola KL,gracias por responder pero te diré que mi correo
no admite enviar adjunto y tampoco tengo acceso a




Internet
entro al foro por la Intranet de mi trabajo que tiene
acceso a MS como pagina WEB.
Te explico con mas detalle en la columna A de la Hoja1
tengo hasta la linea 1500 validada con el nombre de las
hojas de mi libro ,al escoger una hoja ,esta tiene en su
columna A numeros consecutivos hasta el 40, pero algunos
numeros tienen datos en la columna B,yo quiero que me
filtre los que estan libre y me valide la columna B de la
hoja1 con esos numeros pero claro con respecto a la hoja
seleccionada.
ej:esto es lo que tiene una de las hojas selecionada.
A B
1 EM-MV-12
2 LTN-2222
3
4 AM-M-25
5
6
7 EM-MA-12

Que en la hoja1 en la columna B este validada con el


3,5,6
y todos los números que no tienen nada en la columna B.
No se si ahora me entiendes.
Un saludo Lucas D.



Lucas,

Suena como q es algo muy simple lo q intentas conseguir


pero no estoy
seguro. Por que no me envias la hoja al lapink2000




[ARROBA]
hotmail.com
(reemplaza "[ARROBA]" con "@" sin comillas) y te la






miro.

Saludos,
KL

"lucas" wrote in


message
news:6b4e01c4cc47$12bbfa30$
Hola amigos ,alguien me puede decir como se puede hacer
esto:
Tengo un libro con varias hojas deseo hacer que las
columna B y F de la hoja1 se validen con la columna A de
la hoja seleccionada, estas tienen números consecutivos
hasta el 40 ,pero si en la columna B de la hoja
seleccionada tiene datos en la validacion solo me






muestre
los números que estan libre. Se entiende ??
Un saludo Lucas D.


.





.





.





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