Conocer el topindex de una lista de vlidación de datos

Solo consultas sobre macros y código VBA Excel.
Reglas del Foro
1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!
Avatar de Usuario
pitisam
Miembro Frecuente
Miembro Frecuente
Mensajes: 14
Registrado: 13 Feb 2019 09:10

Conocer el topindex de una lista de vlidación de datos

Mensaje por pitisam » 15 Ago 2019 11:22

Hola a todos, necesito hacer lo siguiente:
-Tengo 2 excel, iguales pero en idiomas distintos, y quisiera que al seleccionar una opción de una lista desplegable(por ejemplo la segunda opción) me lo copie al otro archivo en otro idioma. Es decir, si elijo en un idioma la segunda opción, que se seleccione la segunda opción en el otro archivo en otro idioma.
Intentaré ser un poco más claro, tengo un excel con una lista con los siguientes items(uno,dos,tres) y en el otro excel, en la misma celda tengo una lisa con los items(one,two,three). Necesito que si selecciono el "dos" al pulsar un boton traslade que se ha seleccionado la segunda opción al otro excel dando como resultado que en la lista aparezca seleccionada la opción "two".
Sé de la opción TopIndex para los listbox, pero no hice yo el excel y sría muy tedioso cambiarlo todo ya que tiene muchas listas desplegables.
Les agradecería que me echasen una mano.
Saludos. :D



Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
Mensajes: 11238
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires
Contactar:

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por Cacho R » 15 Ago 2019 15:17

"Sospecho", pitisam, que no estás viendo todo el panorama.

Es decir, por un lado solicitas:
- "... Les agradecería que me echasen una mano. ..."

Mientras que por el otro comentas:
- "... Sé de la opción TopIndex para los listbox, pero no hice yo el excel y sría muy tedioso ..."

Entonces:
a) TopIndex existe pero no es lo que hay que utilizar, y
b) No te queda más remedio que "tocar" el código asociado a ambos ListBox's

¿Cómo conciliamos ambos comentarios?...
Saludos, Cacho R.
.



Avatar de Usuario
Héctor Miguel
Miembro Frecuente
Miembro Frecuente
Mensajes: 5556
Registrado: 26 Mar 2005 18:31

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por Héctor Miguel » 15 Ago 2019 16:03

pitisam escribió:
15 Ago 2019 11:22
... 2 excel, iguales pero en idiomas distintos, y quisiera que... si elijo en un idioma la segunda opción, que se seleccione la segunda opción en el otro archivo en otro idioma...
para ese tipo de "sincronia" se requiere de macros que trabajen "en espejo" y (obviamente) que ambos libros esten abiertos en la misma sesion

serviria si compartes un poco mas de informacion especifica (p.ej.)

cuales son las celdas (y de que hojas) con ese tipo de reglas de validacion ?

tus listas de validacion...
- toman sus datos desde celdas (o desde rangos nombrados) ?
- o son entrada directa en el cuadro de referencia de las reglas ?



Avatar de Usuario
pitisam
Miembro Frecuente
Miembro Frecuente
Mensajes: 14
Registrado: 13 Feb 2019 09:10

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por pitisam » 17 Ago 2019 05:54

Chicos gracias por contestar tan rápido, os comento el caso. Son dos Excel iguales, solo que están en idiomas distintos, y quisiera que al modificar uno el otro se adapte, sabría hacerlo usando muchos condicionales en vba pero si añado campos nuevos pues habría que escribir nuevo código. Los Excel no tienen listbox, solo tienen listas de validación de datos, y lo único que necesitaría es saber si existe algún tipo de propiedad o forma de averiguar qué ítem de la lista de validación está seleccionado para que el segundo excel lo elija de forma automática. Si no existiese eso me vería obligado a cambiar cada lista de validación por un listbox que sí tiene esa propiedad.

Por ejemplo, en la celda A1 tengo la lista que comentaba antes (uno;dos;tres;cuatro;cinco) y en el otro Excel en la misma celda A1 tengo la misma lista en otro idioma o.ej.(one;two;three;four;five). Lo que quiero es saber si es posible que al elegir en la primera lista el valor “dos” se puede adaptar automáticamente el otro Excel para que elija “two”.

Insisto, no son listbox, son listas de validación de datos, si no fuese posible pues me tendría que entretener en cambiar todas las listas de validación de datos por listbox.

Espero haber sido más claro jeje. Muchas gracias.



Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
Mensajes: 11238
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires
Contactar:

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por Cacho R » 17 Ago 2019 09:50

Es obvio que los archivos deberán estar conectados "de algún modo".

Sin embargo tengo la sensación que faltó mencionar un detalle importante: No creo que utilices los dos archivos abiertos en la misma sesión de Excel, ni en la misma PC.

