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

Avec workbook.close, mon classeur se ferme puis se rouvre...

11 réponses
Avatar
Nicolas M
Bonjour,

j'utilise le code suivant dans un fichier EXCEL 2003 :
activeworkbook.save
activeworkbook.close

Et le fichier se sauvegarde, se ferme puis se réouvre, se sauvegarde puis se
ferme et ainsi de suite plusieurs fois.

Comment empêcher la réouverture du fichier?

Cordialement

10 réponses

1 2
Avatar
Céline
Salut Nicolas

Peux-tu préciser le context d'utilisation de ces codes ?
(si c'est une procédure liée à une feuille, si tu l'as inséré dans
une procédure que tu as créée dans un module indépendant etc.)
C'est apparemment cet environnement qui provoque ceci, amha

Céline



Bonjour,

j'utilise le code suivant dans un fichier EXCEL 2003 :
activeworkbook.save
activeworkbook.close

Et le fichier se sauvegarde, se ferme puis se réouvre, se sauvegarde pu is se
ferme et ainsi de suite plusieurs fois.

Comment empêcher la réouverture du fichier?

Cordialement


Avatar
Nicolas M
Bonjour,

voici le code que j'utilise. Je l'ai inséré directement dans l'objet
workbook de mon fichier :

Option Explicit
Const delai = "00:01:00"

Private Sub Workbook_Open()
Worksheets("Liste").Range("A6:i6").Select
ActiveWindow.Zoom = True
minuteur
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
minuteur
End Sub

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

Sub minuteur()
Application.OnTime Now + TimeValue(delai), "thisworkbook.fermefichier", False
End Sub

Sub fermefichier()
'beep: beep: beep
Application.Wait Now + TimeValue("00:00:03")
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
Avatar
Céline
Re ,

Malheurseuement je ne connais pas les procédures ontime etc... Mais
j'ai essayé de prendre le toro par les cornes et voila ce qui en
ressort

commence par virer les procédures
minuteur
et
fermefichier
de la page thisWorkbook
Place-les plutôt dans un mode à part
(insersion / Module dans le VBE)
noublie pas non plus de déplacer la constante delai avec, car les
variables déclarées dans les feuilles sont privées je crois, alors
que dans les modules standard elles sont publiques.

oubli pas de changer
Application.OnTime Now + TimeValue(delai), "thisworkbook.fermefichier",
False
par
Application.OnTime Now + TimeValue(delai), "Module1.fermefichier",
False
si c le Module1 :p

chez moi, le problème disparait.
comment ça se passe pour toi ?

Bonne après midi

Céline


Bonjour,

voici le code que j'utilise. Je l'ai inséré directement dans l'objet
workbook de mon fichier :

Option Explicit
Const delai = "00:01:00"

Private Sub Workbook_Open()
Worksheets("Liste").Range("A6:i6").Select
ActiveWindow.Zoom = True
minuteur
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Rang e)
minuteur
End Sub

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

Sub minuteur()
Application.OnTime Now + TimeValue(delai), "thisworkbook.fermefichier", F alse
End Sub

Sub fermefichier()
'beep: beep: beep
Application.Wait Now + TimeValue("00:00:03")
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub


Avatar
Nicolas M
Re,
non chez moi c'est pareil qu'avant.
avais-tu réussi à voir le défaut ?
Pour voir le défaut, il faut écrire le code dans vba. sauvegarder et fermer
le fichier.
Relancer le fichier, ecrire un truc dans une cellule sans sauvegarder puis
attendre. Et c'est parti la musique.
Si par hasard le défaut ne se produit pas, peux tu me dire quelle version
d'excel tu utilises?

merci


Re ,

Malheurseuement je ne connais pas les procédures ontime etc... Mais
j'ai essayé de prendre le toro par les cornes et voila ce qui en
ressort

commence par virer les procédures
minuteur
et
fermefichier
de la page thisWorkbook
Place-les plutôt dans un mode à part
(insersion / Module dans le VBE)
noublie pas non plus de déplacer la constante delai avec, car les
variables déclarées dans les feuilles sont privées je crois, alors
que dans les modules standard elles sont publiques.

