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

Fermer et relancer un Classeur

7 réponses
Avatar
Papy Jean
Bonjour

Comment faire pour que

Une macro (Sub Macro1) dans le classeur CLA.xlsb
1) appelle le classeur CLB.xlsm
2) à l'ouverture de CLB.xlsm, il y ait lancement automatique de la Macro2
dans CLB.xlsm
3) Macro2 ferme CLA.xlsb et l'ouvre à nouveau
4) Le travail de Macro1 s'arrète.

Notes:
1) est classique
2) je mets dans ThisWorkbook :
Private Sub Workbook_Open()
Call Macro2
End Sub
3) Le problème est que:
Macro2 est bien lancée
mais lorsque CLA.xlsb est clos, Macro2 s'arrète avant d'exécuter la
réouverture.

Merci de votre aide.

Note2: le problème peut sembler bizarre. Voici d'où il vient:
Une application crée un mini classeur pour chaque Devis qu'elle fait
Je viens de la traduire de Excel2003 en Excel2007 en utilisant *.xlsb
Or, dans un cas que j'ai cerné, le fichier créé par Excel 7 est
<mauvais> car sa relecture par un autre classeur part dans les décors.

J'ai constaté qu'une moulinette (CLB.xlsm) qui ferme et rouvre les classeurs
fait disparaître le problème.
Cela marche bien s'il y a un arrêt au milieu de CLB, mais l'utilisateur doit
relancer avec un bouton, ce que je trouve gènant.
D'où mon désir d'automatiser, pour rendre la correction transparente à
l'utilisateur.

Papy Jean

7 réponses

Avatar
michdenis
Voici une façon de procéder ...

Dans un module standard

'Nom du fichier à fermer et à ré-ouvrir
Public Const Fichier = "c:exceltest.xlsm"

'-------------------------------------
Sub Denis()
'Macro de fermeture du fichier sans sauvegarde
Workbooks("test.xlsm").Close False
End Sub
'-------------------------------------

'-------------------------------------
Sub Ouvrir()
'Ouverture du même fichier
Workbooks.Open Fichier
End Sub
'-------------------------------------


'la macro que tu veux exécuter à partir d'un autre fichier
'--------------------------------------
Private Sub MACRO2()

'Tu donnes à excel la commande de ré-ouvrir le fichier
'avec une durée de temps désirée avant de le fermer
Application.OnTime Now + TimeValue("0:00:05"), "Ouvrir"

'Appel de la procédure de fermeture du fichier
Denis
End Sub
'--------------------------------------







"Papy Jean" a écrit dans le message de news:
4912c6b2$0$951$
Bonjour

Comment faire pour que

Une macro (Sub Macro1) dans le classeur CLA.xlsb
1) appelle le classeur CLB.xlsm
2) à l'ouverture de CLB.xlsm, il y ait lancement automatique de la Macro2
dans CLB.xlsm
3) Macro2 ferme CLA.xlsb et l'ouvre à nouveau
4) Le travail de Macro1 s'arrète.

Notes:
1) est classique
2) je mets dans ThisWorkbook :
Private Sub Workbook_Open()
Call Macro2
End Sub
3) Le problème est que:
Macro2 est bien lancée
mais lorsque CLA.xlsb est clos, Macro2 s'arrète avant d'exécuter la
réouverture.

Merci de votre aide.

Note2: le problème peut sembler bizarre. Voici d'où il vient:
Une application crée un mini classeur pour chaque Devis qu'elle fait
Je viens de la traduire de Excel2003 en Excel2007 en utilisant *.xlsb
Or, dans un cas que j'ai cerné, le fichier créé par Excel 7 est
<mauvais> car sa relecture par un autre classeur part dans les décors.

J'ai constaté qu'une moulinette (CLB.xlsm) qui ferme et rouvre les classeurs
fait disparaître le problème.
Cela marche bien s'il y a un arrêt au milieu de CLB, mais l'utilisateur doit
relancer avec un bouton, ce que je trouve gènant.
D'où mon désir d'automatiser, pour rendre la correction transparente à
l'utilisateur.

Papy Jean
Avatar
Papy Jean
Merci Michel Denis d'avoir répondu.

Mais je crains d'avoir mal formulé ma question.
Le problème vient de ce que le classeur qui ouvre et ferme (et donc sa
macro) est appelé par le classeur qui doit être fermé

