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

Private Sub en passant d'un classseur à un autre

10 réponses
Avatar
JPMonnier
Bonjour,
Existe t'il une commande qui puisse lancer une procédure lorsque je passe
d'un classeur à un autre par l'intermédiaire d'un menu personnalisé
Du style Private Sub Workbooks_Deactivate()
ou
Private Sub WindowDeactivate(ByVal Wb As Excel.workbook, ByVal Wn As
Excel.Window)
et comment lancer l'éventuelle Private Sub avant le changement de classeur ?
Merci d'avance
--
Cordialement
jpmonnier-nospam@neuf.fr

10 réponses

Avatar
michdenis
Pas sûr d'avoir compris ce que tu désires ..

À chaque fois qu'un classeur passe la main à un autre classeur
lorsqu'ils sont ouverts dans LA MÊME INSTANCE D'EXCEL, il
y a cet événement qui se produite dans le classeur qui perd la
main :
'----------------------------
Private Sub Workbook_Deactivate()

End Sub
'----------------------------
Cet événement s'exécute avant que le nouveau classeur sélectionné
devienne le classeur actif.

Cet événement est disponible dans le ThisWorkbook de chaque classeur.



"JPMonnier" a écrit dans le message de groupe de discussion :

Bonjour,
Existe t'il une commande qui puisse lancer une procédure lorsque je passe
d'un classeur à un autre par l'intermédiaire d'un menu personnalisé
Du style Private Sub Workbooks_Deactivate()
ou
Private Sub WindowDeactivate(ByVal Wb As Excel.workbook, ByVal Wn As
Excel.Window)
et comment lancer l'éventuelle Private Sub avant le changement de classeur ?
Merci d'avance
--
Cordialement

Avatar
JPMonnier
Bonjour micheldenis
J'avais fait ce que tu dis, mais l'avais placé dans la feuille, je l'ai donc
placé dans ThisWorkbook
Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA"
End Sub

Rien ne s'exécute
Lorsque je mets un point d'arrêt sur la private sub, elle ne passe pas
dessus !!
merci encore pour ton aide
--
Cordialement

"michdenis" a écrit dans le message de
news:
Pas sûr d'avoir compris ce que tu désires ..

À chaque fois qu'un classeur passe la main à un autre classeur
lorsqu'ils sont ouverts dans LA MÊME INSTANCE D'EXCEL, il
y a cet événement qui se produite dans le classeur qui perd la
main :
'----------------------------
Private Sub Workbook_Deactivate()

End Sub
'----------------------------
Cet événement s'exécute avant que le nouveau classeur sélectionné
devienne le classeur actif.

Cet événement est disponible dans le ThisWorkbook de chaque classeur.



"JPMonnier" a écrit dans le message de groupe
de discussion :

Bonjour,
Existe t'il une commande qui puisse lancer une procédure lorsque je passe
d'un classeur à un autre par l'intermédiaire d'un menu personnalisé
Du style Private Sub Workbooks_Deactivate()
ou
Private Sub WindowDeactivate(ByVal Wb As Excel.workbook, ByVal Wn As
Excel.Window)
et comment lancer l'éventuelle Private Sub avant le changement de classeur
?
Merci d'avance
--
Cordialement




Avatar
michdenis
| Existe t'il une commande qui puisse lancer une procédure lorsque je passe
| d'un classeur à un autre par l'intermédiaire d'un menu personnalisé

Elle fait quoi ta commande ?

Est-ce que tes procédures événementielles sont activées?
Exécute la ligne de code suivante : application.EnableEvents = True



"JPMonnier" a écrit dans le message de groupe de discussion :

Bonjour micheldenis
J'avais fait ce que tu dis, mais l'avais placé dans la feuille, je l'ai donc
placé dans ThisWorkbook
Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA"
End Sub

Rien ne s'exécute
Lorsque je mets un point d'arrêt sur la private sub, elle ne passe pas
dessus !!
merci encore pour ton aide
--
Cordialement

"michdenis" a écrit dans le message de
news:
Pas sûr d'avoir compris ce que tu désires ..

À chaque fois qu'un classeur passe la main à un autre classeur
lorsqu'ils sont ouverts dans LA MÊME INSTANCE D'EXCEL, il
y a cet événement qui se produite dans le classeur qui perd la
main :
'----------------------------
Private Sub Workbook_Deactivate()

End Sub
'----------------------------
Cet événement s'exécute avant que le nouveau classeur sélectionné
devienne le classeur actif.

