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 ?
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+
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+
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)
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+
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+
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)
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)