Ce qui a pour conséquence que la macro d'ouverture/fermeture, qui pourtant
n'appartient pas au classeur à fermer, s'arrète en cours de route, c'est à
dire à la fermeture du 1er classeur.


"michdenis" a écrit dans le message de news:

Voici une façon de procéder ...

Dans un module standard

'Nom du fichier à fermer et à ré-ouvrir
Public Const Fichier = "c:exceltest.xlsm"

'-------------------------------------
Sub Denis()
'Macro de fermeture du fichier sans sauvegarde
Workbooks("test.xlsm").Close False
End Sub
'-------------------------------------

'-------------------------------------
Sub Ouvrir()
'Ouverture du même fichier
Workbooks.Open Fichier
End Sub
'-------------------------------------


'la macro que tu veux exécuter à partir d'un autre fichier
'--------------------------------------
Private Sub MACRO2()

'Tu donnes à excel la commande de ré-ouvrir le fichier
'avec une durée de temps désirée avant de le fermer
Application.OnTime Now + TimeValue("0:00:05"), "Ouvrir"

'Appel de la procédure de fermeture du fichier
Denis
End Sub
'--------------------------------------







"Papy Jean" a écrit dans le message de news:
4912c6b2$0$951$
Bonjour

Comment faire pour que

Une macro (Sub Macro1) dans le classeur CLA.xlsb
1) appelle le classeur CLB.xlsm
2) à l'ouverture de CLB.xlsm, il y ait lancement automatique de la Macro2
dans CLB.xlsm
3) Macro2 ferme CLA.xlsb et l'ouvre à nouveau
4) Le travail de Macro1 s'arrète.

Notes:
1) est classique
2) je mets dans ThisWorkbook :
Private Sub Workbook_Open()
Call Macro2
End Sub
3) Le problème est que:
Macro2 est bien lancée
mais lorsque CLA.xlsb est clos, Macro2 s'arrète avant d'exécuter la
réouverture.

Merci de votre aide.

Note2: le problème peut sembler bizarre. Voici d'où il vient:
Une application crée un mini classeur pour chaque Devis qu'elle fait
Je viens de la traduire de Excel2003 en Excel2007 en utilisant *.xlsb
Or, dans un cas que j'ai cerné, le fichier créé par Excel 7 est
<mauvais> car sa relecture par un autre classeur part dans les décors.

J'ai constaté qu'une moulinette (CLB.xlsm) qui ferme et rouvre les
classeurs
fait disparaître le problème.
Cela marche bien s'il y a un arrêt au milieu de CLB, mais l'utilisateur
doit
relancer avec un bouton, ce que je trouve gènant.
D'où mon désir d'automatiser, pour rendre la correction transparente à
l'utilisateur.

Papy Jean









Avatar
michdenis
Moi, ce que j'ai compris comme question :

Tu as un classeur nommé "test.xlsm" à partir duquel
tu veux appeler la macro "Macro2" du classeur
"Denis.xlsm". La macro "Macro2" doit fermer le
classeur "Test.xlsm" qui est le classeur d'où la
commande d'exécution de la macro2 origine.
Cette "macro2" doit cependant être capable de
ré-ouvrir quelques secondes plus tard, le fichier
"Test.xlsm" qu'elle vient de fermer.

Si c'était la question, le code du fichier "Denis.xlsm"
est publié dans mon message précédent.

J'ai utilisé ce code dans le fichier "test.xlsm" comme
source de départ de la procédure

La macro est lancée à partir de l'interface de calcul du
fichier "Test.xlsm"

'-------------------------------------------
Sub test()
Dim LaMacro As String
Dim Wk As Workbook
On Error Resume Next
Set Wk = Workbooks("Denis.xlsm")
If Err <> 0 Then
Err = 0
LaMacro = "'c:excelDenis.xlsm'!Macro2"
Application.Run LaMacro
Else
Application.Run "'Denis.xlsm'!Denis"
End If
End Sub
'-------------------------------------------

Afin de m'assurer que le classeur "Test.xlsm" a réellement
été fermé, j'ai mis dans le ThisWorkbook du classeur "test.xlsm"
ceci :
'---------------------------
Private Sub Workbook_Open()
MsgBox "ok, c'est gagné!"
End Sub
'---------------------------