Cet événement est disponible dans le ThisWorkbook de chaque classeur.



"JPMonnier" a écrit dans le message de groupe
de discussion :

Bonjour,
Existe t'il une commande qui puisse lancer une procédure lorsque je passe
d'un classeur à un autre par l'intermédiaire d'un menu personnalisé
Du style Private Sub Workbooks_Deactivate()
ou
Private Sub WindowDeactivate(ByVal Wb As Excel.workbook, ByVal Wn As
Excel.Window)
et comment lancer l'éventuelle Private Sub avant le changement de classeur
?
Merci d'avance
--
Cordialement




Avatar
JPMonnier
Mes procédures événementielles sont activées
j'ai simulé une private sub dans une feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "a"
End Sub
Cela fonctionne !

Ma procédure devrait trier la feuille active que je quitte au changement de
classeur
elle ne passe pas dessus à l'activation d'un autre classeur

--
Cordialement


"michdenis" a écrit dans le message de
news:
| Existe t'il une commande qui puisse lancer une procédure lorsque je passe
| d'un classeur à un autre par l'intermédiaire d'un menu personnalisé

Elle fait quoi ta commande ?

Est-ce que tes procédures événementielles sont activées?
Exécute la ligne de code suivante : application.EnableEvents = True



"JPMonnier" a écrit dans le message de groupe
de discussion :

Bonjour micheldenis
J'avais fait ce que tu dis, mais l'avais placé dans la feuille, je l'ai
donc
placé dans ThisWorkbook
Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA"
End Sub

Rien ne s'exécute
Lorsque je mets un point d'arrêt sur la private sub, elle ne passe pas
dessus !!
merci encore pour ton aide
--
Cordialement

"michdenis" a écrit dans le message de
news:
Pas sûr d'avoir compris ce que tu désires ..

À chaque fois qu'un classeur passe la main à un autre classeur
lorsqu'ils sont ouverts dans LA MÊME INSTANCE D'EXCEL, il
y a cet événement qui se produite dans le classeur qui perd la
main :
'----------------------------
Private Sub Workbook_Deactivate()

End Sub
'----------------------------
Cet événement s'exécute avant que le nouveau classeur sélectionné
devienne le classeur actif.

Cet événement est disponible dans le ThisWorkbook de chaque classeur.



"JPMonnier" a écrit dans le message de groupe
de discussion :

Bonjour,
Existe t'il une commande qui puisse lancer une procédure lorsque je passe
d'un classeur à un autre par l'intermédiaire d'un menu personnalisé
Du style Private Sub Workbooks_Deactivate()
ou
Private Sub WindowDeactivate(ByVal Wb As Excel.workbook, ByVal Wn As
Excel.Window)
et comment lancer l'éventuelle Private Sub avant le changement de
classeur
?
Merci d'avance
--
Cordialement







Avatar
michdenis
Je t'ai demandé à quoi servait ta commande?

Pour que l'événement "desactivate" se produise, il faut
qu'un autre classeur devienne le classeur actif à l'écran et
ce, dans la même instance excel.


"JPMonnier" a écrit dans le message de groupe de discussion :

Mes procédures événementielles sont activées
j'ai simulé une private sub dans une feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "a"
End Sub
Cela fonctionne !

Ma procédure devrait trier la feuille active que je quitte au changement de
classeur
elle ne passe pas dessus à l'activation d'un autre classeur

--
Cordialement


"michdenis" a écrit dans le message de
news:
| Existe t'il une commande qui puisse lancer une procédure lorsque je passe
| d'un classeur à un autre par l'intermédiaire d'un menu personnalisé

Elle fait quoi ta commande ?

Est-ce que tes procédures événementielles sont activées?
Exécute la ligne de code suivante : application.EnableEvents = True



"JPMonnier" a écrit dans le message de groupe
de discussion :

Bonjour micheldenis
J'avais fait ce que tu dis, mais l'avais placé dans la feuille, je l'ai
donc
placé dans ThisWorkbook
Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA"
End Sub

Rien ne s'exécute
Lorsque je mets un point d'arrêt sur la private sub, elle ne passe pas
dessus !!
merci encore pour ton aide
--
Cordialement

"michdenis" a écrit dans le message de
news:
Pas sûr d'avoir compris ce que tu désires ..

À chaque fois qu'un classeur passe la main à un autre classeur
lorsqu'ils sont ouverts dans LA MÊME INSTANCE D'EXCEL, il
y a cet événement qui se produite dans le classeur qui perd la
main :
'----------------------------
Private Sub Workbook_Deactivate()

