OVH Cloud OVH Cloud

objet Selection et evenement SheetDeactivate

4 réponses
Avatar
l.gris
Bonjour,

Lorsque je passe d'une feuille à l'autre je souhaite positionner la cellule
courante de la feuille dans laquelle j'arrive en fonction de la position
qu'elle avait dans la feuille que je viens de quitter.

J'ai donc essayé la chose suivante :
Dim lig As Integer
Dim col As Integer
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
lig=Selection.Row
col=Selection.Column
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sh.cells(lig,col).Select
End Sub

Or il semblerait que lorsque l'evenement SheetDeactivate se declenche on
soit deja arrivé dans la feuille suivante.

Ma question est donc la suivante :
Comment faire pour que l'objet Selection se rapporte à la feuille que l'on
vient de quitter ?
ou alors
Comment recuperer la cellule courante d'une feuille non active ?

LG

4 réponses

Avatar
anonymousA
Bonjour,

utiliser une variable de type Public à mettre dans un module standard

ex si toto est la variable publique

Public toto as range

à mettre dans le module de feuille qu'on le quittera

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Set toto = Target

End Sub


à mettre dans le module de feuille qu'on activera

Private Sub Worksheet_Activate()

Range(toto.Address).Select

End Sub

A+
Avatar
anonymousA
si tu le veux sur l'ensemble du classeur

A mettre dans le module Thisworkbook au lieu des modules de feuilles

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Range(toto.Address).Select

End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal
Target As Range)

Set toto = Target

End Sub

A+


Bonjour,

utiliser une variable de type Public à mettre dans un module standard

ex si toto est la variable publique

Public toto as range

à mettre dans le module de feuille qu'on le quittera

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Set toto = Target

End Sub


à mettre dans le module de feuille qu'on activera

Private Sub Worksheet_Activate()

Range(toto.Address).Select

End Sub

A+



Avatar
l.gris
Merci de ta réponse

J'avais également pensé à cette solution mais j'espérais ne pas avoir à
l'utiliser.
Devoir enregistrer chacun de mes mouvements afin de pouvoir en récuperer le
dernier je trouve ca un peu lourd.

Cette methode est une solution à mon problème particulier mais elle ne
repond pas à la question un peu plus globale que je me posais :
Comment recuperer la cellule active du feuille non active ?

Merci encore



Bonjour,

utiliser une variable de type Public à mettre dans un module standard

ex si toto est la variable publique

Public toto as range

à mettre dans le module de feuille qu'on le quittera

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Set toto = Target

End Sub


à mettre dans le module de feuille qu'on activera

Private Sub Worksheet_Activate()

Range(toto.Address).Select

End Sub

A+




Avatar
l.gris
En relisant ma réponse la solution m'est apparue (comme le petit jesus LOL)

La fonction suivante permet de renvoyer la cellule ou la plage courante
d'une autre feuille. Avec l'objet Selection on stocke le nom de la feuille
courante puis tout en desactivant la gestion des evenements on fait un aller
retour dans la feuille desirée pour en recuperer la plage active.

Function GetSheetSelection(ByVal Sh As Worksheet) As Range
Set shtCurSheet = Selection.Parent
Application.EnableEvents = False
Sh.Activate
Set GetSheetSelection = Selection
shtCurSheet.Activate
Application.EnableEvents = True
End Function

En ce qui concerne mon cas particulier
Puisque dans l'evenement SheetDeactivate l'objet Selection se rapporte à la
feuille de destination je peux donc utiliser la fonction précedente de la
facon suivante.

Dim rngPrevSelection As Range
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Set rngPrevSelection = GetSheetSelection(Sh)
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Sh.range(rngPrevSelection.address).Select
End Sub

Ce qui me permet d'être toujours sur la meme cellule quand je passe d'une
feuille à l'autre


@+
LG


Merci de ta réponse

J'avais également pensé à cette solution mais j'espérais ne pas avoir à
l'utiliser.
Devoir enregistrer chacun de mes mouvements afin de pouvoir en récuperer le
dernier je trouve ca un peu lourd.

Cette methode est une solution à mon problème particulier mais elle ne
repond pas à la question un peu plus globale que je me posais :
Comment recuperer la cellule active du feuille non active ?

Merci encore



Bonjour,

utiliser une variable de type Public à mettre dans un module standard

ex si toto est la variable publique

Public toto as range

à mettre dans le module de feuille qu'on le quittera

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Set toto = Target

End Sub


à mettre dans le module de feuille qu'on activera

Private Sub Worksheet_Activate()

Range(toto.Address).Select

End Sub

A+