Cette procédure événementielle s'exécute correctement lorsque
le fichier test.xlsm est ré-ouvert.

P.S- Je pense avoir saisi ton message précédent.

| s'arrète en cours de route, c'est à dire à la fermeture du 1er classeur.

Je sais, c'est pourquoi j'ai utilisé une fumesterie application.ontime...

Moi, c'est la seule façon que je connaisse de faire ce que tu désires !
Il en existe peut être d'autre... mais j'ai un temps limite pour répondre
à une question.




"Papy Jean" a écrit dans le message de news:
4912ec0b$0$896$
Merci Michel Denis d'avoir répondu.

Mais je crains d'avoir mal formulé ma question.
Le problème vient de ce que le classeur qui ouvre et ferme (et donc sa
macro) est appelé par le classeur qui doit être fermé

Ce qui a pour conséquence que la macro d'ouverture/fermeture, qui pourtant
n'appartient pas au classeur à fermer, s'arrète en cours de route, c'est à
dire à la fermeture du 1er classeur.


"michdenis" a écrit dans le message de news:

Voici une façon de procéder ...

Dans un module standard

'Nom du fichier à fermer et à ré-ouvrir
Public Const Fichier = "c:exceltest.xlsm"

'-------------------------------------
Sub Denis()
'Macro de fermeture du fichier sans sauvegarde
Workbooks("test.xlsm").Close False
End Sub
'-------------------------------------

'-------------------------------------
Sub Ouvrir()
'Ouverture du même fichier
Workbooks.Open Fichier
End Sub
'-------------------------------------


'la macro que tu veux exécuter à partir d'un autre fichier
'--------------------------------------
Private Sub MACRO2()

'Tu donnes à excel la commande de ré-ouvrir le fichier
'avec une durée de temps désirée avant de le fermer
Application.OnTime Now + TimeValue("0:00:05"), "Ouvrir"

'Appel de la procédure de fermeture du fichier
Denis
End Sub
'--------------------------------------







"Papy Jean" a écrit dans le message de news:
4912c6b2$0$951$
Bonjour

Comment faire pour que

Une macro (Sub Macro1) dans le classeur CLA.xlsb
1) appelle le classeur CLB.xlsm
2) à l'ouverture de CLB.xlsm, il y ait lancement automatique de la Macro2
dans CLB.xlsm
3) Macro2 ferme CLA.xlsb et l'ouvre à nouveau
4) Le travail de Macro1 s'arrète.

Notes:
1) est classique
2) je mets dans ThisWorkbook :
Private Sub Workbook_Open()
Call Macro2
End Sub
3) Le problème est que:
Macro2 est bien lancée
mais lorsque CLA.xlsb est clos, Macro2 s'arrète avant d'exécuter la
réouverture.

Merci de votre aide.

Note2: le problème peut sembler bizarre. Voici d'où il vient:
Une application crée un mini classeur pour chaque Devis qu'elle fait
Je viens de la traduire de Excel2003 en Excel2007 en utilisant *.xlsb
Or, dans un cas que j'ai cerné, le fichier créé par Excel 7 est
<mauvais> car sa relecture par un autre classeur part dans les décors.

J'ai constaté qu'une moulinette (CLB.xlsm) qui ferme et rouvre les
classeurs
fait disparaître le problème.
Cela marche bien s'il y a un arrêt au milieu de CLB, mais l'utilisateur
doit
relancer avec un bouton, ce que je trouve gènant.
D'où mon désir d'automatiser, pour rendre la correction transparente à
l'utilisateur.

Papy Jean









Avatar
michdenis
Il y a une coquille on devrait lire dans la procédure :

"'Denis.xlsm'!Macro2" au lieu de "'Denis.xlsm'!Denis"




"michdenis" a écrit dans le message de news:
%
Moi, ce que j'ai compris comme question :

Tu as un classeur nommé "test.xlsm" à partir duquel
tu veux appeler la macro "Macro2" du classeur
"Denis.xlsm". La macro "Macro2" doit fermer le
classeur "Test.xlsm" qui est le classeur d'où la
commande d'exécution de la macro2 origine.
Cette "macro2" doit cependant être capable de
ré-ouvrir quelques secondes plus tard, le fichier
"Test.xlsm" qu'elle vient de fermer.