End Sub
'----------------------------
Cet événement s'exécute avant que le nouveau classeur sélectionné
devienne le classeur actif.

Cet événement est disponible dans le ThisWorkbook de chaque classeur.



"JPMonnier" a écrit dans le message de groupe
de discussion :

Bonjour,
Existe t'il une commande qui puisse lancer une procédure lorsque je passe
d'un classeur à un autre par l'intermédiaire d'un menu personnalisé
Du style Private Sub Workbooks_Deactivate()
ou
Private Sub WindowDeactivate(ByVal Wb As Excel.workbook, ByVal Wn As
Excel.Window)
et comment lancer l'éventuelle Private Sub avant le changement de
classeur
?
Merci d'avance
--
Cordialement







Avatar
JPMonnier
Oui, je change de classeur actif
J'ai 2 classeurs dans la même instance Excel
Engagements.xls et FcdeH.xls
J'ai Engagements.xls actif
je passe sur FcdeH.xls qui devient actif
ceci répond bien à la Private Sub Désactivate
La commande que je veux déclencher via la Private Sub Workbook_Desactivate()
est un tri sur Engagements.xls (Actif) en passant sur FcdeH.xls (Actif)


"michdenis" a écrit dans le message de
news:
Je t'ai demandé à quoi servait ta commande?

Pour que l'événement "desactivate" se produise, il faut
qu'un autre classeur devienne le classeur actif à l'écran et
ce, dans la même instance excel.


"JPMonnier" a écrit dans le message de groupe
de discussion :

Mes procédures événementielles sont activées
j'ai simulé une private sub dans une feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "a"
End Sub
Cela fonctionne !

Ma procédure devrait trier la feuille active que je quitte au changement
de
classeur
elle ne passe pas dessus à l'activation d'un autre classeur

--
Cordialement


"michdenis" a écrit dans le message de
news:
| Existe t'il une commande qui puisse lancer une procédure lorsque je
passe
| d'un classeur à un autre par l'intermédiaire d'un menu personnalisé

Elle fait quoi ta commande ?

Est-ce que tes procédures événementielles sont activées?
Exécute la ligne de code suivante : application.EnableEvents = True



"JPMonnier" a écrit dans le message de groupe
de discussion :

Bonjour micheldenis
J'avais fait ce que tu dis, mais l'avais placé dans la feuille, je l'ai
donc
placé dans ThisWorkbook
Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA"
End Sub

Rien ne s'exécute
Lorsque je mets un point d'arrêt sur la private sub, elle ne passe pas
dessus !!
merci encore pour ton aide
--
Cordialement

"michdenis" a écrit dans le message de
news:
Pas sûr d'avoir compris ce que tu désires ..

À chaque fois qu'un classeur passe la main à un autre classeur
lorsqu'ils sont ouverts dans LA MÊME INSTANCE D'EXCEL, il
y a cet événement qui se produite dans le classeur qui perd la
main :
'----------------------------
Private Sub Workbook_Deactivate()

End Sub
'----------------------------
Cet événement s'exécute avant que le nouveau classeur sélectionné
devienne le classeur actif.

Cet événement est disponible dans le ThisWorkbook de chaque classeur.



"JPMonnier" a écrit dans le message de
groupe
de discussion :

Bonjour,
Existe t'il une commande qui puisse lancer une procédure lorsque je
passe
d'un classeur à un autre par l'intermédiaire d'un menu personnalisé
Du style Private Sub Workbooks_Deactivate()
ou
Private Sub WindowDeactivate(ByVal Wb As Excel.workbook, ByVal Wn As
Excel.Window)
et comment lancer l'éventuelle Private Sub avant le changement de
classeur
?
Merci d'avance
--
Cordialement










Avatar
michdenis
Peux-tu publier la procédure que tu déclenches
lorsque tu appelles la commande ?

Difficile lorsque l'on ne connaît pas la séquence
exacte des actions posées que ce soit pas l'usager
ou une procédure qu'il déclenche !



"JPMonnier" a écrit dans le message de groupe de discussion :
#
Oui, je change de classeur actif
J'ai 2 classeurs dans la même instance Excel
Engagements.xls et FcdeH.xls
J'ai Engagements.xls actif
je passe sur FcdeH.xls qui devient actif
ceci répond bien à la Private Sub Désactivate
La commande que je veux déclencher via la Private Sub Workbook_Desactivate()
est un tri sur Engagements.xls (Actif) en passant sur FcdeH.xls (Actif)