Entonces:
- ¿Cómo será "eso"?
- ¿Los archivos serán manipulados por usuarios diferentes en PC's diferentes?

Saludos, Cacho R.



Avatar de Usuario
pitisam
Miembro Frecuente
Miembro Frecuente
Mensajes: 14
Registrado: 13 Feb 2019 09:10

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por pitisam » 17 Ago 2019 10:07

Hola Cacho, gracias por contestar.
El tema de la sincronización no lo contemplo ya que he visto un video en el que se pueden manejar datos de otro excel estando cerrado, así que por esa parte en principio no tengo problema.

Lo único que necesito es saber si existe la posibilidad de usar algo parecido al topIndex para los listbox pero aplicado a las listas de validación de datos.

Gracias, saludos.



Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
Mensajes: 11238
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires
Contactar:

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por Cacho R » 17 Ago 2019 11:45

pitisam escribió:
17 Ago 2019 10:07
El tema de la sincronización no lo contemplo ...
¡Te estoy "perdiendo"!, piti, ¡Jajaja!...

Me refiero a sincronizar las listas de validación: ¿comprendes ahora?...

Y sigues sin contestar a mi pregunta...
.



Avatar de Usuario
pitisam
Miembro Frecuente
Miembro Frecuente
Mensajes: 14
Registrado: 13 Feb 2019 09:10

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por pitisam » 17 Ago 2019 11:52

Lleva razón jeje, pues se haría teniendo dos archivos Excel en el mismo directorio, al rellenar el primero tengo pensado incluir un botón que al pulsarlo guarde en unas variables el “topindex” de cada celda en cuestión y luego mediante esas variables les asigne el valor correcto a las celdas del segundo excel. No que ponga lo mismo,sino que elija las mismas opciones de la lista de validación.Eso sería todo.
Los archivos solo los maneja una persona en local, la idea es crear un Excel en castellano y al pulsar el botón que comentaba antes pues que “autorrellene” el segundo excel basándose en el primero.



Leopoldo Blancas
Miembro Frecuente
Miembro Frecuente
Mensajes: 472
Registrado: 11 Ene 2019 00:48

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por Leopoldo Blancas » 17 Ago 2019 14:04

Hola,

Se supone que lo que guardes en el primer archivo en "Español" lo tienes que guardar lo mismo en el otro archivo "Ingles" pero en ingles?

-Las bases de datos si son ambas en el mismo idioma?


Deberías de subir tus archivos, a lo mejor estamos en lo correcto... o no?

De otra manera es difícil atinarle...

Saludos.



Avatar de Usuario
pitisam
Miembro Frecuente
Miembro Frecuente
Mensajes: 14
Registrado: 13 Feb 2019 09:10

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por pitisam » 17 Ago 2019 14:08

Gracias de nuevo por la respuesta, sinceramente no puedo subir los archivos por temas de derechos. Son dos archivos iguales pero uno en español y otro en alemán, he puesto inglés antes por simplificar pero viene a ser lo mismo.

Al elegir las opciones de español y darle al botón que añadiré se debería automatizar para que el alemán este relleno igual que el español.

No hay bases de datos de por medio, solo las lista de validación de datos.

Saludos.



Avatar de Usuario
Héctor Miguel
Miembro Frecuente
Miembro Frecuente
Mensajes: 5556
Registrado: 26 Mar 2005 18:31

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por Héctor Miguel » 17 Ago 2019 15:01

pitisam escribió:
17 Ago 2019 14:08
... Son dos archivos iguales pero uno en español y otro en alemán, he puesto inglés antes por simplificar pero viene a ser lo mismo.

Al elegir las opciones de español... automatizar para que el alemán este... igual ...

No hay bases de datos de por medio, solo las lista de validación de datos....
Héctor Miguel escribió:
15 Ago 2019 16:03
pitisam escribió:
15 Ago 2019 11:22
... 2 excel, iguales pero en idiomas distintos, y quisiera que... si elijo en un idioma la segunda opción, que se seleccione la segunda opción en el otro archivo en otro idioma...
para ese tipo de "sincronia" se requiere de macros que trabajen "en espejo" y (obviamente) que ambos libros esten abiertos en la misma sesion ...
de acuerdo con lo anterior (a menos que te decidas por comentar los detalles "perdidos"), lo siguiente funciona de esta manera:

supuestos:
dos hojas en el mismo libro de nombre "español" e "ingles" (o "aleman", o "griego" o ???)
puedes adaptar para hojas en diferente libro (abiertos EN LA MISMA sesion de excel <= IMPORTANTE)

en un modulo de codigo estandar:

Código: Seleccionar todo

Public sL As String
en el modulo de codigo del libro:

Código: Seleccionar todo