Si c'était la question, le code du fichier "Denis.xlsm"
est publié dans mon message précédent.

J'ai utilisé ce code dans le fichier "test.xlsm" comme
source de départ de la procédure

La macro est lancée à partir de l'interface de calcul du
fichier "Test.xlsm"

'-------------------------------------------
Sub test()
Dim LaMacro As String
Dim Wk As Workbook
On Error Resume Next
Set Wk = Workbooks("Denis.xlsm")
If Err <> 0 Then
Err = 0
LaMacro = "'c:excelDenis.xlsm'!Macro2"
Application.Run LaMacro
Else
Application.Run "'Denis.xlsm'!Denis"
End If
End Sub
'-------------------------------------------

Afin de m'assurer que le classeur "Test.xlsm" a réellement
été fermé, j'ai mis dans le ThisWorkbook du classeur "test.xlsm"
ceci :
'---------------------------
Private Sub Workbook_Open()
MsgBox "ok, c'est gagné!"
End Sub
'---------------------------

Cette procédure événementielle s'exécute correctement lorsque
le fichier test.xlsm est ré-ouvert.

P.S- Je pense avoir saisi ton message précédent.

| s'arrète en cours de route, c'est à dire à la fermeture du 1er classeur.

Je sais, c'est pourquoi j'ai utilisé une fumesterie application.ontime...

Moi, c'est la seule façon que je connaisse de faire ce que tu désires !
Il en existe peut être d'autre... mais j'ai un temps limite pour répondre
à une question.




"Papy Jean" a écrit dans le message de news:
4912ec0b$0$896$
Merci Michel Denis d'avoir répondu.

Mais je crains d'avoir mal formulé ma question.
Le problème vient de ce que le classeur qui ouvre et ferme (et donc sa
macro) est appelé par le classeur qui doit être fermé

Ce qui a pour conséquence que la macro d'ouverture/fermeture, qui pourtant
n'appartient pas au classeur à fermer, s'arrète en cours de route, c'est à
dire à la fermeture du 1er classeur.


"michdenis" a écrit dans le message de news:

Voici une façon de procéder ...

Dans un module standard

'Nom du fichier à fermer et à ré-ouvrir
Public Const Fichier = "c:exceltest.xlsm"

'-------------------------------------
Sub Denis()
'Macro de fermeture du fichier sans sauvegarde
Workbooks("test.xlsm").Close False
End Sub
'-------------------------------------

'-------------------------------------
Sub Ouvrir()
'Ouverture du même fichier
Workbooks.Open Fichier
End Sub
'-------------------------------------


'la macro que tu veux exécuter à partir d'un autre fichier
'--------------------------------------
Private Sub MACRO2()

'Tu donnes à excel la commande de ré-ouvrir le fichier
'avec une durée de temps désirée avant de le fermer
Application.OnTime Now + TimeValue("0:00:05"), "Ouvrir"

'Appel de la procédure de fermeture du fichier
Denis
End Sub
'--------------------------------------







"Papy Jean" a écrit dans le message de news:
4912c6b2$0$951$
Bonjour

Comment faire pour que

Une macro (Sub Macro1) dans le classeur CLA.xlsb
1) appelle le classeur CLB.xlsm
2) à l'ouverture de CLB.xlsm, il y ait lancement automatique de la Macro2
dans CLB.xlsm
3) Macro2 ferme CLA.xlsb et l'ouvre à nouveau
4) Le travail de Macro1 s'arrète.

Notes:
1) est classique
2) je mets dans ThisWorkbook :
Private Sub Workbook_Open()
Call Macro2
End Sub
3) Le problème est que:
Macro2 est bien lancée
mais lorsque CLA.xlsb est clos, Macro2 s'arrète avant d'exécuter la
réouverture.

Merci de votre aide.

Note2: le problème peut sembler bizarre. Voici d'où il vient:
Une application crée un mini classeur pour chaque Devis qu'elle fait
Je viens de la traduire de Excel2003 en Excel2007 en utilisant *.xlsb
Or, dans un cas que j'ai cerné, le fichier créé par Excel 7 est
<mauvais> car sa relecture par un autre classeur part dans les décors.