oubli pas de changer
Application.OnTime Now + TimeValue(delai), "thisworkbook.fermefichier",
False
par
Application.OnTime Now + TimeValue(delai), "Module1.fermefichier",
False
si c le Module1 :p

chez moi, le problème disparait.
comment ça se passe pour toi ?

Bonne après midi

Céline


Bonjour,

voici le code que j'utilise. Je l'ai inséré directement dans l'objet
workbook de mon fichier :

Option Explicit
Const delai = "00:01:00"

Private Sub Workbook_Open()
Worksheets("Liste").Range("A6:i6").Select
ActiveWindow.Zoom = True
minuteur
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
minuteur
End Sub

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

Sub minuteur()
Application.OnTime Now + TimeValue(delai), "thisworkbook.fermefichier", False
End Sub

Sub fermefichier()
'beep: beep: beep
Application.Wait Now + TimeValue("00:00:03")
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub






Avatar
Céline
erratummm
dsl
en fait la procédure s'execute à chaque appel !!!!
alors
proposition alternative
tu déclares dans ton module une variable
Public minuteur_active As Boolean

Dans Thisworkbook
procédure workbook_open
minuteur_activé = false

à chaque procédure qui appalle minuteur
tu remplaces minuteur par :

If minuteur_active = False Then
minuteur_active = True
minuteur
End If


Ca marche mieux ?



Re,
non chez moi c'est pareil qu'avant.
avais-tu réussi à voir le défaut ?
Pour voir le défaut, il faut écrire le code dans vba. sauvegarder et fermer
le fichier.
Relancer le fichier, ecrire un truc dans une cellule sans sauvegarder puis
attendre. Et c'est parti la musique.
Si par hasard le défaut ne se produit pas, peux tu me dire quelle versi on
d'excel tu utilises?

merci


Re ,

Malheurseuement je ne connais pas les procédures ontime etc... Mais
j'ai essayé de prendre le toro par les cornes et voila ce qui en
ressort

commence par virer les procédures
minuteur
et
fermefichier
de la page thisWorkbook
Place-les plutôt dans un mode à part
(insersion / Module dans le VBE)
noublie pas non plus de déplacer la constante delai avec, car les
variables déclarées dans les feuilles sont privées je crois, alors
que dans les modules standard elles sont publiques.

oubli pas de changer
Application.OnTime Now + TimeValue(delai), "thisworkbook.fermefichier",
False
par
Application.OnTime Now + TimeValue(delai), "Module1.fermefichier",
False
si c le Module1 :p

chez moi, le problème disparait.
comment ça se passe pour toi ?

Bonne après midi

Céline


Bonjour,

voici le code que j'utilise. Je l'ai inséré directement dans l'ob jet
workbook de mon fichier :

Option Explicit
Const delai = "00:01:00"

Private Sub Workbook_Open()
Worksheets("Liste").Range("A6:i6").Select
ActiveWindow.Zoom = True
minuteur
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
minuteur
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal T arget
As Range)
minuteur
End Sub

Sub minuteur()
Application.OnTime Now + TimeValue(delai), "thisworkbook.fermefichier ", False
End Sub

Sub fermefichier()
'beep: beep: beep
Application.Wait Now + TimeValue("00:00:03")
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub








Avatar
Nicolas M
Salut,

en fait ce que je souhaite faire, c'est de fermer automatiquement un
classeur quand cela fait 10 minutes d'inactivité dans le fichier.
j'appelai à chaque fois la procédure minuteur afin de remettre à 0 mon
compteur à chaque modification faite sur le fichier. Ceci me permet de
contrôler l'activité sur le fichier et ne pas violement fermer le fichier
alors qu'on est en train de l'utiliser.

Si j'insère le boolean d'activation de la fonction, mon fichier se fermera
de x min (défini dans la constante delai) après le premier appel de la
fonction minuteur.