"michdenis" a écrit dans le message de
news:
Je t'ai demandé à quoi servait ta commande?

Pour que l'événement "desactivate" se produise, il faut
qu'un autre classeur devienne le classeur actif à l'écran et
ce, dans la même instance excel.


"JPMonnier" a écrit dans le message de groupe
de discussion :

Mes procédures événementielles sont activées
j'ai simulé une private sub dans une feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "a"
End Sub
Cela fonctionne !

Ma procédure devrait trier la feuille active que je quitte au changement
de
classeur
elle ne passe pas dessus à l'activation d'un autre classeur

--
Cordialement


"michdenis" a écrit dans le message de
news:
| Existe t'il une commande qui puisse lancer une procédure lorsque je
passe
| d'un classeur à un autre par l'intermédiaire d'un menu personnalisé

Elle fait quoi ta commande ?

Est-ce que tes procédures événementielles sont activées?
Exécute la ligne de code suivante : application.EnableEvents = True



"JPMonnier" a écrit dans le message de groupe
de discussion :

Bonjour micheldenis
J'avais fait ce que tu dis, mais l'avais placé dans la feuille, je l'ai
donc
placé dans ThisWorkbook
Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA"
End Sub

Rien ne s'exécute
Lorsque je mets un point d'arrêt sur la private sub, elle ne passe pas
dessus !!
merci encore pour ton aide
--
Cordialement

"michdenis" a écrit dans le message de
news:
Pas sûr d'avoir compris ce que tu désires ..

À chaque fois qu'un classeur passe la main à un autre classeur
lorsqu'ils sont ouverts dans LA MÊME INSTANCE D'EXCEL, il
y a cet événement qui se produite dans le classeur qui perd la
main :
'----------------------------
Private Sub Workbook_Deactivate()

End Sub
'----------------------------
Cet événement s'exécute avant que le nouveau classeur sélectionné
devienne le classeur actif.

Cet événement est disponible dans le ThisWorkbook de chaque classeur.



"JPMonnier" a écrit dans le message de
groupe
de discussion :

Bonjour,
Existe t'il une commande qui puisse lancer une procédure lorsque je
passe
d'un classeur à un autre par l'intermédiaire d'un menu personnalisé
Du style Private Sub Workbooks_Deactivate()
ou
Private Sub WindowDeactivate(ByVal Wb As Excel.workbook, ByVal Wn As
Excel.Window)
et comment lancer l'éventuelle Private Sub avant le changement de
classeur
?
Merci d'avance
--
Cordialement










Avatar
JPMonnier
Je suis dans fichier "Engagements.xls"
j'active le fichier "fcde.xls"

Procédure événementielle se trouvant dans "engagements.xls", ThisWorkbook

Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA" 'appel procédure du fichier fcde.xls
End Sub