J'ai constaté qu'une moulinette (CLB.xlsm) qui ferme et rouvre les
classeurs
fait disparaître le problème.
Cela marche bien s'il y a un arrêt au milieu de CLB, mais l'utilisateur
doit
relancer avec un bouton, ce que je trouve gènant.
D'où mon désir d'automatiser, pour rendre la correction transparente à
l'utilisateur.

Papy Jean









Avatar
Papy Jean
"michdenis" a écrit dans le message de news:

Il y a une coquille on devrait lire dans la procédure :

"'Denis.xlsm'!Macro2" au lieu de "'Denis.xlsm'!Denis"


Re-Bonjour
Je suis en train d'essayer, ce qui m'a pris du temps

Je n'avais pas compris le fait de lancer l'ouverture en temps décalé, avant
de lancer la fermeture.
J'y arrive et mon fichier est bien réouvert.

Il me reste un petit os: à la fin
un message s'affiche qui me dit "Argument non facultatif"

Ce qui me semble bizarre, c'est que le travail semble se faire;
j'ai bien ton message "ok c'est gagné", le classeur est bien fermé et
réouvert

mais il ne met pas en couleur l'instruction erronée; ce qui fait que je ne
sais pas où la chercher.
j'ai pensé à ajouter >End< juste après l'ouverture, mais ça ne change rien.

En attendant, merci tout plein
Papy jean

EXCUSES : j'ai mal dirigé ma dernière réponse



"michdenis" a écrit dans le message de news:
%
Moi, ce que j'ai compris comme question :

Tu as un classeur nommé "test.xlsm" à partir duquel
tu veux appeler la macro "Macro2" du classeur
"Denis.xlsm". La macro "Macro2" doit fermer le
classeur "Test.xlsm" qui est le classeur d'où la
commande d'exécution de la macro2 origine.
Cette "macro2" doit cependant être capable de
ré-ouvrir quelques secondes plus tard, le fichier
"Test.xlsm" qu'elle vient de fermer.

Si c'était la question, le code du fichier "Denis.xlsm"
est publié dans mon message précédent.

J'ai utilisé ce code dans le fichier "test.xlsm" comme
source de départ de la procédure

La macro est lancée à partir de l'interface de calcul du
fichier "Test.xlsm"

'-------------------------------------------


Avatar
michdenis
Je t'ai envoyé en bal perso. les 2 fichiers exemples qui
m'ont servi à élaborer la procédure, tu devras les adapter !



"Papy Jean" a écrit dans le message de news:
49130b19$0$966$

"michdenis" a écrit dans le message de news:

Il y a une coquille on devrait lire dans la procédure :

"'Denis.xlsm'!Macro2" au lieu de "'Denis.xlsm'!Denis"


Re-Bonjour
Je suis en train d'essayer, ce qui m'a pris du temps

Je n'avais pas compris le fait de lancer l'ouverture en temps décalé, avant
de lancer la fermeture.
J'y arrive et mon fichier est bien réouvert.

Il me reste un petit os: à la fin
un message s'affiche qui me dit "Argument non facultatif"

Ce qui me semble bizarre, c'est que le travail semble se faire;
j'ai bien ton message "ok c'est gagné", le classeur est bien fermé et
réouvert

mais il ne met pas en couleur l'instruction erronée; ce qui fait que je ne
sais pas où la chercher.
j'ai pensé à ajouter >End< juste après l'ouverture, mais ça ne change rien.

En attendant, merci tout plein
Papy jean

EXCUSES : j'ai mal dirigé ma dernière réponse



"michdenis" a écrit dans le message de news:
%
Moi, ce que j'ai compris comme question :

Tu as un classeur nommé "test.xlsm" à partir duquel
tu veux appeler la macro "Macro2" du classeur
"Denis.xlsm". La macro "Macro2" doit fermer le
classeur "Test.xlsm" qui est le classeur d'où la
commande d'exécution de la macro2 origine.
Cette "macro2" doit cependant être capable de
ré-ouvrir quelques secondes plus tard, le fichier
"Test.xlsm" qu'elle vient de fermer.

Si c'était la question, le code du fichier "Denis.xlsm"
est publié dans mon message précédent.

J'ai utilisé ce code dans le fichier "test.xlsm" comme
source de départ de la procédure

La macro est lancée à partir de l'interface de calcul du
fichier "Test.xlsm"

'-------------------------------------------


Avatar
Papy Jean
Merci, tout va bien
Cordialement
Papy Jean