En fait je n'ai pas l'impression que mon code soit faux. Ce que je ne
comrpend pas, c'est qu'est ce qui pousse EXCEL à me rouvrir le fichier. Je
pensais à la récupération automatique de fichier mis en place depuis la
version 2002 d'excel...

Merci pour ton aide.

Cordialement,
Nicolas


erratummm
dsl
en fait la procédure s'execute à chaque appel !!!!
alors
proposition alternative
tu déclares dans ton module une variable
Public minuteur_active As Boolean

Dans Thisworkbook
procédure workbook_open
minuteur_activé = false

à chaque procédure qui appalle minuteur
tu remplaces minuteur par :

If minuteur_active = False Then
minuteur_active = True
minuteur
End If


Ca marche mieux ?



Re,
non chez moi c'est pareil qu'avant.
avais-tu réussi à voir le défaut ?
Pour voir le défaut, il faut écrire le code dans vba. sauvegarder et fermer
le fichier.
Relancer le fichier, ecrire un truc dans une cellule sans sauvegarder puis
attendre. Et c'est parti la musique.
Si par hasard le défaut ne se produit pas, peux tu me dire quelle version
d'excel tu utilises?

merci


Re ,

Malheurseuement je ne connais pas les procédures ontime etc... Mais
j'ai essayé de prendre le toro par les cornes et voila ce qui en
ressort

commence par virer les procédures
minuteur
et
fermefichier
de la page thisWorkbook
Place-les plutôt dans un mode à part
(insersion / Module dans le VBE)
noublie pas non plus de déplacer la constante delai avec, car les
variables déclarées dans les feuilles sont privées je crois, alors
que dans les modules standard elles sont publiques.

oubli pas de changer
Application.OnTime Now + TimeValue(delai), "thisworkbook.fermefichier",
False
par
Application.OnTime Now + TimeValue(delai), "Module1.fermefichier",
False
si c le Module1 :p

chez moi, le problème disparait.
comment ça se passe pour toi ?

Bonne après midi

Céline


Bonjour,

voici le code que j'utilise. Je l'ai inséré directement dans l'objet
workbook de mon fichier :

Option Explicit
Const delai = "00:01:00"

Private Sub Workbook_Open()
Worksheets("Liste").Range("A6:i6").Select
ActiveWindow.Zoom = True
minuteur
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
minuteur
End Sub

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

Sub minuteur()
Application.OnTime Now + TimeValue(delai), "thisworkbook.fermefichier", False
End Sub

Sub fermefichier()
'beep: beep: beep
Application.Wait Now + TimeValue("00:00:03")
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub












Avatar
Céline
ABDKR !!

En fait moi la chose que j'ai constaté c'est que à chaque fois qu'un
évènement se passait il lancait un timing de 10 min au bout duquel
koikil se passe le classeur était fermé.
Ce qui fait que si j'écrivais 1 dans A1 et truc dans B5 par ex
ben j'allais avoir deux fois la fermeture !
Et ainsi de suite à chaque fois que je faisais quelque chose apellant
Minuteur.
Ca ne le remet pas à Zéro je crois

en fait ce que je souhaite faire, c'est de fermer automatiquement un
classeur quand cela fait 10 minutes d'inactivité dans le fichier.


Bon, on va se pencher un peu plus sur le sujet alors...
je reviens d que j'ai une idée. (géniale si possible)
@ +
Céline



Salut,

en fait ce que je souhaite faire, c'est de fermer automatiquement un
classeur quand cela fait 10 minutes d'inactivité dans le fichier.
j'appelai à chaque fois la procédure minuteur afin de remettre à 0 mon
compteur à chaque modification faite sur le fichier. Ceci me permet de
contrôler l'activité sur le fichier et ne pas violement fermer le fic hier
alors qu'on est en train de l'utiliser.

Si j'insère le boolean d'activation de la fonction, mon fichier se ferm era
de x min (défini dans la constante delai) après le premier appel de la
fonction minuteur.

En fait je n'ai pas l'impression que mon code soit faux. Ce que je ne
comrpend pas, c'est qu'est ce qui pousse EXCEL à me rouvrir le fichier. Je
pensais à la récupération automatique de fichier mis en place depui s la
version 2002 d'excel...