Procédure du fichier fcde.xls
Sub TRIA()
Workbooks("Engagements.xls").Sheets("engagt").Range("A3:t999").Select
Selection.SORT Key1:=Range("B3"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
End Sub
Ce qui me surprend le plus est que le changement de classeur actif ne passe
pas par

Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA" 'appel procédure du fichier fcde.xls
End Sub
Etant certain que application.EnableEvents = True

********************************
Après avoir scruté de plus près, sous ma version Excel,
la Private Sub Workbook_Deactivate()
n'existe pas, j'ai donc remplacé par
Private Sub Workbook_WindowDesactivate(ByVal Wn As Window)
Application.Run "'fcde.xls'!TRIA"
Application.EnableEvents = False
workbooks("fcde.xls").Activate
Application.EnableEvents = True
End Sub
Il semble que cela fonctionne en ajoutant
Application.EnableEvents = False
workbooks("fcde.xls").Activate
Application.EnableEvents = True
afin de ne pas tourner en rond
peut être ais-je négligé de rappeler ma version Excel
Si tu as une version d'Excel différente tu as peut être l'événement Private
Sub Workbook_Desactivate()

Dans ce cas je te prie de m'excuser d'avoir été imprécis et d'avoir abusé de
ton temps
Merci encore "micheldenis"
--
Très amicalement


"michdenis" a écrit dans le message de
news:
Peux-tu publier la procédure que tu déclenches
lorsque tu appelles la commande ?

Difficile lorsque l'on ne connaît pas la séquence
exacte des actions posées que ce soit pas l'usager
ou une procédure qu'il déclenche !



"JPMonnier" a écrit dans le message de groupe
de discussion :
#
Oui, je change de classeur actif
J'ai 2 classeurs dans la même instance Excel
Engagements.xls et FcdeH.xls
J'ai Engagements.xls actif
je passe sur FcdeH.xls qui devient actif
ceci répond bien à la Private Sub Désactivate
La commande que je veux déclencher via la Private Sub
Workbook_Desactivate()
est un tri sur Engagements.xls (Actif) en passant sur FcdeH.xls (Actif)


"michdenis" a écrit dans le message de
news:
Je t'ai demandé à quoi servait ta commande?

Pour que l'événement "desactivate" se produise, il faut
qu'un autre classeur devienne le classeur actif à l'écran et
ce, dans la même instance excel.


"JPMonnier" a écrit dans le message de groupe
de discussion :

Mes procédures événementielles sont activées
j'ai simulé une private sub dans une feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "a"
End Sub
Cela fonctionne !

Ma procédure devrait trier la feuille active que je quitte au changement
de
classeur
elle ne passe pas dessus à l'activation d'un autre classeur

--
Cordialement


"michdenis" a écrit dans le message de
news:
| Existe t'il une commande qui puisse lancer une procédure lorsque je
passe
| d'un classeur à un autre par l'intermédiaire d'un menu personnalisé

Elle fait quoi ta commande ?

Est-ce que tes procédures événementielles sont activées?
Exécute la ligne de code suivante : application.EnableEvents = True



"JPMonnier" a écrit dans le message de
groupe
de discussion :

Bonjour micheldenis
J'avais fait ce que tu dis, mais l'avais placé dans la feuille, je l'ai
donc
placé dans ThisWorkbook
Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA"
End Sub

Rien ne s'exécute
Lorsque je mets un point d'arrêt sur la private sub, elle ne passe pas
dessus !!
merci encore pour ton aide
--
Cordialement

"michdenis" a écrit dans le message de
news:
Pas sûr d'avoir compris ce que tu désires ..

À chaque fois qu'un classeur passe la main à un autre classeur
lorsqu'ils sont ouverts dans LA MÊME INSTANCE D'EXCEL, il
y a cet événement qui se produite dans le classeur qui perd la
main :
'----------------------------
Private Sub Workbook_Deactivate()

End Sub
'----------------------------
Cet événement s'exécute avant que le nouveau classeur sélectionné
devienne le classeur actif.

Cet événement est disponible dans le ThisWorkbook de chaque classeur.



"JPMonnier" a écrit dans le message de
groupe
de discussion :

Bonjour,
Existe t'il une commande qui puisse lancer une procédure lorsque je
passe
d'un classeur à un autre par l'intermédiaire d'un menu personnalisé
Du style Private Sub Workbooks_Deactivate()
ou
Private Sub WindowDeactivate(ByVal Wb As Excel.workbook, ByVal Wn As
Excel.Window)
et comment lancer l'éventuelle Private Sub avant le changement de
classeur
?
Merci d'avance
--
Cordialement













Avatar
michdenis
A )
D'abord cet événement "Private Sub Workbook_Deactivate()"
situé dans le ThisWorkbook du classeur existe dans tous les
classeurs de la version Excel 1977 à 2007 inclusivement.

B ) Si tu veux appliquer une procédure de "filtre" lorsqu'un
classeur devient le classeur actif, pourquoi ne pas utiliser
l'événement "Private Sub Workbook_Activate() dans le
ThisWorkbook du classeur qui devient actif pour appeler
ta macro : Sub TRIA()

Dans l'explication qui suit, lorsque je parle du nom de la feuille
je ne fais pas référence à l'onglet de la feuille mais au nom
de l'objet de la classe Worksheet que tu peux lire dans la
fenêtre de l'édition de code

C ) La syntaxe de ta commande pour appeler une macro située
dans un autre classeur ouvert est celle-ci :
1 -Si ta macro est située dans un module standard :
NomDuClasseur!NomDeLaMacro:

2- Si ta macro est située dans un module feuille:
NomDuClasseur!NomDeLaFeuille.NomDeLaMacro

3- Si le nom du classeur contient des espaces et
ta Macro dans un module standard
Dim LaMacro As String
LaMacro = "'" & Nom Du Classeur.xls & "'!NomDeLaMacro"
Application.Run LaMacro

