• 👏 Bienvenido a nuestra comunidad Excel

    ¿Todavía no estás registrado? 😲

    Registrate gratis aquí y podrás:

    💪 Hacer preguntas a los expertos
    ⬇️ Descargar ejemplos y plantillas
    🏅 
    Acceder a contenidos premium

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

pitisam

New member
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
 

Cacho R

Well-known member
"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.
.
 

Héctor Miguel

Well-known member
pitisam dijo:
... 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 ?
 

pitisam

New member
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.
 

Cacho R

Well-known member
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.
 

pitisam

New member
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.
 

Cacho R

Well-known member
pitisam dijo:
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...
.
 

pitisam

New member
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.
 
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.
 

pitisam

New member
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.
 

Héctor Miguel

Well-known member
pitisam dijo:
... 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 dijo:
pitisam dijo:
... 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:
Public sL As String
en el modulo de codigo del libro:
Código:
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:
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")
 
pitisam dijo:
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.
 

pitisam

New member
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.
 

pitisam

New member
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.
 

Adjuntos

pitisam

New member
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.
 

Héctor Miguel

Well-known member
pitisam dijo:
... con el código de Héctor no consigo que haga nada. Adjunto esta vez dos archivos ...
el que no te haya funcionado no significa que no funciona (el metodo propuesto), solo que no quisiste/pudiste/supiste/....adaptar a tu modelo "secreto de estado" (y es muy probable que NO sea tan sencillo como tus adjuntos ?)

mantener una hoja (o libro) por cada idioma pudiera derivar en mas inconvenientes que ventajas, sobre todo si se trata de varias celdas con reglas de validacion por lista (con distintos origenes) cuyos elementos son texto

sincronizar cambios en una lista para igualar en su modelo "espejo" requiere de macros y (como ya lo mencionaba) el origen de una lista (en mi supuesto solo puse uno de ellos) debe ser localizado (por vba) segun su origen (listas directas, desde rangos, desde rangos nombrados -nivel libro u hoja-, desde otros origenes, etc.) y si se trata de varias/muchas celdas con diversos origenes... (y si lo pretendes "de ida y vuelta" ?)

una (posible) alternativa es como la muestra del adjunto
  • desventajas: las listas (desplegables) son por numero
  • ventajas: un solo libro, varios idiomas, actualizacion inmediata, transparentes, no macros, ...

supongo que los calculos serian "lo mismo" en cualquier caso (sin importar el idioma), quiza algun tipo de cambio por equivalencias entre monedas segun cada idioma (?)
 

Adjuntos

Cacho R

Well-known member
Hola! pitisam (y Leopoldo)

No deja de llamarme la atención que el estiramiento innecesario de este tema pasa -fundamentalmente- porque no respondiste a mi pregunta inicial:
Cacho R dijo:
Entonces:
- ¿Los archivos serán manipulados por usuarios diferentes en PC's diferentes?
Te voy a brindar una solución total y completa basándome en las siguientes premisas:

- Un solo usuario tiene abiertos a ambos archivos.
- Cada uno de los archivos tiene definidos dos Nombres en el libro (según se explica en cada libro respectivo).
- Y la macro de cada archivo sólo requiere cambiar un nombre de archivo (también se especifica).
- Se desprende del procedimiento empleado que el nombre de las hojas (de las 4 hojas intervinientes) puede ser cualquiera y no necesariamente iguales.

A partir de entonces, cambias el valor de una de las celdas de validación (te especifiqué un rango de ellas), y se cambiará su celda equivalente del otro libro. Y viceversa.

¿Te sirve la idea?...
Saludos, Cacho R.
.
 

Adjuntos

pitisam

New member
Leopoldo Blancas dijo:
Hola...

Te mando los archivos... a ver si eso es lo que quieres...

-Abre los dos archivos...
-En el archivo de ESP selecciona
- En el Libro Ingles... verificas....

ListaING.xlsm
ListaESP.xlsx

Saludos
 
Arriba