Celda activa de Excel en la esquina superior izquierda

Resuelto
le Glauque Mensajes publicados 60 Fecha de registro   Estado Miembro Última intervención   -  
le Glauque Mensajes publicados 60 Fecha de registro   Estado Miembro Última intervención   -
Hola a todos,

Estoy buscando crear una serie de macros (que luego vincularé a un botón) que me lleven cada vez a una celda diferente (en función del botón).
Hasta ahora, sin problema, he creado macros (con el grabador, porque no sé nada de Visual Basic), y esa macroparece seleccionar bien la celda en cuestión.
Pero lo máximo sería que me lleve esa celda a la parte superior izquierda de la pantalla...

Me informé evidentemente en internet antes de venir a molestar... pero no encuentro respuestas...
Digamos que la única que encontré, en el sitio de Microsoft, es la siguiente:

Síntomas
¿Existe algún comando que permita seleccionar cualquier celda de una hoja de cálculo y ubicarla en la esquina superior izquierda de la ventana activa?

Solución
Basta con usar la función SELECCION.ATREASAR con su segundo argumento igual a VERDADERO.
EJEMPLO :
=SELECCION.ATTEÑIR("L20C20";VERDADERO)
=RETORNAR()
Esta macro ordena seleccionar la celda L20C20 y desplaza la ventana activa para mostrar la celda L20C20 en la esquina superior izquierda de la ventana activa de la hoja de cálculo.
Si este segundo argumento es FALSO o se omite, Microsoft Excel realiza el desplazamiento normal.

Sin embargo, no logro entender cómo implementarlo. Un copiar/pegar en el editor VB (y el reemplazo por las celdas que me interesan) no parece funcionar (le cuesta con el punto y coma antes del VERDADERO...).

Estoy algo perdido...

¡Ayuda!

Gracias de antemano...

l.G.
Configuración: Windows XP Firefox 2.0.0.14

1 respuesta

  1. LePierre Mensajes publicados 249 Estado Miembro 338
     
    hola

    buscando en los foros había encontrado esto que podría servirte:
    Sub test() 'para ubicar la celda S4 en la esquina superior izquierda Fila 4, columna 19 Hoja = ActiveSheet.Name MakeTopLeft ThisWorkbook.Sheets(Hoja).Cells(4, 19) End Sub Sub MakeTopLeft(R As Range) R.Parent.Activate ActiveWindow.ScrollRow = R.Row ActiveWindow.ScrollColumn = R.Column End Sub

    hasta luego
    2
    1. le Glauque Mensajes publicados 60 Fecha de registro   Estado Miembro Última intervención   1
       
      Muchas gracias.... Así que lo copié todo en la pestaña (Hoja1). Entonces, la celda en cuestión aparece en la esquina superior izquierda (¡y eso es genial!), pero no es la "celda activa"; esta última sigue siendo la celda que estaba seleccionada antes... Además, ¿podría explicarme un poco en qué consiste esto (bueno, si no es demasiado complicado y si no le molesta demasiado)? Me gusta intentar entender un poco... Gracias de antemano, l.G.
      0
    2. LePierre Mensajes publicados 249 Estado Miembro 338 > le Glauque Mensajes publicados 60 Fecha de registro   Estado Miembro Última intervención  
       
      hola

      aquí está el código adaptado para colocar la celda activa en la esquina superior izquierda:
      Sub test() LigIni = Selection.Row Colini = Selection.Column Onglet = ActiveSheet.Name 'para colocar la celda S4 en la esquina superior izquierda Fila 4, columna 19 'MakeTopLeft ThisWorkbook.Sheets(Onglet).Cells(4, 19) MakeTopLeft ThisWorkbook.Sheets(Onglet).Cells(LigIni, Colini) End Sub 

      la propiedad ScrollRow devuelve o establece el número de la fila que aparece en la parte superior del panel o de la ventana.

      también puedes usar simplemente estas dos líneas de código (más sencillo que llamar a la procedimiento "MakeTopLeft") :
      Sub test2() ActiveWindow.ScrollRow = Selection.Row ActiveWindow.ScrollColumn = Selection.Column End Sub


      todo depende de tu uso.

      hasta luego
      0
    3. le Glauque Mensajes publicados 60 Fecha de registro   Estado Miembro Última intervención   1 > LePierre Mensajes publicados 249 Estado Miembro
       
      Muchas gracias, He copiado tus dos pequeńas líneas de código tras la Macro que había grabado previamente... y ¡funciona! He vuelto a copiar eso en todas las macros involucradas... ¡es estupendo! Muchas gracias. Aquí tienes lo que resulta (el objetivo del juego es buscar el título de una categoría de habilidades para tenerlas directamente ante los ojos): Sub Per() Sheets("Compétences").Select Range("A81").Select ActiveWindow.ScrollRow = Selection.Row ActiveWindow.ScrollColumn = Selection.Column End Sub Entonces, para esta, va a buscar la celda del título de las habilidades de Percepción y la coloca en la esquina superior izquierda de la pantalla. Así tengo todas las habilidades de Percepción debajo... ¡Es perfecto! Por otro lado, parecía muy bien todo el MakeTopLeft, etc. ¿Hubo alguna manera de hacer lo mismo por otras vías? Gracias de nuevo! l.G.
      0
    4. LePierre Mensajes publicados 249 Estado Miembro 338 > le Glauque Mensajes publicados 60 Fecha de registro   Estado Miembro Última intervención  
       
      hola

      la ventaja de hacer appel à une procédure "MakeTopLeft" por ejemplo es que tu código principal queda aligerado, así es más fácil de poner a punto en caso de problemas o modificaciones posteriores.
      Pero lo principal es que funcione correctamente.
      Que tengas un buen día y hasta luego
      0
    5. le Glauque Mensajes publicados 60 Fecha de registro   Estado Miembro Última intervención   1 > LePierre Mensajes publicados 249 Estado Miembro
       
      Entonces, si te sigo, ¿hay que copiar esta fórmula:

      Sub MakeTopLeft(R As Range)
      R.Parent.Activate
      ActiveWindow.ScrollRow = R.Row
      ActiveWindow.ScrollColumn = R.Column
      End Sub

      en las Procedures del doc?

      y luego, la de:

      Sub test()
      LigIni = Selection.Row
      Colini = Selection.Column
      Onglet = ActiveSheet.Name
      End Sub

      en las Functions?

      Y entonces, después, en los módulos, si por ejemplo, quiero que una Macro coloque la celda A75 en la esquina superior izquierda, y que esa celda quede activa

      Sub test()
      MakeTopLeft ThisWorkbook.Sheets(Onglet).Cells(75, 1i)
      End Sub

      ¿Estoy en lo correcto?

      ThisWorkbook, ¿designa el documento actual?
      Sheets, ¿eso es la hoja? ¿Es necesario indicar el nombre de la hoja?

      Si dicha hoja tiene un nombre (por ejemplo "Compétences"), ¿debería ponerse:

      Sub test()
      MakeTopLeft ThisWorkbook.Sheets(Compétences).Cells(75, 1i)
      End Sub

      Lo siento,
      estas preguntas pueden parecer básicas...

      Gracias de antemano...
      0