4- Si le nom du classeur contient des espaces et
ta Macro dans un module Feuille
Dim LaMacro As String
LaMacro = "'" & Nom Du Classeur.xls & "'!NomDeLaFeuille.NomDeLaMacro"
Application.Run LaMacro

Tu as suffisamment d'info. maintenant pour solutionner ton problème !



"JPMonnier" a écrit dans le message de groupe de discussion :
#
Je suis dans fichier "Engagements.xls"
j'active le fichier "fcde.xls"

Procédure événementielle se trouvant dans "engagements.xls", ThisWorkbook

Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA" 'appel procédure du fichier fcde.xls
End Sub

Procédure du fichier fcde.xls
Sub TRIA()
Workbooks("Engagements.xls").Sheets("engagt").Range("A3:t999").Select
Selection.SORT Key1:=Range("B3"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
End Sub
Ce qui me surprend le plus est que le changement de classeur actif ne passe
pas par

Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA" 'appel procédure du fichier fcde.xls
End Sub
Etant certain que application.EnableEvents = True

********************************
Après avoir scruté de plus près, sous ma version Excel,
la Private Sub Workbook_Deactivate()
n'existe pas, j'ai donc remplacé par
Private Sub Workbook_WindowDesactivate(ByVal Wn As Window)
Application.Run "'fcde.xls'!TRIA"
Application.EnableEvents = False
workbooks("fcde.xls").Activate
Application.EnableEvents = True
End Sub
Il semble que cela fonctionne en ajoutant
Application.EnableEvents = False
workbooks("fcde.xls").Activate
Application.EnableEvents = True
afin de ne pas tourner en rond
peut être ais-je négligé de rappeler ma version Excel
Si tu as une version d'Excel différente tu as peut être l'événement Private
Sub Workbook_Desactivate()

Dans ce cas je te prie de m'excuser d'avoir été imprécis et d'avoir abusé de
ton temps
Merci encore "micheldenis"
--
Très amicalement


"michdenis" a écrit dans le message de
news:
Peux-tu publier la procédure que tu déclenches
lorsque tu appelles la commande ?

Difficile lorsque l'on ne connaît pas la séquence
exacte des actions posées que ce soit pas l'usager
ou une procédure qu'il déclenche !



"JPMonnier" a écrit dans le message de groupe
de discussion :
#
Oui, je change de classeur actif
J'ai 2 classeurs dans la même instance Excel
Engagements.xls et FcdeH.xls
J'ai Engagements.xls actif
je passe sur FcdeH.xls qui devient actif
ceci répond bien à la Private Sub Désactivate
La commande que je veux déclencher via la Private Sub
Workbook_Desactivate()
est un tri sur Engagements.xls (Actif) en passant sur FcdeH.xls (Actif)


"michdenis" a écrit dans le message de
news:
Je t'ai demandé à quoi servait ta commande?

Pour que l'événement "desactivate" se produise, il faut
qu'un autre classeur devienne le classeur actif à l'écran et
ce, dans la même instance excel.


"JPMonnier" a écrit dans le message de groupe
de discussion :

Mes procédures événementielles sont activées
j'ai simulé une private sub dans une feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "a"
End Sub
Cela fonctionne !

Ma procédure devrait trier la feuille active que je quitte au changement
de
classeur
elle ne passe pas dessus à l'activation d'un autre classeur

--
Cordialement


"michdenis" a écrit dans le message de
news:
| Existe t'il une commande qui puisse lancer une procédure lorsque je
passe
| d'un classeur à un autre par l'intermédiaire d'un menu personnalisé

Elle fait quoi ta commande ?

Est-ce que tes procédures événementielles sont activées?
Exécute la ligne de code suivante : application.EnableEvents = True



"JPMonnier" a écrit dans le message de
groupe
de discussion :

Bonjour micheldenis
J'avais fait ce que tu dis, mais l'avais placé dans la feuille, je l'ai
donc
placé dans ThisWorkbook
Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA"
End Sub

Rien ne s'exécute
Lorsque je mets un point d'arrêt sur la private sub, elle ne passe pas
dessus !!
merci encore pour ton aide
--
Cordialement

"michdenis" a écrit dans le message de
news:
Pas sûr d'avoir compris ce que tu désires ..

À chaque fois qu'un classeur passe la main à un autre classeur
lorsqu'ils sont ouverts dans LA MÊME INSTANCE D'EXCEL, il
y a cet événement qui se produite dans le classeur qui perd la
main :
'----------------------------
Private Sub Workbook_Deactivate()

End Sub
'----------------------------
Cet événement s'exécute avant que le nouveau classeur sélectionné
devienne le classeur actif.

Cet événement est disponible dans le ThisWorkbook de chaque classeur.



"JPMonnier" a écrit dans le message de
groupe
de discussion :

Bonjour,
Existe t'il une commande qui puisse lancer une procédure lorsque je
passe
d'un classeur à un autre par l'intermédiaire d'un menu personnalisé
Du style Private Sub Workbooks_Deactivate()
ou
Private Sub WindowDeactivate(ByVal Wb As Excel.workbook, ByVal Wn As
Excel.Window)
et comment lancer l'éventuelle Private Sub avant le changement de
classeur
?
Merci d'avance
--
Cordialement













Avatar
JPMonnier
Bonjour micheldenis
merci pour toutes tes explications
Mon problème est solutionné comme indiqué dans ma réponse précédente

J'ai bien trouvé la fonction dan la bibliothèque d'objet
Excel/Application/WorkbookDeactivate
En revanche elle n'apparait pas dans Thisworkbook de mes classeurs ouverts,
mais se trouve dans le classeur
VBAProject(FUNCRES.XLA) ThisWorkbook !!
Quoi qu'il en soit elle ne fonctionne pas et n'est pas reconnue si je
l'écris manuellement dans Thisworkbook de mes classeurs

la Private Sub Workbook_WindowDesactivate(ByVal Wn As Window)
fonctionne et me convient

Concernant le tri :
j'accède à mon classeur avec un US pour un choix de tri
je dois trier ce classeur dans un tri bien précis avant de choisir un autre
classeur
Quand à l'utilisation de l'événement "Private Sub Workbook_Activate()
Je n'ai pas à trier le dit classeur à chaque fois car ayant plusieurs
classeurs, je ne vois pas l'intérêt de trier toujours le classeur
"Engagements"

Je ne veux pas user plus de ton temps vu que j'ai solutionné différemment;
mais je tenais à donner ces précisions
Mais il me semble que, par ta dernière phrase, que je t'ennuie un peu !!
J'espère me tromper
A bientôt

--
Cordialement







"michdenis" a écrit dans le message de
news:
A )
D'abord cet événement "Private Sub Workbook_Deactivate()"
situé dans le ThisWorkbook du classeur existe dans tous les
classeurs de la version Excel 1977 à 2007 inclusivement.

