Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sur quelle feuille travail le code Private Sub Worksheet_Deactivate()

5 réponses
Avatar
Alain79
Bonjour - En introduisant le code suivant dans chaque feuille d'un classeur

Private Sub Worksheet_Deactivate()
msgbox activesheet.name
end sub

Je m'attendais à voir affichée le nom de la feuille quittée et non pas celui
de la feuille activée!!!

Autrement dit, savez vous comment faire pour récupérer le nom de la feuille
quittée? et lui faire subir un traitement avant de passer à la suivante...

Merci à vous
Alain79

5 réponses

Avatar
MichDenis
Copy ceci dans le ThisWorkbook de ton classeur.
Cela devrait être suffisant :

'---------------------------
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

MsgBox Sh.Name

End Sub
'---------------------------



"Alain79" a écrit dans le message de news:
em67in$b0l$
Bonjour - En introduisant le code suivant dans chaque feuille d'un classeur

Private Sub Worksheet_Deactivate()
msgbox activesheet.name
end sub

Je m'attendais à voir affichée le nom de la feuille quittée et non pas celui
de la feuille activée!!!

Autrement dit, savez vous comment faire pour récupérer le nom de la feuille
quittée? et lui faire subir un traitement avant de passer à la suivante...

Merci à vous
Alain79
Avatar
Alain79
Bien vu mais alors comment appeler à partir de cette routine située dans
l'objet "Classeur" la routine déjà disponible dans la feuille en question?
Désolé pour ces questions un peu basiques mais jusqu'à présent je
travaillais essentiellement à partir d'un Addin, le passage au code dans les
objet d'un classeur me déroute un peu...
Alain79

"MichDenis" wrote in message
news:%239sQx$
Copy ceci dans le ThisWorkbook de ton classeur.
Cela devrait être suffisant :

'---------------------------
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

MsgBox Sh.Name

End Sub
'---------------------------



"Alain79" a écrit dans le message de news:
em67in$b0l$
Bonjour - En introduisant le code suivant dans chaque feuille d'un
classeur


Private Sub Worksheet_Deactivate()
msgbox activesheet.name
end sub

Je m'attendais à voir affichée le nom de la feuille quittée et non pas
celui

de la feuille activée!!!

Autrement dit, savez vous comment faire pour récupérer le nom de la
feuille

quittée? et lui faire subir un traitement avant de passer à la suivante...

Merci à vous
Alain79





Avatar
lSteph
Bonjour,

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'ce code aura lieu après
Dim départ As String
Dim arrivée As String

départ = Sh.Name
arrivée = ActiveSheet.Name

'Si on voulait que le traitement ait lieu avant
'avoir quitté la feuille on peut contourner en
'désactivant les évènements et en revenant dessus
'avant de repasser à l'autre et de réactiver les
'événnements
'mais on peut simplement aussi en y faisant référence
Application.EnableEvents = False
Sheets(départ).Activate
MsgBox "Ceci est la feuille que vous alliez quitter"
Sheets(arrivée).Activate
MsgBox "Ceci est la feuille que vous avez activée"
Application.EnableEvents = True
End Sub

'Cdlt.

'lSteph


Bonjour - En introduisant le code suivant dans chaque feuille d'un classe ur

Private Sub Worksheet_Deactivate()
msgbox activesheet.name
end sub

Je m'attendais à voir affichée le nom de la feuille quittée et non pas celui
de la feuille activée!!!

Autrement dit, savez vous comment faire pour récupérer le nom de la f euille
quittée? et lui faire subir un traitement avant de passer à la suivan te...

Merci à vous
Alain79


Avatar
lSteph
..
Pour répondre à ta seconde question, il faut touty mettre dans le
ThisWorkbook,
Si tant est que chaque feuille ait eu en outre sa propre routine , tu
peux gèrer cela
avec un select case .

Cdlt.

LSteph



Bonjour,

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'ce code aura lieu après
Dim départ As String
Dim arrivée As String

départ = Sh.Name
arrivée = ActiveSheet.Name

'Si on voulait que le traitement ait lieu avant
'avoir quitté la feuille on peut contourner en
'désactivant les évènements et en revenant dessus
'avant de repasser à l'autre et de réactiver les
'événnements
'mais on peut simplement aussi en y faisant référence
Application.EnableEvents = False
Sheets(départ).Activate
MsgBox "Ceci est la feuille que vous alliez quitter"
Sheets(arrivée).Activate
MsgBox "Ceci est la feuille que vous avez activée"
Application.EnableEvents = True
End Sub

'Cdlt.

'lSteph


Bonjour - En introduisant le code suivant dans chaque feuille d'un clas seur

Private Sub Worksheet_Deactivate()
msgbox activesheet.name
end sub

Je m'attendais à voir affichée le nom de la feuille quittée et no n pas celui
de la feuille activée!!!

Autrement dit, savez vous comment faire pour récupérer le nom de la feuille
quittée? et lui faire subir un traitement avant de passer à la suiv ante...

Merci à vous
Alain79




Avatar
MichDenis
Si à partir de la procédure proposée tu désirais appeler
une procédure à l'intérieur d'un module feuille, tu as 2
possibilités :

A ) Dans la procédure du module feuille en question, tu enlèves
le mot "private" dans la ligne de déclaration de la procédure :
Exemple :
Tu remplaces
Private Sub Worksheet_Deactivate()
Par
Sub Worksheet_Deactivate()

Dans le Thisworkbook, tu aurais :
'-----------------
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Sheets(Sh.Name).Worksheet_Deactivate
End Sub
'-----------------

B ) Tu peux aussi utiliser cette ligne de code et laisser intacte
la ligne de code du module feuille
'-------------------------------
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Application.Run Sh.Parent.Name & "!" & _
Sh.CodeName & "." & "Worksheet_Deactivate"
End Sub
'-------------------------------

P.S. La procédure "Worksheet_Deactivate" doit exister
sinon la procédure se plante...





"Alain79" a écrit dans le message de news:
em697p$bsa$
Bien vu mais alors comment appeler à partir de cette routine située dans
l'objet "Classeur" la routine déjà disponible dans la feuille en question?
Désolé pour ces questions un peu basiques mais jusqu'à présent je
travaillais essentiellement à partir d'un Addin, le passage au code dans les
objet d'un classeur me déroute un peu...
Alain79

"MichDenis" wrote in message
news:%239sQx$
Copy ceci dans le ThisWorkbook de ton classeur.
Cela devrait être suffisant :

'---------------------------
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

MsgBox Sh.Name

End Sub
'---------------------------



"Alain79" a écrit dans le message de news:
em67in$b0l$
Bonjour - En introduisant le code suivant dans chaque feuille d'un
classeur


Private Sub Worksheet_Deactivate()
msgbox activesheet.name
end sub

Je m'attendais à voir affichée le nom de la feuille quittée et non pas
celui

de la feuille activée!!!

Autrement dit, savez vous comment faire pour récupérer le nom de la
feuille

quittée? et lui faire subir un traitement avant de passer à la suivante...

Merci à vous
Alain79