Merci pour ton aide.

Cordialement,
Nicolas


erratummm
dsl
en fait la procédure s'execute à chaque appel !!!!
alors
proposition alternative
tu déclares dans ton module une variable
Public minuteur_active As Boolean

Dans Thisworkbook
procédure workbook_open
minuteur_activé = false

à chaque procédure qui appalle minuteur
tu remplaces minuteur par :

If minuteur_active = False Then
minuteur_active = True
minuteur
End If


Ca marche mieux ?



Re,
non chez moi c'est pareil qu'avant.
avais-tu réussi à voir le défaut ?
Pour voir le défaut, il faut écrire le code dans vba. sauvegarder et fermer
le fichier.
Relancer le fichier, ecrire un truc dans une cellule sans sauvegarder puis
attendre. Et c'est parti la musique.
Si par hasard le défaut ne se produit pas, peux tu me dire quelle v ersion
d'excel tu utilises?

merci


Re ,

Malheurseuement je ne connais pas les procédures ontime etc... Ma is
j'ai essayé de prendre le toro par les cornes et voila ce qui en
ressort

commence par virer les procédures
minuteur
et
fermefichier
de la page thisWorkbook
Place-les plutôt dans un mode à part
(insersion / Module dans le VBE)
noublie pas non plus de déplacer la constante delai avec, car les
variables déclarées dans les feuilles sont privées je crois, alors
que dans les modules standard elles sont publiques.

oubli pas de changer
Application.OnTime Now + TimeValue(delai), "thisworkbook.fermefichi er",
False
par
Application.OnTime Now + TimeValue(delai), "Module1.fermefichier",
False
si c le Module1 :p

chez moi, le problème disparait.
comment ça se passe pour toi ?

Bonne après midi

Céline


Bonjour,

voici le code que j'utilise. Je l'ai inséré directement dans l'objet
workbook de mon fichier :

Option Explicit
Const delai = "00:01:00"

Private Sub Workbook_Open()
Worksheets("Liste").Range("A6:i6").Select
ActiveWindow.Zoom = True
minuteur
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
minuteur
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByV al Target
As Range)
minuteur
End Sub

Sub minuteur()
Application.OnTime Now + TimeValue(delai), "thisworkbook.fermefic hier", False
End Sub

Sub fermefichier()
'beep: beep: beep
Application.Wait Now + TimeValue("00:00:03")
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub














Avatar
Nicolas M
MEEEEEEEEEEEEEEEEEEERRRRRRRRRRRRRRRRRRRRRRRRCCCCCCCCCCCCCCCCCCCCCCIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII tu es géniale...

tu as raison, cela ne remettait pas mon compteur à 0. en fait il me faut une
ligne supplémentaire pour annuler le compteur précédent.

Merci encore pour ton aide.

Voici le code final, j'ai tout remis dans l'objet woorkbook car ca marche
aussi et je préfère voir le code en une fois :

Option Explicit
Const delai = "00:00:30"
Public dat As Date

Private Sub Workbook_Open()
dat = Now + TimeValue(delai)
Application.OnTime dat, "thisworkbook.fermefichier"
Worksheets("Liste").Range("A6:i6").Select
ActiveWindow.Zoom = True
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
minuteur
End Sub

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

Sub minuteur()
Application.OnTime EarliestTime:Út,
Procedure:="thisworkbook.fermefichier", Schedule:úlse
dat = Now + TimeValue(delai)
Application.OnTime EarliestTime:Út, Procedure:="thisworkbook.fermefichier"
End Sub

Sub fermefichier()
'beep: beep: beep
Application.Wait Now + TimeValue("00:00:03")
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
Avatar
Céline
MEEEEEEEEEEEEEEEEEEERRRRRRRRRRRRRRRRRRRRRRRRCCCCCCCCCCCCCCCCCCCCCCIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII tu es géniale...