B ) Si tu veux appliquer une procédure de "filtre" lorsqu'un
classeur devient le classeur actif, pourquoi ne pas utiliser
l'événement "Private Sub Workbook_Activate() dans le
ThisWorkbook du classeur qui devient actif pour appeler
ta macro : Sub TRIA()

Dans l'explication qui suit, lorsque je parle du nom de la feuille
je ne fais pas référence à l'onglet de la feuille mais au nom
de l'objet de la classe Worksheet que tu peux lire dans la
fenêtre de l'édition de code

C ) La syntaxe de ta commande pour appeler une macro située
dans un autre classeur ouvert est celle-ci :
1 -Si ta macro est située dans un module standard :
NomDuClasseur!NomDeLaMacro:

2- Si ta macro est située dans un module feuille:
NomDuClasseur!NomDeLaFeuille.NomDeLaMacro

3- Si le nom du classeur contient des espaces et
ta Macro dans un module standard
Dim LaMacro As String
LaMacro = "'" & Nom Du Classeur.xls & "'!NomDeLaMacro"
Application.Run LaMacro

4- Si le nom du classeur contient des espaces et
ta Macro dans un module Feuille
Dim LaMacro As String
LaMacro = "'" & Nom Du Classeur.xls &
"'!NomDeLaFeuille.NomDeLaMacro"
Application.Run LaMacro

Tu as suffisamment d'info. maintenant pour solutionner ton problème !



"JPMonnier" a écrit dans le message de groupe
de discussion :
#
Je suis dans fichier "Engagements.xls"
j'active le fichier "fcde.xls"

Procédure événementielle se trouvant dans "engagements.xls",
ThisWorkbook

Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA" 'appel procédure du fichier fcde.xls
End Sub