Private Sub Workbook_Open(): sL = Application.International(5): End Sub
en el modulo de codigo de la hoja "español"
(sabiendo cuales celdas tienen las reglas y las mismas que en su "espejo"):

Código: Seleccionar todo

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim celda As String, srcVD1, srcVD2, srcR, op As Long
  celda = Target.Address
  Application.EnableEvents = False: On Error GoTo salida
  With Worksheets("ingles").Range(celda)
    Select Case celda
      Case "$B$4", "$D$4"
        If IsEmpty(Target) Then .Value = Empty: GoTo salida
    End Select
    Select Case celda
      Case "$B$4" ' celda con lista directa '
        srcVD1 = Split(CStr(Target.Validation.Formula1), sL)
        srcVD2 = Split(CStr(.Validation.Formula1), sL)
        op = Application.Match(Target, srcVD1, 0)
        .Value = Application.Index(srcVD2, op)
      Case "$D$4" ' celda con otro tipo de origen de la lista '
        ' aqui CAMBIA la deteccion de la regla (hay varias) ... '
    End Select
  End With
salida: Application.EnableEvents = True
End Sub
en la otra hoja (u otro libro)
lo mismo que el punto anterior, cambiando (obviamente) el nombre de la hoja "espejo" (ingles => español)
y referir por completo el nombre de cada libro en la instruccion: With Worksheets(...
p.ej. a: => With Workbooks("el libro espejo.xls/m").Worksheets("la hoja espejo")



Leopoldo Blancas
Miembro Frecuente
Miembro Frecuente
Mensajes: 472
Registrado: 11 Ene 2019 00:48

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por Leopoldo Blancas » 17 Ago 2019 15:02

pitisam escribió:
17 Ago 2019 14:08
sinceramente no puedo subir los archivos por temas de derechos.
Jajaja Has de trabajar en la CIA... o en la NASA? o en la mafia ciciliana... jajaja

Solo te pido que hagas dos archivos facilitos de una lista desplegable en una hoja y otra hoja donde se almacenan los datos, cada uno en su idioma que necesitas, español e ingles. Has de cuenta que sobre esos archivos quieres que hagamos la aplicación o recomendación.

Saludos.



Avatar de Usuario
pitisam
Miembro Frecuente
Miembro Frecuente
Mensajes: 14
Registrado: 13 Feb 2019 09:10

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por pitisam » 17 Ago 2019 15:25

Gracias hector probaré en cuanto pueda y Leopoldo disculpa jejejjee si veo que no me funciona creo unos archivos de ejemplo sencillos y los subo, seguro que así será todo mucho más claro, podría haber empezado por ahí la verdad jajajaja.

Gracias chicos, os mantendré informados.



Avatar de Usuario
pitisam
Miembro Frecuente
Miembro Frecuente
Mensajes: 14
Registrado: 13 Feb 2019 09:10

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por pitisam » 19 Ago 2019 07:24

Buenas de nuevo, con el código de Héctor no consigo que haga nada. Adjunto esta vez dos archivos, uno el supuesto español y otro igual en ingles.

El nombre de las celdas y listas es el mismo en las dos, lo que cambia es el contenido de la celda.

La celda A1 tiene una lista de validación de datos como he comentado en anteriores mensajes.

Solo necesito saber cómo hacer que al cambiar la selección de la lista en el archivo listaESP se reflaje en listaING.

Gracias a todos.
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.



Avatar de Usuario
pitisam
Miembro Frecuente
Miembro Frecuente
Mensajes: 14
Registrado: 13 Feb 2019 09:10

Re: Conocer el topindex de una lista de vlidación de datos

Mensaje por pitisam » 19 Ago 2019 09:41

Hola de nuevo familia,
en primer lugar he de pedir disculpas ya que me estaba complicando demasiado.
Se me ha ocurrido otra forma de hacer lo que necesito más fácil, pero no consigo que funcione.

En una hoja aparte tengo todas las tablas con los nombres utilizados en las listas de validación de datos, así que he creado una nueva hoja con el mismo contenido en el otro idioma.

La idea es:
-Tengo 3 hojas, una la que uso en ese momento, otra en español y otra en alemán con los mismos datos.
-Mediante una macro lo que hago es que copio todos los datos de la hoja del idioma que quiera y los pego en la hoja de los nombres utilizados en ese momento.
-De esta forma tan cutre(pero eficaz) consigo que las listas de validación cambien de idioma.

PROBLEMA: Las celdas no cambian de valor, solo al pulsar en el desplegable aparecen las nuevas opciones, ¿saben si hay alguna forma de que el valor se actualice o estoy perdiendo el tiempo con este método?

Gracias de nuevo de antemano por vuestro tiempo.



Responder