ecoute, si c'est pour me dire des choses comme ça, n'hésite pas à me
faire part de tous tes problèmes Excel, surtout le matin quand le
cerveau embrouillé a du mal à fonctionner...
:p
Je suis ravie d'avoir pu t'être utile... :)
Passe une bonne journée toi aussi, donc
PS : si je peux me permettre un dernier conseil, pour l'avenir, pense
aussi à utiliser (en plus du pas à pas) le Msgbox 'la valeur dont tu
n'es pas sur...' en cours de procédures... (bn après ici je sais pas
si ca aurait servi à gd chose)
byye !
Céline



MEEEEEEEEEEEEEEEEEEERRRRRRRRRRRRRRRRRRRRRRRRCCCCCCCCCCCCCCCCCCCCCCIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII tu es géniale...

tu as raison, cela ne remettait pas mon compteur à 0. en fait il me fau t une
ligne supplémentaire pour annuler le compteur précédent.

Merci encore pour ton aide.

Voici le code final, j'ai tout remis dans l'objet woorkbook car ca marche
aussi et je préfère voir le code en une fois :

Option Explicit
Const delai = "00:00:30"
Public dat As Date

Private Sub Workbook_Open()
dat = Now + TimeValue(delai)
Application.OnTime dat, "thisworkbook.fermefichier"
Worksheets("Liste").Range("A6:i6").Select
ActiveWindow.Zoom = True
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Rang e)
minuteur
End Sub

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

Sub minuteur()
Application.OnTime EarliestTime:Út,
Procedure:="thisworkbook.fermefichier", Schedule:úlse
dat = Now + TimeValue(delai)
Application.OnTime EarliestTime:Út, Procedure:="thisworkbook.fermef ichier"
End Sub

Sub fermefichier()
'beep: beep: beep
Application.Wait Now + TimeValue("00:00:03")
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub


Avatar
Nicolas M
MEEEEEEEEEEEEEEEEEEERRRRRRRRRRRRRRRRRRRRRRRRCCCCCCCCCCCCCCCCCCCCCCIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
tu es géniale... ca marche encore aujourd'hui ;o)

bonne journée à toi


MEEEEEEEEEEEEEEEEEEERRRRRRRRRRRRRRRRRRRRRRRRCCCCCCCCCCCCCCCCCCCCCCIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII tu es géniale...


ecoute, si c'est pour me dire des choses comme ça, n'hésite pas à me
faire part de tous tes problèmes Excel, surtout le matin quand le
cerveau embrouillé a du mal à fonctionner...
:p
Je suis ravie d'avoir pu t'être utile... :)
Passe une bonne journée toi aussi, donc
PS : si je peux me permettre un dernier conseil, pour l'avenir, pense
aussi à utiliser (en plus du pas à pas) le Msgbox 'la valeur dont tu
n'es pas sur...' en cours de procédures... (bn après ici je sais pas
si ca aurait servi à gd chose)
byye !
Céline



MEEEEEEEEEEEEEEEEEEERRRRRRRRRRRRRRRRRRRRRRRRCCCCCCCCCCCCCCCCCCCCCCIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII tu es géniale...

tu as raison, cela ne remettait pas mon compteur à 0. en fait il me faut une
ligne supplémentaire pour annuler le compteur précédent.

Merci encore pour ton aide.

Voici le code final, j'ai tout remis dans l'objet woorkbook car ca marche
aussi et je préfère voir le code en une fois :

Option Explicit
Const delai = "00:00:30"
Public dat As Date

Private Sub Workbook_Open()
dat = Now + TimeValue(delai)
Application.OnTime dat, "thisworkbook.fermefichier"
Worksheets("Liste").Range("A6:i6").Select
ActiveWindow.Zoom = True
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
minuteur
End Sub

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

Sub minuteur()
Application.OnTime EarliestTime:Út,
Procedure:="thisworkbook.fermefichier", Schedule:úlse
dat = Now + TimeValue(delai)
Application.OnTime EarliestTime:Út, Procedure:="thisworkbook.fermefichier"
End Sub

Sub fermefichier()
'beep: beep: beep
Application.Wait Now + TimeValue("00:00:03")
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub






1 2