Procédure du fichier fcde.xls
Sub TRIA()
Workbooks("Engagements.xls").Sheets("engagt").Range("A3:t999").Select
Selection.SORT Key1:=Range("B3"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
End Sub
Ce qui me surprend le plus est que le changement de classeur actif ne
passe
pas par

Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA" 'appel procédure du fichier fcde.xls
End Sub
Etant certain que application.EnableEvents = True

********************************
Après avoir scruté de plus près, sous ma version Excel,
la Private Sub Workbook_Deactivate()
n'existe pas, j'ai donc remplacé par
Private Sub Workbook_WindowDesactivate(ByVal Wn As Window)
Application.Run "'fcde.xls'!TRIA"
Application.EnableEvents = False
workbooks("fcde.xls").Activate
Application.EnableEvents = True
End Sub
Il semble que cela fonctionne en ajoutant
Application.EnableEvents = False
workbooks("fcde.xls").Activate
Application.EnableEvents = True
afin de ne pas tourner en rond
peut être ais-je négligé de rappeler ma version Excel
Si tu as une version d'Excel différente tu as peut être l'événement
Private
Sub Workbook_Desactivate()

Dans ce cas je te prie de m'excuser d'avoir été imprécis et d'avoir abusé
de
ton temps
Merci encore "micheldenis"
--
Très amicalement


"michdenis" a écrit dans le message de
news:
Peux-tu publier la procédure que tu déclenches
lorsque tu appelles la commande ?

Difficile lorsque l'on ne connaît pas la séquence
exacte des actions posées que ce soit pas l'usager
ou une procédure qu'il déclenche !



"JPMonnier" a écrit dans le message de groupe
de discussion :
#
Oui, je change de classeur actif
J'ai 2 classeurs dans la même instance Excel
Engagements.xls et FcdeH.xls
J'ai Engagements.xls actif
je passe sur FcdeH.xls qui devient actif
ceci répond bien à la Private Sub Désactivate
La commande que je veux déclencher via la Private Sub
Workbook_Desactivate()
est un tri sur Engagements.xls (Actif) en passant sur FcdeH.xls (Actif)


"michdenis" a écrit dans le message de
news:
Je t'ai demandé à quoi servait ta commande?

Pour que l'événement "desactivate" se produise, il faut
qu'un autre classeur devienne le classeur actif à l'écran et
ce, dans la même instance excel.


"JPMonnier" a écrit dans le message de
groupe
de discussion :

Mes procédures événementielles sont activées
j'ai simulé une private sub dans une feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "a"
End Sub
Cela fonctionne !

Ma procédure devrait trier la feuille active que je quitte au changement
de
classeur
elle ne passe pas dessus à l'activation d'un autre classeur

--
Cordialement


"michdenis" a écrit dans le message de
news:
| Existe t'il une commande qui puisse lancer une procédure lorsque je
passe
| d'un classeur à un autre par l'intermédiaire d'un menu personnalisé

Elle fait quoi ta commande ?

Est-ce que tes procédures événementielles sont activées?
Exécute la ligne de code suivante : application.EnableEvents = True



"JPMonnier" a écrit dans le message de
groupe
de discussion :

Bonjour micheldenis
J'avais fait ce que tu dis, mais l'avais placé dans la feuille, je l'ai
donc
placé dans ThisWorkbook
Private Sub Workbook_Desactivate()
Application.Run "'fcde.xls'!TRIA"
End Sub

Rien ne s'exécute
Lorsque je mets un point d'arrêt sur la private sub, elle ne passe pas
dessus !!
merci encore pour ton aide
--
Cordialement

"michdenis" a écrit dans le message de
news:
Pas sûr d'avoir compris ce que tu désires ..

À chaque fois qu'un classeur passe la main à un autre classeur
lorsqu'ils sont ouverts dans LA MÊME INSTANCE D'EXCEL, il
y a cet événement qui se produite dans le classeur qui perd la
main :
'----------------------------
Private Sub Workbook_Deactivate()

End Sub
'----------------------------
Cet événement s'exécute avant que le nouveau classeur sélectionné
devienne le classeur actif.

Cet événement est disponible dans le ThisWorkbook de chaque classeur.



"JPMonnier" a écrit dans le message de
groupe
de discussion :

Bonjour,
Existe t'il une commande qui puisse lancer une procédure lorsque je
passe
d'un classeur à un autre par l'intermédiaire d'un menu personnalisé
Du style Private Sub Workbooks_Deactivate()
ou
Private Sub WindowDeactivate(ByVal Wb As Excel.workbook, ByVal Wn As
Excel.Window)
et comment lancer l'éventuelle Private Sub avant le changement de
classeur
?
Merci d'avance
--
Cordialement